Ducttape the Ducttape


11

Su jefe descubrió que a muchos de sus empleados (incluido usted) les gusta robar código de otros. Le ordenó que le escribiera un programa que pueda usar para encontrar personas que roben código de otros.

Tarea:

Escriba un programa / función que detecte si alguien copió (parte de) su código de otro lugar.

El programa obtendrá todos los programas existentes y el programa que debe probar a partir de dos entradas separadas . Editar: como no hay respuestas hasta ahora, ¡puedes usar expresiones regulares!

Salida

  • El programa debería generar todos los fragmentos de código robados, separados por un espacio o una nueva línea. (Puede tener un espacio o una nueva línea al final).
  • Una pieza de código se considera robada / copiada si consta de 10 o más bytes sucesivos . (Lo siento, fanáticos de Java!)
  • Debe generar la mayor cantidad posible, pero si hay superposiciones, puede ignorar una de ellas o generar ambas.

Giro:

Como se mencionó anteriormente, también te encanta la codificación de cinta adhesiva. ¡Eso significa que todo en su código se copiará de un sitio de intercambio de pila! Puede copiar lo que quiera (no limitado al código en bloques de código) y todo lo que quiera. (Pero al menos 10 bytes) (La misma regla que la anterior sobre lo que se considera robado / copiado). (Tenga en cuenta que las respuestas que se publicaron después de esta pregunta no se pueden usar). Proporcione enlaces a donde obtuvo su código de.

Ejemplos:

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

Salida:

 = document.getElementById("

Entrada:
foo (La primera entrada)
foo+bar(La segunda entrada)

Salida:
nada.

Entrada:
public static void main(String[] args) (La primera entrada)
public static void main(String[] args)(La segunda entrada)

Salida:

 main(String[] args)

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

Salida:

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

o

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

1
Faltan reglas sobre qué cadenas se pueden copiar y cómo (para el código).
feersum

44
¿Las cadenas copiadas deben provenir de bloques de código o de alguna parte de una respuesta SE? Si proviene de un bloque de código, ¿necesita usar todo el bloque o se puede usar una subcadena? ¿Pueden las cadenas provenir del texto formateado o de la fuente Markdown? ¿Se pueden usar bloques de código más nuevos que esta pregunta? ¿Se pueden usar las revisiones antiguas de una pregunta?
fiesta

3
Dices que las subcadenas tienen una longitud de 10 o más. ¿Puedo colocar una subcadena dentro de otra subcadena? (¿Las subcadenas tienen que ser continuas?)
Azul

1
@sysreq ¡Decidí permitir expresiones regulares!
Stefnotch

55
Respuesta fácil: Use
Unary

Respuestas:


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 de esta respuesta :

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

get_matching_blocks()se copia de esta respuesta

a=raw_input()
b=raw_input()

se copia de esta pregunta

for start, _, size inse copia de esta respuesta y la segunda aparición de similar(a, b)se copia del mismo lugar que la primera.

if(size > 9)se copia de esta pregunta .

:
    print

se copia de esta pregunta

a[start:se copia de esta respuesta .

y finalmente, start+size]se copia de esta búsqueda

Finalmente respondió después de un año y medio ...


+1 Sin embargo, stackoverflow.com/questions/37386311/… se publicó después de que se publicó este desafío. Decidí eliminar esa restricción, por lo que su respuesta está bien. :)
Stefnotch

1
@Stenfoch No es necesario; una respuesta anterior contiene la misma frase
pppery

2
Una cosa que aprendí sobre los desafíos de codificación de cinta adhesiva : es difícil hacer un seguimiento de dónde obtuviste todo tu código.
pppery

Wow, el puntaje de esta publicación ha aumentado muy rápidamente ...
pppery
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.