Pour le poste des voleurs, machine Cheapo Enigma (voleurs)
La soumission d'un policier consistera en un programme / fonction qui accepte un seul octet de données et renvoie un seul octet de données. Chaque entrée possible doit produire une sortie unique. (En d'autres termes, votre fonction doit être bijective)
Les voleurs tenteront de créer la fonction inverse de la vôtre en utilisant un code aussi court que possible. Votre objectif est donc de rendre votre fonction difficile à inverser.
Vous ne pouvez pas utiliser de fonctions intégrées ayant pour seul but de hacher ou de chiffrer.
Votre nombre d'octets ne peut pas dépasser 64 octets. Les solutions à 0 octet ne sont pas éligibles pour gagner.
Format d'entrée / sortie
8 bits (0 ou 1) ou un entier en base 10 dans la plage 1-256, 0-255 ou -128 à 127. Peut utiliser des E / S standard ou des E / S de fichiers. La fonction peut également renvoyer une valeur en sortie. L'entrée et la sortie doivent appartenir à la même plage (binaire, 1-256, 0-255 ou -128 à 127). Le voleur devra également utiliser cette plage pour les entrées et les sorties.
Notation
Rapport de votre nombre d'octets à celui de la meilleure tentative de voleur contre vous. Le score le plus bas l'emporte.
Vous ne pouvez gagner (en tant que flic) que si un voleur a tenté de vous vaincre. (Ce voleur peut être vous)
Exemple
C ++, utilise une plage de 0 à 255, 31 octets
int x;
cin>>x;
cout<<(x+1)%256;
Soumission possible de voleur en C ++, 32 octets
int f(int x)
{return x?x-1:255;}
L'utilisation du même langage ou d'un algorithme similaire n'est pas obligatoire
Cela donne un score de 31/32 = 0,97 à la fois au flic et au voleur.
la source
Réponses:
Javascript,
118 octets, score: 8/5Implémentation simple du code gris. Le décodage nécessite généralement une boucle entière. Voyons qui propose le plus petit ou même sans boucle!
la source
x^x/4
sera plus difficile car il ne devrait pas y avoir de construction pour cela ...^
est xor au niveau du bit, pas une exponentiation. Quoi qu'il en soit, cela semble magiqueC, 64 octets, score 64/71 = 0,901
Prend entrée dans la plage [0 255].
Essayez-le en ligne! - sur TIO (en utilisant GCC), cela produit:
Notez que sur d'autres systèmes, il peut produire une sortie différente (mais toujours valide), car C ne requiert pas une
rand
implémentation spécifique . Ma soumission est spécifiquement la version fonctionnant sur TIO (comme liée).Je suis assez déçu de ne pas avoir pu obtenir une version comme ma version originale (
f(x){return rand(srand(x*229))/229%256;}
) pour travailler sur TIO, car je pense que c'est beaucoup plus élégant. Comme cela ne fonctionne que sur Clang fonctionnant sous OS X, ce n'est pas juste pour la concurrence. Celui-ci est encore assez difficile à inverser, donc cela suffit, je suppose.la source
srand()
, donc vous devrez décider si c'est acceptable sous cette forme.Gelée , 2/5
Essayez-le en ligne pour voir l'ensemble du tableau.
la source
JavaScript, 44 octets 22/3
Utilise le tri lexicographique (Javascript par défaut) pour réorganiser tous les nombres de 0 à 255
Essayez-le en ligne!
la source
C (gcc) ,
3227/30 octetsMerci à christoph d' avoir joué au golf 5 octets.
Essayez-le en ligne!
la source
f(x){x=x?f(x*5+1&255)+1:0;}
pour un score de27/30
.Javascript, 11/8 octets
Le domaine / plage est compris entre 1 et 256.
la source
x**3
etx**5
devrait fonctionner.JavaScript, 13 octets 13/12
L'entrée et la sortie sont toutes deux comprises entre 1 et 256
Essayez-le en ligne!
la source
Javascript, 27/29 octets
Modifier: la plage / le domaine est compris entre 1 et 256. Généré par force brute, plus ou moins.
la source
Octave , 16/6
Essayez-le en ligne!
la source
Java, 35 octets
Le domaine / la plage sont compris entre 0 et 255
la source
Rubis, 23 octets
La plage et le domaine sont compris entre 0 et 255. Concaténer 228 à lui-même x fois, puis prendre le résultat modulo 257 (0 correspond à 0). 228 est le premier nombre magique après 9 qui fonctionne pour cette plage (donne des valeurs distinctes qui n'incluent pas 256).
la source
Python 3, 55 octets
Le domaine / plage est compris entre 0 et 255.
la source
Python 3, 32 octets 32/23
Le domaine / plage est compris entre 0 et 255.
Retourne les quatre premiers octets avec les quatre derniers et ajoute trois aux premiers octets.
la source
Mathematica, 13 octets
Utilise la plage [1..256], bien qu'elle soit également valable sur la plage [0..255]. Pour voir l'intégralité du tableau, copiez / collez l'une des lignes de code suivantes dans le sandbox Wolfram :
la source
brainfuck , 37/11
Essayez-le en ligne!
Pas très bon mais plage de 0 à 255
la source