Ducttape Ducttape


11

Patronunuz, bir grup çalışanının (siz de dahil) başkalarından kod çalmaktan hoşlandığını keşfetti. Ona başkalarından kod çalan insanları bulmak için kullanabileceği bir program yazmanı emretti.

Görev:

Birisinin kodunu başka bir yerden kopyalayıp kopyalamadığını (bir kısmını) algılayan bir program / işlev yazın.

Program mevcut tüm programları ve test etmesi gereken programı iki ayrı girişten alacaktır . Düzenleme: Şimdiye kadar cevap olmadığından, düzenli ifadeler kullanabilirsiniz!

Çıktı

  • Program daha sonra çalınan tüm kod parçalarını bir boşlukla veya bir satırsonu ile ayırarak çıkarmalıdır . (Sonunda bir boşluk veya bir satırsonu olabilir.)
  • Bir kod parçasının, art arda 10 veya daha fazla bayttan oluşması durumunda çalındığı / kopyalandığı kabul edilir . (Üzgünüm, Java hayranları!)
  • Mümkün olduğunca çıktı almanız gerekir, ancak üst üste binenler varsa, bunlardan birini göz ardı edebilir veya her ikisini de çıktı alabilirsiniz.

çevirin:

Daha önce de belirtildiği gibi, koli bandı kodlamasını da seviyorsunuz. Bu, kodunuzdaki her şeyin bir yığın değişim sitesinden kopyalanacağı anlamına gelir ! İstediğinizi (kod bloklarındaki kodla sınırlı değildir) ve istediğiniz kadar kopyalayabilirsiniz. (Ancak en az 10 bayt) (Çalındığı / kopyalandığı düşünülen şeyle ilgili yukarıdaki kuralın aynısı.) (Lütfen bu sorudan sonra gönderilen yanıtların kullanılamayabileceğini unutmayın.) Lütfen kodu.

Örnekler:

Giriş:
x = document.getElementById("ninja'd"); (İlk giriş)
y = document.getElementById("id");(İkinci giriş)

Çıktı:

 = document.getElementById("

Giriş:
foo (İlk giriş)
foo+bar(İkinci giriş)

Çıktı:
Hiçbir şey.

Giriş:
public static void main(String[] args) (İlk giriş)
public static void main(String[] args)(İkinci giriş)

Çıktı:

 main(String[] args)

Giriş:
for(var i=0; i<x.length; i++){} (İlk giriş)
for(var i=0; i<oops.length; i++){break;}(İkinci giriş)

Çıktı:

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

veya

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

1
Dizelerin kopyalanabileceği ve nasıl (kod için) kopyalanacağı kuralları eksik.
feersum

4
Kopyalanan dizelerin kod bloklarından mı yoksa bir SE yanıtının herhangi bir parçasından mı gelmesi gerekiyor? Bir kod bloğundan geliyorsa, tüm bloğu kullanması gerekir mi yoksa bir alt dize kullanılabilir mi? Dizeler biçimlendirilmiş metinden veya Markdown kaynağından gelebilir mi? Bu sorudan daha yeni kod blokları kullanılabilir mi? Bir sorunun eski revizyonları kullanılabilir mi?
feersum

3
Alt dizelerin 10 veya daha uzun olması gerektiğini söylüyorsunuz. Bir alt dizeyi başka bir alt dizenin içine yerleştirebilir miyim? (Alt dizelerin sürekli olması gerekiyor mu?)
Mavi

1
@sysreq Düzenli ifadelere izin vermeye karar verdim!
Stefnotch

5
Kolay cevap:
Unary

Yanıtlar:


9

Python 2, 224 bayt

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]

Bu yanıttan kopyalandı :

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

get_matching_blocks()bu cevaptan kopyalandı

a=raw_input()
b=raw_input()

bu sorudan kopyalandı

for start, _, size inbu yanıttan kopyalanır ve ikinci oluşumu birinciyle similar(a, b)aynı yerden kopyalanır.

if(size > 9)bu sorudan kopyalandı .

:
    print

bu sorudan kopyalandı

a[start:bu yanıttan kopyalandı .

ve son olarak, bu arayıştanstart+size] kopyalandı

Sonunda bir buçuk yıl sonra cevap verdi ...


+1 Yine de, stackoverflow.com/questions/37386311/… bu sorun gönderildikten sonra yayınlandı. Bu kısıtlamayı kaldırmaya karar verdim, bu yüzden cevabınız iyi. :)
Stefnotch

1
@Stenfoch Gerek yok; daha önceki bir cevap aynı cümleyi içerir
pppery

2
Duct-tape-kodlama zorlukları hakkında öğrendiğim bir şey : Tüm kodunuzu nereden aldığınızı takip etmek zor.
pppery

Vay be, bu
yazının
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.