Compressione diff [chiuso]


20

Per questa sfida, è necessario comprimere un diff. Un diff è alcuni dati che rappresentano la differenza tra due stringhe. Per questa sfida, è necessario fornire uno o più programmi in grado di:

  1. Input Ae B, e output a diff,C
  2. Input Ae C, e l'uscitaB
  3. Input Be C, e l'uscitaA

L'obiettivo è rendere il diff C, il più piccolo possibile. Il diff può essere qualsiasi cosa: una stringa, un numero, una massa di dati. Ci preoccupiamo solo della dimensione (numero di byte).

Ho 50 casi di test che si possono trovare su Github . Ogni caso di test è costituito da due URL separati da spazio che indicano i 2 file che devi diff. (Questi casi di test hanno avuto origine dai profili Github dei membri PPCG. Grazie a tutti!)

Tutte e tre le attività sopra descritte dovrebbero richiedere meno di un minuto per essere eseguite su un computer con alimentazione ragionevole (per ogni caso di test).

Il tuo punteggio è uguale alla dimensione totale (in byte) di tutti i 50 diff, più basso è meglio. Le differenze di hardcoding nel tuo programma non sono consentite (mi riservo il diritto di modificare i casi di test per evitare hardcoding). I builtin che producono un diff (come diffutils) non sono ammessi.


4
Cos'è esattamente un diff?
Conor O'Brien,

Qualunque cosa tu voglia che sia, davvero. Informalmente, è una stringa che rappresenta le differenze tra AeB
Nathan Merrill il

1
Più marciume di collegamento: numerazione di coppie di casi di test in base all'indice di una riga di base; entrambe le coppie di casi di test 3, 13, 14, 15, 16, 17, 18, 19, 20, 21 sono tutte 404. Al di fuori di questi, sono riuscito a recuperare ogni altro caso.
H Walters,

3
Sto chiudendo questa domanda perché è in gran parte senza risposta e molti dei vecchi collegamenti che stavo usando come casi di test non funzionano più. Sentiti libero di aggiornare la domanda e riaprire se lo desideri.
Nathan Merrill,

1
Fatto. GIST è gist.github.com/sethhillbrand/64066935e3f8c0fac75d75edd43c9ef8 Il secondo file è un archivio codificato delle 40 coppie rimanenti di casi di test.
Seth,

Risposte:


0

La mia risposta è valida?

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

testabile su: http://www.tutorialspoint.com/execute_tcl_online.php?PID=0Bw_CjBb95KQMNmd4QkxvQUFsTnM


1
Devi fornire più programmi (sia un diffequivalente che unpatch equivalente). Se string comparedifferisce le stringhe, viola la regola "no builtins". Se confronta solo le stringhe (come suggerisce il nome), non lascia abbastanza informazioni per ricreare una patch.

@ ais523: builtin l'ho capito come comandi da riga di comando. lo sostring compare non genera informazioni per creare una pagina, ma non c'è posto nella domanda che lo richieda.
sergiol

Dalla domanda "2. Ingresso A e C e uscita B". Questo è qualcosa che il tuo programma inviato non può fare e che in realtà nessun programma potrebbe fare (poiché non ha abbastanza informazioni).

@ ais523: OK ho frainteso.
sergiol

@ ais523: Non credo che la tua affermazione sia corretta "in realtà nessun programma potrebbe fare". Se C è la differenza tra A e B, allora dato C e A, B è calcolabile. Forse ho perso il tuo punto esatto
Seth il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.