Cette construction est une façon de représenter les nombres naturels.
Dans cette représentation, 0 est défini comme l'ensemble vide et pour tous les autres nombres, n est l'union de {0} et {n-1}.
Par exemple, pour construire 3, nous pouvons suivre l'algorithme:
3 =
{ø, 2} =
{ø, {ø, 1}} =
{ø, {ø, {ø}}}
Tâche
Comme vous l'avez peut-être deviné, votre tâche consiste à saisir un nombre naturel (y compris zéro) et à générer sa construction.
Vous pouvez sortir sous forme de chaîne ou d'objet set si la langue de votre choix prend en charge ces objets.
Si vous choisissez de sortir sous forme de chaîne, vous devez représenter un ensemble avec des accolades ( {}
). Vous pouvez éventuellement représenter l'ensemble vide comme ø
(sinon il doit s'agir d'un ensemble sans entrées {}
). Vous pouvez également choisir d'ajouter des virgules et des espaces entre et après les entrées dans l'ensemble.
L'ordre n'est pas important, mais vous ne pouvez pas avoir d'éléments répétés dans les ensembles que vous produisez (par exemple {ø,ø}
)
C'est du code-golf donc le but est d'avoir le moins d'octets
Cas de test
Voici quelques cas de test avec quelques exemples de sorties.
0 -> {}
1 -> {{}}
2 -> {{}{{}}}
3 -> {{}{{}{{}}}}
4 -> {{}{{}{{}{{}}}}}
la source
Réponses:
Python , 28 octets
Essayez-le en ligne!
C'est une solution assez fade au problème. Pour les nombres supérieurs à zéro, vous pouvez obtenir la représentation avec la formule de chaîne
"{{}"*x+"}"*x
. Cependant, cela ne fonctionne pas pour zéro où il s'agit de la chaîne vide. Nous pouvons utiliser ce fait pour court-circuiteror
et retourner l'ensemble vide.Je voulais utiliser les objets set intégrés de python pour résoudre ce problème mais malheureusement:
Vous ne pouvez pas mettre d'ensembles à l'intérieur d'ensembles en python.
la source
x
à"{{}"*x+x*"}"or
sauver un octetf=
pourrait être supprimé.frozenset
que personne pour ça ...Haskell , 37 octets
Essayez-le en ligne!
Jusqu'à il y a 10 minutes, une réponse comme celle-ci n'aurait pas eu de sens pour moi. Tous les crédits vont à cette réponse de conseils .
Fondamentalement, nous utilisons
>>
asconcat $ replicate
(mais en lui passant une liste de n éléments au lieu de simplement n), et=<<
asconcatMap
, répliquant ensuite n fois chacune des chaînes de la liste et concaténant le résultat en une seule chaîne.Le
0
cas est traité séparément car il retournerait une chaîne vide.la source
f 1
pour le faire fonctionner correctementJavaScript, 28 octets
Représente les ensembles à l'aide de tableaux. Solution non récursive de 38 octets:
Renvoie les exemples de chaînes de sortie.
la source
Mathematica, 27 octets
J'ai deux solutions à ce nombre d'octets:
la source
#//.{1->{{}},x_/;x>1->{{},x-1}}&
. Bien que je suppose que cela gâche l'entrée 0Perl 6 , 37 octets
Essayez-le
Étendu:
la source
:
ou est-ce quelque chose de nouveau pour Perl 6?05AB1E ,
65 octetsCode
Utilise l' encodage CP-1252 . Essayez-le en ligne!ou Vérifiez tous les cas de test! .
Explication
la source
F¯)
, ça ne marche pas?n=0
, car la sortie est vide (pas un ensemble vide).Rétine , 22 octets
Essayez-le en ligne!
Explication
Convertissez l'entrée en unaire.
Remplacez chaque chiffre unaire par
{{}
et imprimez le résultat sans retour à la ligne (\
).Retirez les ouvertures
{
, afin que les autres}
soient exactement ceux que nous devons encore imprimer pour fermer tous les ensembles. Cependant, la procédure ci-dessus échoue pour la saisie0
, où nous n'imprimerions rien. Donc...Si la chaîne est vide, remplacez-la par l'ensemble vide.
la source
n
temps dans la rétine ...Brain-Flak , 135 octets
Comprend +1 pour
-A
Essayez-le en ligne!
la source
Röda , 37 octets
la source
CJam , 11 octets
Imprime un objet de type ensemble composé de listes de listes. CJam imprime des listes vides sous forme de chaînes vides, car les listes et les chaînes sont presque interchangeables.
Essayez-le en ligne!
Explication
Ancienne réponse,
2118 octetsC'était avant qu'il ne soit confirmé qu'il était correct d'imprimer une structure de liste imbriquée. Utilise l'algorithme de répétition de chaînes.
Sauvegardé 3 octets grâce à Martin Ender!
Explication
la source
Gelée , 6 octets
Il s'agit d'un lien niladique qui lit un entier depuis STDIN et renvoie un tableau irrégulier.
Essayez-le en ligne!
Comment ça fonctionne
la source
Python 3 , 32 octets
Pas le plus court chemin, mais je devais le faire avec récursivité.
Essayez-le en ligne!
la source
Cardinal ,
5150 octetsEssayez-le en ligne!
Explication
Recevez l'entrée et envoyez vers le bas et à gauche du #
Imprimer "{" une fois puis imprimer "{} {" n-1 fois si n> 1 puis imprimer "{}" si n> 0
Maintenez la valeur d'entrée jusqu'à la fin de la première boucle
Imprimer "}" une fois puis répéter n-1 fois si n> 1
la source
AHK, 55 octets
Ce n'est pas la réponse la plus courte, mais j'ai apprécié cela parce que les particularités d'AutoHotkey font que cette méthode de récursion a l'air super fausse.
If
et lesLoop
instructions supposent que la ligne suivante est la seule chose incluse si les crochets ne sont pas utilisés. Les accolades sont des caractères d'échappement, vous devez donc les échapper avec d'autres accolades pour les utiliser comme texte. De plus, la variable1
est le premier argument passé. Quand je lis le code sans connaître ces petits morceaux, la logique ressemble à ceci:s
égal à la mauvaise réponseSans tous les caractères d'échappement des crochets, cela ressemblerait à ceci:
la source
JavaScript 50 octets
la source
tinylisp , 52 octets
Essayez-le en ligne! (test harnais).
Explication
Notez que
(cons x (cons y nil))
c'est ainsi que vous créez une liste contenantx
ety
en Lisp.la source
C (gcc) , 52 octets
Profitant d'une évaluation et d'une récursion des courts-circuits.
Essayez-le en ligne!
la source
Pure Bash ,
494841 octetsEssayez-le en ligne!
la source
dc , 46 octets
Essayez-le en ligne!
Entrée sur stdin, sortie sur stdout.
Cela fonctionne en calculant une formule pour la sortie souhaitée sous la forme d'un nombre de base 256. La commande P dans dc est ensuite utilisée pour imprimer le nombre base-256 sous forme de chaîne.
Plus d'explications:
Soit n l'entrée n. Le programme DC calcule la somme de
A = étage (256 ^ n / 255) * 125 (BF est interprété par dc comme 11 * 10 + 15 = 125)
et
B = étage ((256 ^ n) ^ 3 / (8 ^ 8-1)) * 8092541 * (256 ^ n).
Pour un:
Observez que 1 + 256 + 256 ^ 2 + ... + 256 ^ (n-1) est égal à (256 ^ n-1) / 255, par la formule d'une progression géométrique, et cela est égal au sol (256 ^ n / 255 ). C'est donc le nombre composé de n 1 en base 256.
Lorsque vous le multipliez par 125 pour obtenir A, le résultat est le nombre composé de n 125 en base 256 (125 est un chiffre unique en base 256, bien sûr). Il est probablement préférable d'écrire les chiffres de la base 256 sous forme de nombres hexadécimaux; 125 est hexadécimal 7D, donc A est le nombre de base 256 composé de n 7D dans une rangée.
B est similaire:
Cette fois, observez que 1 + 16777216 + 16777216 ^ 2 + ... + 16777216 ^ (n-1) est égal à (16777216 ^ n - 1) / 16777215, et cela est égal au plancher (16777216 ^ n / 16777215).
Maintenant, 256 ^ 3 = 16777216 et 8 ^ 8-1 = 16777215, c'est donc ce que nous calculons comme étage ((256 ^ n) ^ 3 / (8 ^ 8-1)).
D'après la représentation des séries géométriques, ce nombre dans la base 256 est 100100100 ... 1001 avec n des chiffres étant 1 et le reste des chiffres étant 0.
Ceci est multiplié par 8092541, qui est 7B7B7D en hexadécimal. Dans la base 256, il s'agit d'un nombre à trois chiffres composé des chiffres 7B, 7B et 7D (en écrivant ces chiffres en hexadécimal pour plus de commodité).
Il s'ensuit que le produit écrit en base 256 est un nombre à 3n chiffres composé des 3 chiffres 7B 7B 7D répétés n fois.
Celui-ci est multiplié par 256 ^ n, ce qui donne un nombre de base 256 à 4n chiffres, composé des 3 chiffres 7B 7B 7D répétés n fois, suivis de n 0. C'est B.
L'ajout de A + B donne maintenant le nombre de base 256 à 4 chiffres composé des 3 chiffres 7B 7B 7D répétés n fois, suivis de n 7D. Puisque 7B et 7D sont les codes ASCII pour
{
et}
, respectivement, il s'agit de la chaîne composée de n copies de{{}
suivi de n copies de}
, ce qui est exactement ce que nous voulons pour n> 0. La commande P en dc imprime un nombre en base 256 comme une chaîne, comme nous en avons besoin.Malheureusement, n = 0 doit être traité comme un cas spécial. Le calcul ci-dessus donne un résultat de 0 pour n = 0; dans ce cas, je viens de coder en dur l'impression de la chaîne
{}
.la source
Java 7, 61 octets
Essayez-le en ligne!
la source
Lot, 88 octets
la source
Brainf *** , 99 octets
(nouvelle ligne pour l'esthétique) Puisque c'est brainf ***, il prend l'entrée en tant que codes de caractères ascii (l'entrée "a" correspond à 96)
Braineasy, 60 octets
Aussi, dans ma langue personnalisée (basée sur brainf **, interprète ici ):
Vous devez coder en dur l'entrée du programme dans l'interpréteur parce que je suis paresseux.
la source
[]
? Il semble qu'il pourrait être supprimé05AB1E ,
53 octetsEssayez-le en ligne!
Cette version est après avoir précisé que les ensembles sont corrects.
Ancienne version (qui utilise le ø):
05AB1E ,
54 octetsEssayez-le en ligne!
Où
1
est équivalent àø
.la source