Diff Kompression [geschlossen]


20

Für diese Herausforderung müssen Sie ein Diff komprimieren. Ein Diff sind einige Daten, die den Unterschied zwischen zwei Zeichenfolgen darstellen. Für diese Herausforderung müssen Sie ein oder mehrere Programme bereitstellen, die Folgendes können:

  1. Eingabe Aund B, und Ausgabe eines Diffs,C
  2. Eingabe Aund C, und AusgabeB
  3. Eingabe Bund C, und AusgabeA

Das Ziel ist es, den Unterschied Cso klein wie möglich zu machen. Der Unterschied kann alles sein: eine Zeichenfolge, eine Zahl, ein Datenblock. Wir kümmern uns nur um die Größe (Anzahl der Bytes).

Ich habe 50 Testfälle , die auf Github zu finden sind . Jeder Testfall besteht aus zwei durch Leerzeichen getrennten URLs, die auf die beiden Dateien verweisen, die Sie unterscheiden müssen. (Diese Testfälle stammen aus den Github-Profilen der PPCG-Mitglieder. Vielen Dank!)

Alle drei oben genannten Aufgaben sollten weniger als eine Minute dauern, um auf einem Computer mit angemessener Leistung (für jeden Testfall) ausgeführt zu werden.

Ihre Punktzahl entspricht der Gesamtgröße (in Bytes) aller 50 Unterschiede, niedriger ist besser. Das Hardcoding von Unterschieden in Ihrem Programm ist nicht erlaubt (ich behalte mir das Recht vor, die Testfälle zu ändern, um Hardcoding zu verhindern). Builtins, die ein diff (like diffutils) erzeugen, sind nicht erlaubt.


4
Was genau ist ein Diff?
Conor O'Brien

Alles, was Sie wollen, ist es wirklich. Informell, es ist eine Zeichenfolge, die die Unterschiede zwischen Aund darstelltB
Nathan Merrill

1
More Link Rot: Nummerierung der Testfallpaare nach 1-Basislinien-Index; Beide Paare der Testfälle 3, 13, 14, 15, 16, 17, 18, 19, 20, 21 sind alle 404. Außerhalb dieser Fälle konnte ich jeden anderen Fall abrufen.
H Walters

3
Ich schließe diese Frage, weil sie weitgehend unbeantwortet ist und viele der alten Links, die ich als Testfälle verwendet habe, nicht mehr funktionieren. Fühlen Sie sich frei, die Frage zu aktualisieren und erneut zu öffnen, wenn Sie dies wünschen.
Nathan Merrill

1
Getan. Die GIST lautet gist.github.com/sethhillbrand/64066935e3f8c0fac75d75edd43c9ef8. Die zweite Datei ist ein nicht verschlüsseltes Archiv der 40 verbleibenden Testfallpaare.
Seth

Antworten:


0

Ist meine Antwort gültig?

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

Testbar unter: http://www.tutorialspoint.com/execute_tcl_online.php?PID=0Bw_CjBb95KQMNmd4QkxvQUFsTnM


1
Sie müssen mehrere Programme bereitstellen (sowohl ein diffÄquivalent als auch ein patchÄquivalent). Wenn string compareunterschiedliche Zeichenfolgen verwendet werden, verstößt dies gegen die "no builtins" -Regel. Wenn nur Zeichenfolgen verglichen werden (wie der Name schon sagt), bleiben nicht genügend Informationen, um einen Patch neu zu erstellen.

@ ais523: builtins ich habe es als befehlszeile verstanden. Ich weiß, dass string comparekeine Informationen zum Erstellen einer Seite generiert werden, aber in der Frage, die danach fragt, ist kein Platz.
Sergiol

Aus der Frage "2. Eingabe A und C und Ausgabe B". Dies ist etwas, das Ihr eingereichtes Programm nicht kann und das in der Tat kein Programm kann (da es nicht genügend Informationen enthält).

@ ais523: OK ich habe es falsch verstanden.
Sergiol

@ ais523: Ich glaube nicht, dass deine Aussage korrekt ist "in der Tat könnte kein Programm". Wenn C der Unterschied zwischen A und B ist, dann ist bei gegebenem C und A B berechenbar. Vielleicht habe ich deinen genauen Punkt verpasst
Seth
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.