확산 압축 [폐쇄]


20

이 문제를 해결하려면 diff를 압축해야합니다. diff는 두 문자열의 차이를 나타내는 일부 데이터입니다. 이 문제를 해결하려면 다음을 수행 할 수있는 하나 이상의 프로그램을 제공해야합니다.

  1. diff를 입력 A하고BC
  2. 입력 AC출력B
  3. 입력 BC출력A

목표는 diff C를 가능한 작게 만드는 것입니다 . diff는 문자열, 숫자, 한 방울의 데이터 일 수 있습니다. 우리는 크기 (바이트 수)에 관심이 있습니다.

Github에서 찾을 수 있는 50 가지 테스트 사례 가 있습니다 . 각 테스트 사례는 두 개의 공백으로 구분 된 URL로 구성되며,이 URL은 diff해야하는 2 개의 파일을 가리 킵니다. (이 테스트 사례는 PPCG 회원의 Github 프로필에서 시작되었습니다. 모두 감사합니다!)

위의 세 가지 작업은 모두 전원이 공급되는 컴퓨터 (각 테스트 사례에 대해)에서 실행하는 데 1 분 정도 걸립니다.

당신의 점수는 모든 50 diff의 총 크기 (바이트)와 같으며 낮을수록 좋습니다. 프로그램의 하드 코딩 차이는 허용되지 않습니다 (하드 코딩을 방지하기 위해 테스트 사례를 변경할 권리가 있습니다). 같은 diff를 생성하는 내장 diffutils은 허용되지 않습니다.


4
diff 란 정확히 무엇입니까?
코너 오브라이언

당신이 원하는 것은 정말로. 비공식적으로, 자사의 문자열 사이의 차이를 나타냅니다 AB
나단 메릴

1
더 많은 링크 썩음 : 1-베이스 라인 인덱스로 테스트 케이스 쌍 번호 매기기 두 쌍의 테스트 사례 3, 13, 14, 15, 16, 17, 18, 19, 20, 21은 모두 404입니다.이 외에는 다른 모든 사례를 검색 할 수있었습니다.
H Walters

3
이 질문은 대부분 답이 없으며 테스트 사례로 사용했던 많은 이전 링크가 더 이상 작동하지 않기 때문에이 질문을 닫고 있습니다. 질문을 업데이트하고 원하는 경우 다시여십시오.
Nathan Merrill

1
끝난. GIST는 gist.github.com/sethhillbrand/64066935e3f8c0fac75d75edd43c9ef8입니다 . 두 번째 파일은 나머지 40 개의 테스트 사례 쌍의 암호화 된 아카이브입니다.
세스

답변:


0

내 대답이 유효합니까?

set f [open commits.txt]
while {![eof $f]} {scan [gets $f] %s\ %s a b; puts [string compare $a $b]}
close $f

http://www.tutorialspoint.com/execute_tcl_online.php?PID=0Bw_CjBb95KQMNmd4QkxvQUFsTnM에서 테스트 가능


1
여러 프로그램을 제공해야합니다 ( diff동등 및 동등한 프로그램 patch). string compare문자열이 다른 경우 "기본 제공 안 함"규칙을 위반합니다. 이름에서 알 수 있듯이 문자열 만 비교하면 패치를 재 작성할 정보가 충분하지 않습니다.

@ ais523 : 내장 나는 그것을 명령 줄 명령으로 이해했습니다. 나는 알고 string compare페이지를 만들 수있는 정보를 생성하지 않지만을 묻는 질문에 곳이 없습니다.
sergiol

질문에서 "2. A와 C를 입력하고 B를 출력하십시오." 이것은 제출 된 프로그램이 할 수없는 일이며 실제로는 충분한 정보가 없기 때문에 프로그램이 할 수없는 일입니다.

@ ais523 : 알았어요.
sergiol

@ ais523 : 귀하의 진술이 "사실 프로그램이 할 수없는"것이라고 생각하지 않습니다. C가 A와 B 사이의 차이이면 C와 A가 주어지면 B는 계산 가능합니다. 어쩌면 당신의 정확한 요점을 놓쳤을 수도 있습니다
Seth
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.