Comp compression diff [fermé]

20

Pour ce défi, vous devez compresser un diff. Un diff est une donnée qui représente la différence entre deux chaînes. Pour ce défi, vous devez fournir un ou plusieurs programmes qui peuvent:

  1. Entrer Aet B, et sortir un diff,C
  2. Entrée Aet C, et la sortieB
  3. Entrée Bet C, et la sortieA

Le but est de rendre le diff C, aussi petit que possible. La différence peut être n'importe quoi: une chaîne, un nombre, un blob de données. Nous nous soucions juste de la taille (nombre d'octets).

J'ai 50 cas de test qui peuvent être trouvés sur Github . Chaque scénario de test se compose de deux URL séparées par des espaces qui pointent vers les 2 fichiers que vous devez différencier. (Ces cas de test provenaient des profils Github des membres de PPCG. Merci à tous!)

Les trois tâches ci-dessus devraient prendre moins d'une minute pour s'exécuter sur un ordinateur raisonnablement alimenté (pour chaque cas de test).

Votre score est égal à la taille totale (en octets) des 50 différences, plus c'est bas, mieux c'est. Les différences de codage en dur dans votre programme ne sont pas autorisées (je me réserve le droit de modifier les cas de test pour empêcher le codage en dur). Les builtins qui produisent un diff (comme diffutils) ne sont pas autorisés.

Nathan Merrill
la source
4
Qu'est-ce qu'un diff?
Conor O'Brien
Tout ce que vous voulez, vraiment. De façon informelle, c'est une chaîne qui représente les différences entre AetB
Nathan Merrill
1
Plus de pourriture de lien: numérotation des paires de cas de test par index de ligne à 1 base; les deux paires de cas de test 3, 13, 14, 15, 16, 17, 18, 19, 20, 21 sont tous 404. En dehors de ceux-ci, j'ai réussi à récupérer tous les autres cas.
H Walters
3
Je ferme cette question car elle est en grande partie sans réponse et bon nombre des anciens liens que j'utilisais comme cas de test ne fonctionnent plus. N'hésitez pas à mettre à jour la question et à rouvrir si vous le souhaitez.
Nathan Merrill
1
Terminé. Le GIST est gist.github.com/sethhillbrand/64066935e3f8c0fac75d75edd43c9ef8 Le deuxième fichier est une archive codée en uuenc des 40 paires de cas de test restants.
Seth

Réponses:

0

Ma réponse est-elle valable?

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

testable sur: http://www.tutorialspoint.com/execute_tcl_online.php?PID=0Bw_CjBb95KQMNmd4QkxvQUFsTnM

sergiol
la source
1
Vous devez fournir plusieurs programmes (à la fois un difféquivalent et un patchéquivalent). Si string comparediffs chaînes, il viole la règle "pas de builtins". S'il compare uniquement des chaînes (comme son nom l'indique), il ne laisse pas suffisamment d'informations pour recréer un patch.
@ ais523: intégré, je l'ai compris comme des commandes en ligne de commande. Je sais que string comparecela ne génère pas d'informations pour créer une page, mais il n'y a pas de place dans la question pour le demander.
sergiol
De la question, "2. Entrée A et C, et sortie B". C'est quelque chose que votre programme soumis ne peut pas faire, et qu'en fait aucun programme ne pourrait faire (car il n'a pas assez d'informations).
@ ais523: OK, j'ai mal compris.
sergiol
@ ais523: Je ne pense pas que votre affirmation soit correcte "en fait, aucun programme ne pourrait le faire". Si C est le diff entre A et B, alors étant donné C et A, B est calculable. Peut-être que j'ai raté votre point exact
Seth