Ducttape the Ducttape

11

Atasan Anda mengetahui bahwa banyak karyawannya (termasuk Anda) suka mencuri kode dari orang lain. Dia memerintahkan Anda untuk menulis kepadanya sebuah program yang dapat ia gunakan untuk menemukan orang yang mencuri kode dari orang lain.

Tugas:

Tulis program / fungsi yang mendeteksi jika seseorang menyalin (bagian dari) kodenya dari tempat lain.

Program akan mendapatkan semua program yang ada dan program yang harus diuji dari dua input terpisah . Sunting: Karena tidak ada jawaban sejauh ini, Anda dapat menggunakan ekspresi reguler!

Keluaran

  • Program kemudian harus menampilkan semua potongan kode yang dicuri, dipisahkan oleh spasi atau baris baru. (Mungkin ada spasi atau baris baru di akhir.)
  • Sepotong kode dianggap dicuri / disalin jika terdiri dari 10 atau lebih byte berturut-turut . (Maaf, penggemar Java!)
  • Anda harus menghasilkan sebanyak mungkin, tetapi jika ada yang tumpang tindih, Anda dapat mengabaikan salah satu dari mereka atau mengeluarkan keduanya.

Memutar:

Seperti disebutkan sebelumnya, Anda juga suka pengkodean lakban. Itu berarti, semua yang ada dalam kode Anda akan disalin dari situs pertukaran tumpukan! Anda dapat menyalin apa pun yang Anda inginkan (tidak terbatas pada kode dalam blok kode) dan sebanyak yang Anda inginkan. (Tapi setidaknya 10 byte) (Aturan yang sama seperti di atas tentang apa yang dianggap dicuri / disalin). (Harap perhatikan bahwa jawaban apa pun yang diposting setelah pertanyaan ini tidak dapat digunakan.) Harap berikan tautan ke tempat Anda mendapatkan kode dari.

Contoh:

Input:
x = document.getElementById("ninja'd"); ( Input pertama)
y = document.getElementById("id");(Input kedua)

Keluaran:

 = document.getElementById("

Input:
foo ( Input pertama)
foo+bar(Input kedua)

Output:
Tidak Ada.

Input:
public static void main(String[] args) ( Input pertama)
public static void main(String[] args)(Input kedua)

Keluaran:

 main(String[] args)

Input:
for(var i=0; i<x.length; i++){} ( Input pertama)
for(var i=0; i<oops.length; i++){break;}(Input kedua)

Keluaran:

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

atau

for(var i=0; i< .length; i++){
Stefnotch
sumber
1
Tidak ada aturan untuk string mana yang dapat disalin dan bagaimana (untuk kode).
feersum
4
Apakah string yang disalin harus berasal dari blok kode, atau bagian mana pun dari jawaban SE? Jika berasal dari blok kode apakah perlu menggunakan seluruh blok, atau bisakah substring digunakan? Bisakah string berasal dari teks yang diformat atau sumber penurunan harga? Bisakah blok kode yang lebih baru dari pertanyaan ini digunakan? Bisakah revisi lama dari sebuah pertanyaan digunakan?
feersum
3
Anda mengatakan substring harus panjang 10 atau lebih. Dapatkah saya menempatkan substring di dalam substring lain? (Apakah substring harus kontinu?)
Biru
1
@sysreq Saya memutuskan untuk mengizinkan ekspresi reguler!
Stefnotch
5
Jawaban mudah: Gunakan Unary
lirtosiast

Jawaban:

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]

Disalin dari jawaban ini :

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

get_matching_blocks()disalin dari jawaban ini

a=raw_input()
b=raw_input()

disalin dari pertanyaan ini

for start, _, size indisalin dari jawaban ini dan kejadian kedua similar(a, b)disalin dari tempat yang sama dengan yang pertama.

if(size > 9)disalin dari pertanyaan ini .

:
    print

disalin dari pertanyaan ini

a[start:disalin dari jawaban ini .

dan akhirnya, start+size]disalin dari questipn ini

Akhirnya dijawab setelah satu setengah tahun ...

pppery
sumber
+1 Meskipun, stackoverflow.com/questions/37386311/… diposting setelah tantangan ini diposting. Saya memutuskan untuk menghapus batasan itu, jadi jawaban Anda baik-baik saja. :)
Stefnotch
1
@Stenfoch Anda tidak perlu; jawaban sebelumnya berisi frasa yang sama
pppery
2
Satu hal yang saya pelajari tentang tantangan duct-tape-coding : Sulit untuk melacak di mana Anda mendapatkan semua kode Anda.
pppery
Wow, skor postingan ini naik sangat cepat ...
pppery