差异压缩[关闭]


20

对于此挑战,您需要压缩差异。 diff是一些数据,表示两个字符串之间的差异。 面对这一挑战,您需要提供一个或多个程序,这些程序可以:

  1. 输入AB,并输出差异,C
  2. 输入AC,并输出B
  3. 输入BC,并输出A

目标是使diff C尽可能小。 差异可以是任何东西:字符串,数字,数据块。我们只关心大小(字节数)。

我有50个可以在Github上找到的测试用例。每个测试用例包含两个以空格分隔的URL,这些URL指向您需要比较的2个文件。(这些测试用例源自PPCG成员的Github个人资料。谢谢!)

上面的所有三个任务应该在一分钟内才能在具有适当功能的计算机上运行(针对每个测试用例)。

您的分数等于所有50个差异的总大小(以字节为单位),越低越好。不允许在程序中进行硬编码差异(我保留更改测试用例的权利,以防止硬编码)。diffutils不允许产生差异的内建函式(例如)。


4
diff到底是什么?
科纳·奥布莱恩

您想要的一切,真的。通俗地说,它是一个字符串,代表之间的差异AB
弥敦道美林

1
更多链接腐烂:用1基线索引为测试用例对编号;两对测试用例3、13、14、15、16、17、18、19、20、21都是404。在这些测试用例之外,我设法检索了所有其他用例。
H Walters

3
我正在关闭这个问题,因为它基本上没有答案,而且我用作测试用例的许多旧链接也不再起作用。随时更新问题并根据需要重新打开。
内森·美林

1
做完了 GIST是gist.github.com/sethhillbrand/64066935e3f8c0fac75d75edd43c9ef8 。第二个文件是剩余的40对测试用例的uuencoded存档。
赛斯

Answers:


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 comparediff字符串,则违反了“无内建”规则。如果仅比较字符串(如名称所示),则不会留下足够的信息来重新创建补丁。

@ ais523:内建函数我将其理解为命令行命令。我知道string compare不会生成信息来创建页面,但是在问题中没有位置要求它。
sergiol

根据问题“ 2.输入A和C,然后输出B”。这是您提交的程序无法执行的操作,实际上是任何程序都无法执行的(因为它没有足够的信息)。

@ ais523:好的,我误会了。
sergiol

@ ais523:我认为您的陈述“实际上没有程序可以做到”是不正确的。如果C是A和B之间的差异,则给定C和A,B是可计算的。也许我错过了您的确切观点
赛斯(Seth)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.