Ducttape Ducttape


11

상사는 당신을 포함한 많은 직원들이 다른 사람들로부터 코드를 훔치는 것을 좋아한다는 것을 알게되었습니다. 그는 다른 사람으로부터 코드를 훔치는 사람들을 찾는 데 사용할 수있는 프로그램을 작성하도록 명령했습니다.

직무:

누군가 자신의 코드를 다른 곳에서 복사했는지 감지하는 프로그램 / 함수를 작성하십시오.

이 프로그램은 기존의 모든 프로그램과 두 개의 개별 입력에서 테스트해야하는 프로그램을 가져옵니다 . 편집 : 지금까지 답변이 없으므로 정규 표현식을 사용할 수 있습니다!

산출

  • 그런 다음 프로그램은 도난당한 모든 코드를 공백이나 줄 바꿈으로 구분하여 출력해야합니다 . 끝에 공백이나 줄 바꿈이있을 수 있습니다.
  • 10 개 이상의 연속 바이트 로 구성된 코드는 도난 당하거나 복사 된 것으로 간주됩니다 . (죄송합니다, Java 팬들!)
  • 가능한 한 많이 출력해야하지만 겹치는 것이 있으면 둘 중 하나를 무시하거나 둘 다 출력 할 수 있습니다.

트위스트:

앞에서 언급했듯이 덕트 테이프 코딩도 좋아합니다. 즉, 코드의 모든 내용 을 스택 교환 사이트에서 복사하여 붙여 넣습니다. 원하는대로 (코드 블록의 코드에 국한되지 않음) 원하는만큼 복사 할 수 있습니다. (단, 10 바이트 이상) (도난 / 복사 대상으로 간주되는 것과 동일한 규칙) (이 질문 이후에 게시 된 답변은 사용되지 않을 수 있습니다.) 코드

예 :

입력 :
x = document.getElementById("ninja'd"); (첫번째 입력)
y = document.getElementById("id");(두번째 입력)

산출:

 = document.getElementById("

입력 :
foo (첫번째 입력)
foo+bar(두번째 입력)

출력 :
없음

입력 :
public static void main(String[] args) (첫번째 입력)
public static void main(String[] args)(두번째 입력)

산출:

 main(String[] args)

입력 :
for(var i=0; i<x.length; i++){} (첫번째 입력)
for(var i=0; i<oops.length; i++){break;}(두번째 입력)

산출:

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

또는

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

1
문자열을 복사 할 수있는 규칙과 방법 (코드)이 없습니다.
feersum

4
복사 된 문자열은 코드 블록 또는 SE 응답의 일부에서 가져와야합니까? 코드 블록에서 온 경우 전체 블록을 사용해야합니까, 아니면 하위 문자열을 사용할 수 있습니까? 문자열을 서식이 지정된 텍스트 나 마크 다운 소스에서 가져올 수 있습니까? 이 질문보다 새로운 코드 블록을 사용할 수 있습니까? 질문의 이전 개정을 사용할 수 있습니까?
feersum

3
부분 문자열의 길이는 10 이상이어야합니다. 하위 문자열을 다른 하위 문자열 안에 넣을 수 있습니까? (하위 문자열이 연속적이어야합니까?)
Blue

1
@sysreq 나는 정규 표현식을 허용하기로 결정했습니다!
Stefnotch

5
쉬운 답변 : 단항 사용
lirtosiast

답변:


9

파이썬 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이 답변 에서 복사되고 두 번째 발생은 similar(a, b)첫 번째와 동일한 위치에서 복사됩니다.

if(size > 9)이 질문 에서 복사되었습니다 .

:
    print

이 질문 에서 복사

a[start:이 답변 에서 복사되었습니다 .

마지막 으로이 질문start+size] 에서 복사되었습니다.

1 년 반 후에 마침내 대답했습니다 ...


비록 +1 이 도전이 게시 된 후에 stackoverflow.com/questions/37386311/… 이 게시되었습니다. 나는 그 제한을 없애기로 결정했다. :)
Stefnotch

1
@Stenfoch 필요는 없습니다. 이전 답변 에는 같은 문구가 포함되어 있습니다
pppery

2
덕트 테이프 코딩 문제 에 대해 내가 배운 한 가지 사항 : 모든 코드를 어디서 얻었는지 추적하는 것은 까다 롭습니다.
pppery

와우,이 게시물의 점수는 매우 빠르게 상승하고 있습니다 ...
pppery
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.