Le défi
Un simple défi "espion contre espion".
Écrivez un programme avec les spécifications suivantes:
- Le programme peut être écrit dans n'importe quelle langue mais ne doit pas dépasser 512 caractères (comme représenté dans un bloc de code sur ce site).
- Le programme doit accepter 5 entiers 32 bits signés comme entrées. Il peut prendre la forme d'une fonction qui accepte 5 arguments, une fonction qui accepte un seul tableau à 5 éléments ou un programme complet qui lit 5 entiers à partir de n'importe quelle entrée standard.
- Le programme doit générer un entier 32 bits signé.
- Le programme doit retourner 1 si et seulement si les cinq entrées, interprétées comme une séquence, correspondent à une séquence arithmétique spécifique du choix du programmeur, appelée "clé". La fonction doit retourner 0 pour toutes les autres entrées.
Une séquence arithmétique a la propriété que chaque élément successif de la séquence est égal à son prédécesseur plus une constante fixe a
.
Par exemple, 25 30 35 40 45
est une séquence arithmétique puisque chaque élément de la séquence est égal à son prédécesseur plus 5. De même, 17 10 3 -4 -11
est une séquence arithmétique puisque chaque élément est égal à son prédécesseur plus -7.
Les séquences 1 2 4 8 16
et 3 9 15 6 12
ne sont pas des séquences arithmétiques.
Une clé peut être n'importe quelle séquence arithmétique de votre choix, avec la seule restriction que les séquences impliquant un débordement d'entier ne sont pas autorisées. C'est-à-dire que la séquence doit être strictement croissante, strictement décroissante ou avoir tous les éléments égaux.
Par exemple, supposons que vous choisissiez la clé 98021 93880 89739 85598 81457
. Votre programme doit renvoyer 1 si les entrées (dans l'ordre) correspondent à ces cinq nombres et 0 sinon.
Veuillez noter que les moyens de protéger la clé doivent être de votre propre conception. De plus, les solutions probabilistes qui peuvent renvoyer des faux positifs avec une probabilité non nulle ne sont pas autorisées. En particulier, veuillez ne pas utiliser de hachages cryptographiques standard, y compris les fonctions de bibliothèque pour les hachages cryptographiques standard.
La notation
La ou les soumissions non fissurées les plus courtes par nombre de caractères seront déclarées gagnantes.
En cas de confusion, n'hésitez pas à demander ou à commenter.
Le contre-défi
Tous les lecteurs, y compris ceux qui ont soumis leurs propres programmes, sont encouragés à "cracker" les soumissions. Une soumission est craquée lorsque sa clé est publiée dans la section des commentaires associés. Si une soumission persiste pendant 72 heures sans être modifiée ou fêlée, elle est considérée comme «sûre» et tout succès ultérieur dans la fêlure sera ignoré pour les besoins du concours.
Voir "Clause de non-responsabilité" ci-dessous pour plus de détails sur la politique de score de craquage mise à jour.
Les soumissions fissurées sont éliminées de la contention (à condition qu'elles ne soient pas «sécuritaires»). Ils ne doivent pas être modifiés. Si un lecteur souhaite soumettre un nouveau programme, il doit le faire dans une réponse séparée.
Le ou les crackers ayant obtenu le ou les scores les plus élevés seront déclarés gagnants avec les développeurs des programmes gagnants.
Veuillez ne pas casser votre propre soumission.
Bonne chance. :)
Classement
Avant-dernier classement (en attendant la sécurité de la communication de Dennis CJam 49).
Casiers sécurisés
- CJam 49, Dennis
- CJam 62, Dennis en sécurité
- CJam 91, Dennis en sécurité
- Python 156, coffre-fort Maarten Baert
- Perl 256, chilemagic safe
- Java 468, géobits sûrs
Craquelins imparables
- Peter Taylor [Ruby 130, Java 342, Mathematica 146 *, Mathematica 72 *, CJam 37]
- Dennis [Pyth 13, Python 86 *, Lua 105 *, GolfScript 116, C 239 *]
- Martin Büttner [Javascript 125, Python 128 *, Ruby 175 *, Ruby 249 *]
- Tyilo [C 459, Javascript 958 *]
- freddieknets [Mathematica 67 *]
- Ilmari Karonen [Python27 182 *]
- nitreux [C 212 *]
* soumission non conforme
Avis de non-responsabilité (mis à jour à 23 h 15 HNE le 26 août)
Avec les problèmes de notation atteignant enfin la masse critique (étant donné que les deux tiers des soumissions fissurées sont jusqu'à présent non conformes), j'ai classé les meilleurs crackers en termes de nombre de soumissions fissurées (primaire) et de nombre total de caractères dans les soumissions fissurées conformes (secondaire).
Comme précédemment, les soumissions exactes fissurées, la longueur des soumissions et leur statut conforme / non conforme sont toutes marquées afin que les lecteurs puissent déduire leur propre classement s'ils pensent que le nouveau classement officiel est injuste.
Mes excuses pour avoir modifié les règles si tard dans la partie.