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.