Le défi
Je vous présente un autre défi espion contre espion opposant les obfuscateurs aux crackers. Dans ce cas, cependant, la donnée à protéger n'est pas une entrée mais une sortie .
Les règles du défi sont simples. Écrivez une routine avec les spécifications suivantes:
- La routine peut être écrite dans n'importe quelle langue mais ne doit pas dépasser 320 octets.
- La routine doit accepter trois entiers signés 32 bits comme entrées. Il peut prendre la forme d'une fonction qui accepte 3 arguments, une fonction qui accepte un seul tableau à 3 éléments ou un programme complet qui lit 3 entiers à partir de n'importe quelle entrée standard.
- La routine doit générer un entier 32 bits signé.
- Sur toutes les entrées possibles, la routine doit sortir entre 2 et 1 000 (inclus) valeurs uniques. Le nombre de valeurs uniques qu'une routine peut produire est appelé sa clé .
Par exemple, le programme C
int foo( int i1, int i2, int i3 ) {
return 20 + (i1^i2^i3) %5;
}
a une clé de 9, car elle (je l' espère) peut sortir les neuf valeurs 16
, 17
, 18
, 19
, 20
, 21
, 22
, 23
et 24
.
Certaines limitations supplémentaires sont les suivantes:
- La routine doit être entièrement déterministe et invariante dans le temps, renvoyant des sorties identiques pour des entrées identiques. La routine ne doit pas appeler les générateurs de nombres pseudo-aléatoires.
- La routine peut ne pas s'appuyer sur des "variables cachées" telles que des données dans des fichiers, des variables système ou des fonctionnalités de langage ésotérique. Par exemple, les routines ne devraient généralement pas faire référence à des constantes à moins que les constantes ne soient clairement définies dans le code lui-même. Les routines qui s'appuient sur des caprices du compilateur, des sorties d'opérations mathématiques non définies, des erreurs arithmétiques, etc. sont également fortement déconseillées. En cas de doute, s'il vous plaît demander.
- Vous (le codeur) devez savoir précisément combien de sorties uniques la routine peut produire et devez être en mesure de fournir au moins une séquence d'entrée qui produit chaque sortie. (Puisqu'il peut potentiellement y avoir des centaines de sorties uniques, cet ensemble ne sera jamais demandé que si votre clé est contestée.)
Étant donné que ce problème ressemble beaucoup moins à un cryptage classique que le précédent, je m'attends à ce qu'il soit accessible à un public plus large.
Plus c'est créatif, mieux c'est.
La notation
La ou les soumissions non fissurées les plus courtes par décompte d'octets 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 routines, 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.
Une seule tentative de piratage par soumission par lecteur est autorisée. Par exemple, si je soumets à l'utilisateur X: "votre clé est 20" et que je me trompe, l'utilisateur X rejette ma supposition comme incorrecte et je ne pourrai plus soumettre de suppositions supplémentaires pour cette soumission.
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 une nouvelle routine, il doit le faire dans une réponse séparée.
Le score d'un cracker est le nombre de soumissions (conformes ou non) qu'il ou elle cracke. Pour les crackers avec des nombres identiques, le classement est déterminé par le nombre total d'octets dans toutes les soumissions fissurées (le plus élevé, le meilleur).
Le ou les crackers avec le ou les scores les plus élevés seront déclarés gagnants avec les développeurs des routines gagnantes.
Veuillez ne pas casser votre propre soumission.
Bonne chance. :)
Classement
Dernière mise à jour le 2 septembre à 10 h 45 HNE
Barrières inamovibles (soumissions non fissurées):
- CJam, 105 [Dennis]
Forces imparables (craquelins):
- Dennis [ Java, 269 ; C, 58 ; Mathematica, 29 ]
- Martin Büttner [ Java, 245 ]
return