Avis de non-responsabilité: le codage Levenshtein n'a aucun lien avec la métrique de distance d'édition Levenshtein .
<Insérer une longue histoire sur la raison pour laquelle les codes Levenshtein doivent être calculés ici.>
Le code
Le codage Levenshtein est un système d'attribution de codes binaires à des entiers non négatifs qui conserve une propriété étrange en probabilité qui n'est pas pertinente pour ce défi. Nous désignerons ce code par L ( n ). Wikipedia décrit cela comme un processus en cinq étapes:
- Initialisez la variable de comptage de pas C à 1.
- Écrivez la représentation binaire du nombre sans le mener
1
au début du code. - Soit M le nombre de bits écrits à l'étape 2.
- Si M n'est pas 0, incrémentez C , répétez à partir de l'étape 2 avec M comme nouveau numéro.
- Écrivez C
1
bits et a0
au début du code.
Cependant, le code peut également être décrit de manière récursive:
- Si le nombre est 0, alors son code est
0
. - Écrivez la représentation binaire du nombre sans le mener
1
au début du code. - Soit M le nombre de bits écrits à l'étape 2.
- Écrivez L ( M ) au début du code.
- Écrivez un
1
peu au début du code.
Pour ceux qui préfèrent les exemples, voici le processus récursif pour L (87654321), avec dénotation de concaténation:
Le défi
Écrivez un programme ou une fonction qui, étant donné un nombre n , sort la chaîne de bits L ( n ) dans n'importe quel format raisonnable (cela inclut le retour d'un nombre avec lesdits bits). Les failles standard sont, comme toujours, interdites.
Exemples
Contribution: 5
Production: 1110001
Contribution: 30
Production: 111100001110
Contribution: 87654321
Production: 111110000101001001110010111111110110001
Contribution: 0
Production: 0
±
au lieu d'une fonctionf
.JavaScript (ES6),
5452 octetsEdit: sauvé 2 octets grâce à @Arnauld.
la source
replace(1,...
au lieu dereplace(/1/,...
=> 52 octetsPyth, 12 octets
Manifestation
(Le
y
fin est d'exécuter la fonction résultante sur l'entrée)Explication:
la source
SQF, 110
Fonction récursive:
Appelez comme:
[NUMBER] call f
Notez que cela ne fonctionne pas réellement pour 87654321 ou d'autres grands nombres en raison d'un bogue dans le moteur ArmA. Bien qu'il sera probablement corrigé bientôt, et devrait fonctionner selon les spécifications.
( Ce ticket ici )
la source
PHP,
116114 octetsFournissez le nombre comme premier argument.
Mise à jour:
strlen($b)-1
par~~log10($b)
(enfin compris pourquoi tout le monde utilisait le logarithme) et un autre en concaténant différemment.la source
Rubis, 38 octets
Très similaire à la réponse JavaScript de Neil .
Voir sur repl.it: https://repl.it/CnhQ
la source
Java 8 (programme complet),
257249 octetsVersion lisible avec explication (il s'agit principalement de récursivité):
EDIT 1 : 8 octets enregistrés : Le premier caractère de la chaîne binaire est toujours 1; par conséquent, plutôt que d'utiliser
s.charAt(0)
, une meilleure option est tout simplement"1"
.la source