Compresión diferencial [cerrada]

20

Para este desafío, necesita comprimir un diff. Una diferencia son algunos datos que representan la diferencia entre dos cadenas. Para este desafío, debe proporcionar uno o más programas que puedan:

  1. Entrada Ay Bsalida de un diff,C
  2. De entrada Ay C, y la salidaB
  3. De entrada By C, y la salidaA

El objetivo es hacer que la diferencia sea lo Cmás pequeña posible. La diferencia puede ser cualquier cosa: una cadena, un número, una gota de datos. Solo nos importa el tamaño (número de bytes).

Tengo 50 casos de prueba que se pueden encontrar en Github . Cada caso de prueba consta de dos URL separadas por espacios que apuntan a los 2 archivos que necesita diferenciar. (Estos casos de prueba se originaron en los perfiles de Github de los miembros de PPCG. ¡Gracias a todos!)

Las tres tareas anteriores deberían tardar menos de un minuto en ejecutarse en una computadora con una potencia razonable (para cada caso de prueba).

Su puntaje es igual al tamaño total (en bytes) de las 50 diferencias, menor es mejor. No se permiten diferencias de codificación en su programa (me reservo el derecho de cambiar los casos de prueba para evitar la codificación). Las acumulaciones que producen un diff (como diffutils) no están permitidas.

Nathan Merrill
fuente
44
¿Qué es exactamente un diff?
Conor O'Brien
Cualquier cosa que quieras que sea, de verdad. Informalmente, es una cadena que representa las diferencias entre AyB
Nathan Merrill
1
Más podredumbre del enlace: numeración de pares de casos de prueba por índice de línea base 1; ambos pares de casos de prueba 3, 13, 14, 15, 16, 17, 18, 19, 20, 21 son todos 404. Fuera de estos, logré recuperar cualquier otro caso.
H Walters
3
Estoy cerrando esta pregunta porque no tiene respuesta y muchos de los enlaces antiguos que estaba usando como casos de prueba ya no funcionan. Siéntase libre de actualizar la pregunta y volver a abrirla si lo desea.
Nathan Merrill
1
Hecho. El GIST es gist.github.com/sethhillbrand/64066935e3f8c0fac75d75edd43c9ef8 El segundo archivo es un archivo sin codificar de los 40 pares restantes de casos de prueba.
Seth

Respuestas:

0

¿Es válida mi respuesta?

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

comprobable en: http://www.tutorialspoint.com/execute_tcl_online.php?PID=0Bw_CjBb95KQMNmd4QkxvQUFsTnM

sergiol
fuente
1
Debe proporcionar varios programas (tanto diffequivalentes como patchequivalentes). Si se string comparediferencian las cadenas, viola la regla de "no construir". Si solo compara cadenas (como sugiere su nombre), no deja suficiente información para recrear un parche.
@ ais523: incorporados Lo entendí como comandos de línea de comandos. Sé que string compareno genera información para crear una página, pero no hay lugar en la pregunta que lo solicite.
sergiol
De la pregunta, "2. Entrada A y C, y salida B". Esto es algo que su programa enviado no puede hacer, y que de hecho ningún programa podría hacer (ya que no tiene suficiente información).
@ ais523: OK, entendí mal.
sergiol
@ ais523: No creo que su declaración sea correcta "de hecho, ningún programa podría hacerlo". Si C es la diferencia entre A y B, entonces dado C y A, B es calculable. Tal vez no vi a su punto exacto
Seth