Ducttape the Ducttape


11

あなたの上司は、かなりの数の従業員(あなたを含む)が他人からコードを盗もうとすることを発見しました。彼は、他の人からコードを盗む人を見つけるのに使用できるプログラムを彼に書くようあなたに命じました。

仕事:

他の誰かからコード(の一部)がコピーされたかどうかを検出するプログラム/関数を作成します。

プログラムは、既存のすべてのプログラムと、2つの個別の入力からテストするプログラムを取得します。 編集:これまでのところ答えがないので、正規表現を使用することができます!

出力

  • プログラムは、スペースまたは改行で区切られたすべての盗まれたコードを出力する必要があります。(最後にスペースまたは改行がある場合があります。)
  • 10個以上の連続したバイトで構成されているコードは、盗まれたりコピーされたと見なされます。(ごめんなさい、Javaファン!)
  • 可能な限り出力する必要がありますが、重複するものがある場合は、どちらかを無視するか、両方を出力することができます。

ねじれ:

前述したように、ダクトテープコーディングも大好きです。つまり、コード内のすべてがスタック交換サイトからコピーアンドペーストされます!必要なもの(コードブロック内のコードに限定されない)を好きなだけコピーできます。(ただし、少なくとも10バイト)(盗まれた/コピーされたと見なされるものについては上記と同じルールです。)(この質問の後に投稿された回答は使用できない場合があることに注意してください。)コードから。

例:

入力:(
x = document.getElementById("ninja'd");最初の入力)
y = document.getElementById("id");(2番目の入力)

出力:

 = document.getElementById("

入力:(
foo最初の入力)
foo+bar(2番目の入力)

出力:
なし。

入力:(
public static void main(String[] args)最初の入力)
public static void main(String[] args)(2番目の入力)

出力:

 main(String[] args)

入力:(
for(var i=0; i<x.length; i++){}最初の入力)
for(var i=0; i<oops.length; i++){break;}(2番目の入力)

出力:

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

または

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

1
文字列をコピーできるルールと方法(コードの場合)がありません。
feersum

4
コピーされた文字列は、コードブロックから取得する必要がありますか、それともSE回答の一部ですか?コードブロックに由来する場合、ブロック全体を使用する必要がありますか、またはサブストリングを使用できますか?文字列は、書式設定されたテキストまたはMarkdownソースから取得できますか?この質問より新しいコードブロックを使用できますか?質問の古いリビジョンを使用できますか?
feersum

3
サブストリングの長さは10以上でなければならないと言います。別のサブストリング内にサブストリングを配置できますか?(部分文字列は連続している必要がありますか?)

1
@sysreq正規表現を許可することにしました!
-Stefnotch

5
簡単な答え:単項を使用
リルトシアスト

回答:


9

Python 2、224バイト

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]

この回答からコピー:

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この回答からコピーされ、2番目の出現はsimilar(a, b)最初の出現と同じ場所からコピーされます。

if(size > 9)この質問からコピーされます。

:
    print

この質問からコピーされます

a[start:この答えからコピーされます

そして最後に、このquestipnstart+size]からコピーされます

1年半後についに答えました...


+1ただし、stackoverflow.com / questions / 37386311 /…は、このチャレンジが投稿された後に投稿されました。私はその制限を取り除くことにしたので、あなたの答えは結構です。:)
Stefnotch

1
@Stenfochする必要はありません。以前の回答には同じフレーズが含まれています
-pppery

2
ダクトテープコーディングの課題について私が学んだことの1つは、すべてのコードを取得した場所を追跡するのは難しいことです。
-pppery

うわー、この投稿のスコアは非常に急速に上昇しています
...-pppery
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.