확산 압축 [폐쇄]


20

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

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

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

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

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

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


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

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

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.