Dans un accident très inhabituel impliquant un petit échantillon de radium, une baleine électrocutée et trois oursons gommeux, une partie du code source de The Management ™ a été mutée. Le patron de The Management ™ ne sait pas grand chose, ce sont en fait les Cops © qui étaient responsables, dans une tentative de déjouer les plans "diaboliques" de The Management ™. Les Robbers® ont donc été embauchés pour tenter de récupérer le code d'origine, car qui n'aime pas être méchant parfois?
note: Ce défi a été fortement inspiré par Déchiffrer le code source .
La description
C'est un défi de flics et de voleurs .
- Les flics écriront un programme (le code muté) qui exécute la tâche # 1 (et écrit également un programme qui exécute la tâche # 2, mais qui est gardé secret).
- Les voleurs tenteront d'inverser la "mutation" et de changer ce code d'origine en code qui exécute la tâche n ° 2.
Dans ce défi, la tâche n ° 1 consistera à sortir le n
e nombre premier , et la tâche n ° 2 à sortir le n
th nombre de Fibonacci (ce qui est en quelque sorte mauvais, selon les Cops © de toute façon). La séquence de Fibonacci est définie comme ( n=1
→ 1
; n=2
→ 1
; n=3
→ 2
; ...), et les nombres premiers sont définis comme ( n=1
→ 2
; n=2
→ 3
; n=3
→ 5
; ...).
Le but des flics est de minimiser la différence entre les programmes qui terminent la tâche # 1 et la tâche # 2, tout en empêchant les voleurs de recréer le code qui termine la tâche # 2.
Règles de la police
Les flics écriront deux programmes (l'un qui termine la tâche n ° 1 et l'autre qui termine la tâche n ° 2) et rendront publiques les informations suivantes:
- Le premier programme (qui sort le
n
e nombre premier) - La distance d'édition de Levenshtein entre le premier programme et le deuxième programme
- Le langage de programmation dans lequel les deux programmes sont écrits (doit être le même langage pour les deux programmes)
Les restrictions suivantes s'appliquent aux deux programmes:
- Ils doivent comporter 128 caractères au maximum.
- Ils doivent uniquement utiliser ASCII imprimable (plus les retours à la ligne, qui sont également autorisés).
- Ils doivent prendre moins de 10 secondes pour fonctionner
n=45
, et ils ne sont pas tenus de produire la sortie correcte pour toutn>45
. - Ils ne doivent utiliser aucune fonction de hachage ou de cryptographie.
Règles de voleur
Le voleur tentera de changer le programme du flic (qui termine la tâche n ° 1) en un programme qui termine la tâche n ° 2 (pas nécessairement le programme d'origine écrit par le flic) dans la distance d'édition spécifiée par le flic.
Une soumission déjà craquée ne peut plus être craquée (seul le premier voleur qui déchire une soumission obtient un crédit).
Après avoir craqué une soumission, procédez comme suit:
- Publiez une réponse à la question d'accompagnement de ce défi (lien) , en fournissant la langue, votre solution et un lien vers la réponse d'origine.
- Laissez un commentaire avec le texte "Cracked" qui renvoie à votre réponse publiée.
- Modifiez la réponse du policier si vous disposez de privilèges de modification (sinon, attendez que quelqu'un d'autre disposant des privilèges requis le fasse pour vous ou suggérez une modification).
Notation
Si le programme d'un flic reste non fissuré pendant 1 semaine, le flic peut publier le code d'origine qui termine la tâche n ° 2 (dans la distance de modification spécifiée), et la soumission est désormais considérée comme "sûre". La soumission sûre qui a la plus petite distance d'édition gagnera. En cas d'égalité, le programme le plus court (l'original qui termine la tâche n ° 1) l'emporte. Si deux soumissions sont toujours à égalité, celle publiée plus tôt l'emporte.
Si un voleur réussit à déchiffrer la soumission d'un flic, le score du voleur augmente de la distance d'édition de cette soumission. Par exemple, un voleur qui déchiffre une soumission avec une distance d'édition de 3 et un avec une distance de 5 gagne 8 points. Le voleur avec le score le plus élevé gagne. En cas d'égalité, le voleur qui a obtenu le premier score l'emporte.
Classement
Un petit outil pour calculer la distance Levenshtein
la source
Réponses:
Python 2, distance = 8 [ fissuré ]
A finalement obtenu celui-ci sous la limite de char. Ça ne devrait pas être trop dur, mais j'ai trouvé l'idée intéressante.
Solution envisagée:
L'idée était d'utiliser cela
F(n+2) = 1 + (sum over F(k) from k = 1 to n)
, et le fait que les nombres de Fibonacci consécutifs soient coprimes. L'1
argument de réduction était censé fournir le+1
.On dirait que feersum a trouvé une ligne d'attaque différente!
la source
J, distance = 5 [ fissuré ]
Usage:
la source
Rubis, distance 6 [sûr]
Trouver des paires de formules avec de courtes distances d'édition est amusant, mais il semble que cette approche pourrait être plus efficace / ennuyeuse. Vous pouvez comprendre exactement ce que j'ai fait, mais cela ne signifie pas que vous pouvez l'inverser.
Solution:
Explication:
la source
e
là-bas en faisant de la force brute. Solution vraiment sournoise. :)Python 2 - LD = 13 fissuré
Un bon, facile (si tout va bien pas trop facile) pour commencer les choses :)
On dirait que c'était trop facile;) Je me sens plutôt idiot d'avoir oublié que vous pouviez utiliser les commentaires: /
la source
Haskell, distance = 13
Cela pourrait être plus lisible, mais
import
mangeait trop d'octets, donc j'ai dû jouer un peu au golf.la source
Rubis, distance 14 ( fissuré )
la source
CJam, distance 10 (fissuré)
Mettez simplement
n
STDIN. Testez-le ici.Pour référence, la solution originale utilisait le rare
j
.Original:
la source
J, distance = 4 [sûr]
Solution:
Méthode:
la source
Python 3, distance = 14 [ fissuré ]
J'avais quelques caractères de rechange donc j'ai mis des espaces pour plus de clarté :)
la source
JAGL Alpha 1.2 - Distance = 16 [ fissuré ]
Ça ne devrait pas être trop dur, nous verrons ce qui se passe ...
la source
TI-BASIC , distance 38
>
représente laSTO→
clé et$
représente le symbole de la racine carrée.la source
Python 2 - distance = 12 [ fissuré ]
Je suis plutôt satisfait de la tournure que cela a pris.
Voyons voir combien de temps cela prend ... Je suppose que ce sera toujours fissuré.
Edit: code raccourci un peu, aucun effet sur le fonctionnement / la distance.
Solution envisagée
J'ai essayé de ne demander aucun commentaire ni changement de nouvelle ligne.
la source
Python 3 - Distance = 14 [ fissuré ]
Nous verrons combien de temps cela dure ...
la source