Ducttape the Ducttape


11

Seu chefe descobriu que muitos de seus funcionários (incluindo você) gostam de roubar códigos de outras pessoas. Ele ordenou que você escrevesse para ele um programa que ele pode usar para encontrar pessoas que roubam código de outras pessoas.

Tarefa:

Escreva um programa / função que detecte se alguém copiou (parte de) seu código de outro lugar.

O programa obterá todos os programas existentes e o programa que ele deve testar a partir de duas entradas separadas . Edit: Como não há respostas até agora, você pode usar expressões regulares!

Resultado

  • O programa deve gerar todos os trechos de código roubados, separados por um espaço ou uma nova linha. (Pode haver um espaço ou uma nova linha no final.)
  • Um pedaço de código é considerado roubado / copiado se consistir em 10 ou mais bytes sucessivos . (Desculpe, fãs de Java!)
  • Você deve produzir o máximo possível, mas, se houver sobreposição, poderá ignorar um deles ou produzir ambos.

Torção:

Como mencionado anteriormente, você também adora codificação de fita adesiva. Isso significa que tudo no seu código será copiado e colado de um site de troca de pilhas! Você pode copiar o que quiser (não limitado ao código em blocos de código) e o quanto quiser. (Mas pelo menos 10 bytes) (A mesma regra acima sobre o que é considerado roubado / copiado.) (Observe que as respostas postadas após esta pergunta não podem ser usadas.) Forneça links para onde você obteve seu código de.

Exemplos:

Entrada:
x = document.getElementById("ninja'd"); (a primeira entrada)
y = document.getElementById("id");(a segunda entrada)

Resultado:

 = document.getElementById("

Entrada:
foo (a primeira entrada)
foo+bar(a segunda entrada)

Saída:
Nada.

Entrada:
public static void main(String[] args) (a primeira entrada)
public static void main(String[] args)(a segunda entrada)

Resultado:

 main(String[] args)

Entrada:
for(var i=0; i<x.length; i++){} (a primeira entrada)
for(var i=0; i<oops.length; i++){break;}(a segunda entrada)

Resultado:

for(var i=0; i<
.length; i++){

ou

for(var i=0; i< .length; i++){

1
Faltam regras para quais cadeias de caracteres podem ser copiadas e como (para o código).
feersum

4
As seqüências copiadas precisam vir de blocos de código ou de alguma parte de uma resposta SE? Se vier de um bloco de código, ele precisará usar o bloco inteiro ou uma substring pode ser usada? As seqüências de caracteres podem vir do texto formatado ou da fonte Markdown? Os blocos de código mais recentes que esta pergunta podem ser usados? Revisões antigas de uma pergunta podem ser usadas?
feersum

3
Você diz que as substrings devem ter um comprimento de 10 ou mais. Posso colocar uma subcadeia dentro de outra subcadeia? (As substrings têm que ser contínuas?) #
Blue

1
@sysreq Decidi permitir expressões regulares!
27515 Stefhany Novh

5
Resposta fácil: Use Unary
lirtosiast

Respostas:


9

Python 2, 224 bytes

from difflib import SequenceMatcher
def similar(a, b):
    return SequenceMatcher(None, a, b).get_matching_blocks()
a=raw_input()
b=raw_input()
for start, _, size in similar(a, b):
 if(size > 9):
  print a[start:start+size]

Copiado desta resposta :

from difflib import SequenceMatcher
def similar(a, b):
    return SequenceMatcher(None, a, b).

get_matching_blocks()é copiado desta resposta

a=raw_input()
b=raw_input()

é copiado desta pergunta

for start, _, size iné copiado desta resposta e a segunda ocorrência de similar(a, b)é copiada do mesmo local que a primeira.

if(size > 9)é copiado desta pergunta .

:
    print

é copiado desta pergunta

a[start:é copiado desta resposta .

e, finalmente, start+size]é copiado deste questipn

Finalmente respondeu depois de um ano e meio ...


+1 Porém, o stackoverflow.com/questions/37386311/… foi publicado após o lançamento deste desafio. Decidi remover essa restrição, então sua resposta está correta. :)
Stefnotch

1
@Stenfoch Você não precisa; uma resposta anteriormente contém a mesma frase
pppery

2
Uma coisa que aprendi sobre os desafios da codificação de fita adesiva : é complicado acompanhar onde você obteve todo o seu código.
pppery

Uau, a pontuação deste post tem aumentado muito rapidamente ...
pppery
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.