Ducttape il Ducttape


11

Il tuo capo ha scoperto che molti dei suoi dipendenti (incluso te) amano rubare il codice agli altri. Ti ha ordinato di scrivergli un programma che può usare per trovare persone che rubano il codice agli altri.

Compito:

Scrivi un programma / funzione che rilevi se qualcuno ha copiato (parte del) suo codice da qualche altra parte.

Il programma otterrà tutti i programmi esistenti e il programma che dovrebbe testare da due input separati . Modifica: dato che finora non ci sono risposte, puoi usare espressioni regolari!

Produzione

  • Il programma dovrebbe quindi generare tutti i pezzi di codice rubati, separati da uno spazio o da una nuova riga. (Potrebbe avere uno spazio o una nuova riga alla fine.)
  • Un pezzo di codice viene considerato rubato / copiato se è composto da 10 o più byte successivi . (Mi dispiace, fan di Java!)
  • Devi produrre il più possibile, ma se ci sono quelli sovrapposti, puoi ignorarne uno o emetterli entrambi.

Twist:

Come accennato in precedenza, ti piace anche la codifica del nastro adesivo. Ciò significa che tutto il codice verrà copiato e incollato da un sito di scambio di stack! Puoi copiare tutto ciò che vuoi (non limitato al codice in blocchi di codice) e quanto vuoi. (Ma almeno 10 byte) (Stessa regola di cui sopra su ciò che viene considerato rubato / copiato.) (Nota che qualsiasi risposta che è stata pubblicata dopo questa domanda non può essere utilizzata.) Fornisci i collegamenti a dove hai ottenuto il tuo codice da.

Esempi:

Input:
x = document.getElementById("ninja'd"); (il primo input)
y = document.getElementById("id");(il secondo input)

Produzione:

 = document.getElementById("

Input:
foo (il primo input)
foo+bar(il secondo input)

Uscita:
niente.

Input:
public static void main(String[] args) (il primo input)
public static void main(String[] args)(il secondo input)

Produzione:

 main(String[] args)

Input:
for(var i=0; i<x.length; i++){} (il primo input)
for(var i=0; i<oops.length; i++){break;}(il secondo input)

Produzione:

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

o

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

1
Mancano le regole per le quali è possibile copiare le stringhe e come (per il codice).
febbraio

4
Le stringhe copiate devono provenire da blocchi di codice o da qualsiasi parte di una risposta SE? Se proviene da un blocco di codice, è necessario utilizzare l'intero blocco o è possibile utilizzare una sottostringa? Le stringhe possono provenire dal testo formattato o dalla sorgente Markdown? È possibile utilizzare blocchi di codice più recenti di questa domanda? È possibile utilizzare vecchie revisioni di una domanda?
febbraio

3
Dici che le sottostringhe devono avere una lunghezza di 10 o più. Posso posizionare una sottostringa all'interno di un'altra sottostringa? (Le sottostringhe devono essere continue?)
Blu,

1
@sysreq Ho deciso di consentire espressioni regolari!
Stefnotch,

5
Risposta semplice: usa
Unary

Risposte:


9

Python 2, 224 byte

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]

Copiato da questa risposta :

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

get_matching_blocks()viene copiato da questa risposta

a=raw_input()
b=raw_input()

viene copiato da questa domanda

for start, _, size inviene copiato da questa risposta e la seconda occorrenza di similar(a, b)viene copiata dallo stesso posto della prima.

if(size > 9)viene copiato da questa domanda .

:
    print

viene copiato da questa domanda

a[start:viene copiato da questa risposta .

e infine, start+size]viene copiato da questo questipn

Finalmente risposto dopo un anno e mezzo ...


+1 Tuttavia, stackoverflow.com/questions/37386311/… è stato pubblicato dopo che questa sfida è stata pubblicata. Ho deciso di rimuovere questa limitazione, quindi la tua risposta va bene. :)
Stefnotch,

1
@Stenfoch Non è necessario; una risposta precedente contiene la stessa frase
pepery

2
Una cosa che ho imparato sulle sfide di codifica del nastro adesivo : è difficile tenere traccia di dove hai ottenuto tutto il tuo codice.
pepery

Wow, il punteggio di questo post è aumentato molto rapidamente ...
pppery
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.