Vous recevrez un numéro x
, où 0 <= x <= 2^32 - 1
.
Vous devez sortir une liste de nombres en décimal, après une division récursive au format binaire.
Exemples:
Exemple 1:
255 -> 255 15 15 3 3 3 3 1 1 1 1 1 1 1 1
La liste actuelle est juste 255
.
La représentation binaire de 255
is 1111 1111
. En le divisant, nous obtenons 1111
et 1111
, qui sont en décimal 15
et 15
.
Nous les ajoutons à la liste, donc nous aurons 255 15 15
.
Maintenant, les nombres 15
et 15
serviront d'entrées et ces nombres doivent être divisés.
Le faire à nouveau, nous obtenons ( 3 3
des deux 15
s): 255 15 15 3 3 3 3
.
Poursuivant la logique, la liste finale sera 255 15 15 3 3 3 3 1 1 1 1 1 1 1 1
. Et comme 1
il ne peut plus être divisé, la sortie s'arrête.
Exemple 2:
225 -> 225 14 1 3 2 1 1 1 0
La liste de départ est 225
.
La représentation binaire de 225
is 1110 0001
. En le divisant, nous obtenons 1110
et 0001
, qui sont en décimal 14
et 1
.
En les ajoutant à la liste, nous obtenons 225 14 1
.
Maintenant, les nombres 14
et 1
serviront d'entrées et ces nombres doivent être divisés.
Puisqu'il 1
n'y a pas de division, la sortie le sera 225 14 1 3 2
.
Exemple 3:
32 -> 32 4 0 1 0
Conditions :
- Si le nombre de chiffres binaires est impair, le premier nombre aura un chiffre binaire de moins que le suivant. Exemple,
20 (10100)
sera divisé en tant que10
et100
, la sortie décimale étant2
et4
. - Les règles standard des échappatoires s'appliquent.
0
s et1
s ne se propagent plus.- Un programme qui plante pour essayer d'afficher trop de nombres est une condition de sortie valide.
la source
0
s lorsque la longueur est impaire?0
s.Réponses:
Pyth, 18 octets
Suite de tests
Ce code fait quelque chose de très délicat et intelligent avec
u
l'opérateur de point fixe de Pyth.Le corps de la fonction, qui est tout autre que le
u
, est assez simple:Ce code supprime les 0 et les 1, divise chaque nombre et ajoute l'entrée devant.
u
exécutera cette fonction sur le résultat précédent de la fonction jusqu'à ce que le résultat cesse de changer.Quelle valeur initiale
u
utilise-t-on? C'est la partie intelligente: le code ne spécifie pas la valeur à utiliser, il utilise donc par défaut l'entrée. Mais l'entrée n'est pas une liste de nombres - c'est un nombre. Pyth contraint implicitement le nombre sur le premier temps à travers la boucle à la plage du nombre -[0, 1, ..., Q-1]
. Cela ne ressemble en rien à la sortie que nous voulons obtenir. Heureusement,u
trouvera le résultat correct quelle que soit l'entrée initiale - la sortie souhaitée est le seul point fixe de la fonction, et une application répétée l'atteindra toujours.Regardons les valeurs intermédiaires du programme avec l'entrée
7
. J'ai mis en évidence le préfixe du résultat qui est garanti d'être correct, quelle que soit l'entrée initiale:7
(Implicitement[0, 1, 2, 3, 4, 5, 6]
)[7,
1, 0, 1, 1, 1, 0, 1, 1, 1, 2]
[7, 1, 3,
1, 0]
[7, 1, 3, 1, 1]
Quelle est la sortie.
Python compressé, 16 octets
Notez que puisque Pyth utilise uniquement la plage 0-127 de l'ASCII, il peut être compressé en utilisant un codage 7 bits plutôt qu'un codage 8 bits. Ainsi, le programme ci-dessus peut être compressé en 16 octets. Le programme résultant est:
hexdump:
L'interprète se trouve ici . Fournissez l'entrée comme argument de ligne de commande.
La page de codes de ce langage (Packed Pyth) est la plage 0-127 de l'ASCII, et chaque caractère est représenté avec 7 bits, complété à la fin. Ainsi, le vidage hexadécimal illisible ci-dessus représente:
Mais en 16 octets.
la source
05AB1E ,
21201817 octetsEssayez-le en ligne!
Explication
la source
ʒ
- Cette nouvelle page de code ... Depuis quand est 05AB1E Jelly? Moi j'aime.JavaScript (ES6), 99 octets
Cela semble un peu trop long. Il pourrait y avoir un meilleur moyen d'obtenir la bonne commande.
Démo
Afficher l'extrait de code
la source
Gelée ,
2120 octets-1 octet en supprimant une chaîne monadique, puis en traitant la conséquence de la conversion d'une liste vide du binaire en donnant 0 plus tard.
Un lien monadique prenant un numéro et renvoyant la liste spécifiée.
Essayez-le en ligne!
Comment?
la source
Java 7, 541 octets
Garder l'ordre d'origine m'a foutu pendant longtemps, sinon ce ne serait qu'une boucle facile et un principe d'appel récursif. Pourtant, défi amusant à comprendre tout en conservant la commande.
Explication:
Code de test:
Essayez-le ici.
Production:
la source
Python 2 , 110 octets
Essayez-le en ligne!
la source
Rétine , 142 octets
Essayez-le en ligne!
la source
PHP, 132 octets
Essayez-le en ligne!
la source
Array( [0] => 225 [1] => 14 [2] => 1 [3] => 3 [4] => 2 [5] => 1 [6] => 1 [7] => 1 [8] => 0 )
quand ce n'est pas le cas = 255 15 15 3 3 3 3 1 1 1 1 1 1 1 1$argn
Cette variable est disponible si vous exécutez PHP à partir de la ligne de commande avec l'-R
option. Voici un exemple de saisie 255 Essayez-le en ligne!Rubis , 102 octets
Essayez-le en ligne!
la source
Rubis , 98 octets
Essayez-le en ligne!
Simplement une optimisation de base de la réponse de Value Ink : utilisez flat_map au lieu de map ... flatten, et utilisez
a==[]?a
au lieu dea==[]?[]
la source