Inspiré par A014486 .
Défi
Étant donné une entrée entière dans la base 10, construisez une représentation pour la forêt binaire correspondant à l'entrée. Les représentations incluent, mais sans s'y limiter, les tableaux et chaînes imbriqués.
Comment?
Convertissez l'entrée en binaire. 1
s représentent des branches et 0
s représentent des feuilles.
Pour rendre cela plus facile à comprendre, utilisons 834
(1101000010 en binaire) comme exemple.
Nous commençons par le premier chiffre. Le premier chiffre est un 1
, nous dessinons donc des branches:
\ / 1
ou comme un tableau, {{1}}
Le chiffre suivant est 1
, donc nous dessinons plus de branches (nous allons de gauche à droite):
\ / 1 \ / 1
ou comme un tableau, {{1, {1}}}
Le chiffre suivant est 0
, nous plaçons donc une feuille:
0 \ / 1 \ / 1
ou comme un tableau, {{1, {1, 0}}}
Le chiffre suivant est un 1
, nous plaçons donc une branche:
\ / 0 1 \ / 1 \ / 1
ou comme un tableau, {{1, {1, 0, {1}}}}
En répétant le processus, nous obtenons l'arbre suivant après le 8ème chiffre:
0 0 \ / 0 1 \ / dix \ / 1
ou comme un tableau, {{1, {1, 0, {1, 0, 0}}, 0}}
Pour les chiffres restants, nous dessinons plus d'arbres:
Le 9ème chiffre est un 0
, donc nous plaçons une feuille (aww, c'est une jeune pousse!)
0 0 \ / 0 1 \ / dix \ / dix
ou comme un tableau, {{1, {1, 0, {1, 0, 0}}, 0}, 0}
Lorsque nous utilisons tous les chiffres, nous nous retrouvons avec ceci:
0 0 \ / 0 1 \ / 1 0 0 \ / \ / 1 0 1
ou comme un tableau, {{1, {1, 0, {1, 0, 0}}, 0}, 0, {1, 0}}
Cela a l'air bizarre, nous avons donc ajouté un zéro pour terminer l'arborescence:
0 0 \ / 0 1 \ / 1 0 0 0 \ / \ / 1 0 1
ou comme un tableau, {{1, {1, 0, {1, 0, 0}}, 0}, 0, {1, 0, 0}}
Notez que l'aplatissement du tableau donne le nombre d'origine en binaire, mais avec un zéro complété.
Critères
- La sortie doit clairement montrer la séparation des arbres et des branches (s'il ne s'agit pas d'un tableau imbriqué, veuillez expliquer votre format de sortie).
- L'extraction de tous les chiffres de la sortie doit être identique à la représentation binaire de l'entrée (avec le ou les zéros remplis du processus ci-dessus).
Cas de test
La sortie peut différer tant qu'elle répond aux critères.
0 -> {0} 1 -> {{1, 0, 0}} 44 -> {{1, 0, {1, {1, 0, 0}, 0}}} 63 -> {{1, {1, {1, {1, {1, {1, 0, 0}, 0}, 0}, 0}, 0}, 0}} 404 -> {{1, {1, 0, 0}, {1, 0, {1, 0, 0}}}} 1337 -> {{1, 0, {1, 0, 0}}, {1, {1, {1, 0, 0}, {1, 0, 0}}, 0}}
Notation
Il s'agit de code-golf , donc les octets les plus bas gagnent!
la source
Réponses:
JavaScript (ES6),
968980797473 octetsDéfinit une fonction
f
qui renvoie un tableau imbriqué. Le code HTML est juste pour les tests.la source
$&
passe-.replace
t-il?" : PBefunge,
138117104 octetsEssayez-le en ligne!
Explication
La ligne 1 lit un nombre à partir de stdin, et la ligne 2 convertit ce nombre en une séquence binaire qu'elle stocke dans le champ de jeu sur la ligne 10. Les lignes 3 à 5 parcourent ensuite ces chiffres binaires, produisant la représentation d'arbre appropriée à mesure que chaque chiffre est traité. La pile Befunge est utilisée pour garder une trace de la profondeur dans l'arbre et de la quantité d'espace foliaire restant à chaque niveau afin que nous sachions quand créer une nouvelle branche. Les lignes 6 et 7 gèrent le
0
rembourrage final pour remplir les feuilles vides.Afin de jouer au golf autant que possible, j'ai supprimé les virgules de la sortie ainsi que les accolades externes. Cela n'a toujours pas battu la solution Mathematica, mais ça a été amusant d'essayer.
Si vous voulez voir à quoi il ressemblait avec le format de sortie détaillé original, j'ai enregistré une version antérieure du code ici (131 octets).
la source
Mathematica,
167161 octetsFonction anonyme. Prend un nombre en entrée et renvoie une liste de nombres arbitrairement imbriqués en sortie. Sauts de ligne ajoutés pour plus de clarté. Utilise un mécanisme impliquant des continuations, mais je suis trop fatigué pour y penser plus longtemps.
la source
#[[1]]
à#&@@#
devrait enregistrer un octet.!#~FreeQ~1
au lieu d'#~MemberQ~1
enregistrer également un octet.Mathematica,
115109108104 10498 octetsGénère des messages d'erreur qui peuvent être ignorés en toute sécurité. Génère une forêt binaire. Il est légèrement différent de l'exemple de sortie car il
1
s'agit d'unHead
, et non du premier élément d'une liste. (par exemple1[0, 0]
au lieu de{1, 0, 0}
)Version sans erreur (104 octets)
Explication
Convertissez l'entrée en une liste de base 2. Conservez-le
i
.SetDelay
f
les éléments suivants (évalués à chaquef
appel):Switch
déclaration.Tout d'abord, si
i
est vide, affichez0
. Sinon, sortez le premier élément dei
et supprimez-le de la liste. Utilisez la sortie comme variable de contrôle.Si la variable de contrôle est
0
, sortie0
. Si c'est le cas1
, sortie1[f, f]
(récursive).Bien qu'il
i
ne soit pas vide, continuez d'appelerf
. Sortez le résultat, enveloppé avecList
.Exemple
Solution alternative (120 octets)
Identique à ma solution de 104 octets mais convertit la sortie au format donné dans la question.
la source
Python 2,
133118117 117 octetsPartiellement récursif, partiellement itératif. J'ai essayé d'utiliser un entier, mais l'arborescence commence par les bits les plus significatifs, donc je ne pense pas que cela en vaille la peine.
Essayez-le en ligne
la source
Java 8, 367 octets
Golfé:
Non golfé:
la source
DUP , 84 octets (82 caractères)
Pour des raisons de golf, je me suis débarrassé des accolades extérieures et des virgules car elles ne sont pas nécessaires à la reconstruction des arbres.
Exemples de sorties:
Explication:
Essayez-le avec l' interpréteur Javascript DUP en ligne sur quirkster.com ou clonez mon référentiel GitHub de mon interprète DUP écrit en Julia.
la source