Les nombres naturels dont 0 sont formellement définis comme des ensembles, de la manière suivante :
- Le numéro 0 est défini comme l'ensemble vide, {}
- Pour n ≥ 0, le nombre n +1 est défini comme n ∪ { n }.
En conséquence, n = {0, 1, ..., n -1}.
Les premiers nombres, définis par cette procédure, sont:
- 0 = {}
- 1 = {{}}
- 2 = {{}, {{}}}
- 3 = {{}, {{}}, {{}, {{}}}}
Défi
Étant donné n
, affichez sa représentation sous forme d'ensemble.
Règles
La sortie peut toujours utiliser un support de caractère tels que {}
, []
, ()
ou <>
. Les caractères arbitraires (tels que 01
) ne sont pas autorisés.
Au lieu d'une virgule comme ci-dessus, le séparateur peut être n'importe quel signe de ponctuation; ou il peut être inexistant.
Les espaces (pas les nouvelles lignes) peuvent être inclus de manière arbitraire et incohérente.
Par exemple, le numéro 2 avec des crochets et un point-virgule comme séparateur est [[]; [[]]]
, ou de manière équivalente [ [ ]; [ [ ] ] ]
, ou même[ [ ] ;[ []]]
L' ordre dans lequel les éléments d'un ensemble sont spécifiés n'a pas d'importance. Vous pouvez donc utiliser n'importe quel ordre dans la représentation. Par exemple, voici quelques sorties valides pour 3
:
{{},{{}},{{},{{}}}}
{{{}},{{},{{}}},{}}
{{{}},{{{}},{}},{}}
Vous pouvez écrire un programme ou une fonction . La sortie peut être une chaîne ou, si vous utilisez une fonction, vous pouvez renvoyer une liste ou un tableau imbriqué dont la représentation sous forme de chaîne est conforme à ce qui précède.
Cas de test
0 -> {}
1 -> {{}}
2 -> {{},{{}}}
3 -> {{},{{}},{{},{{}}}}
4 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}
5 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}}
6 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}}}
7 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}}}}
la source
Réponses:
Gelée , 3 octets
Ceci est un lien monadique. Essayez-le en ligne!
Comment ça marche
Chaque nombre naturel est l'ensemble de tous les nombres naturels précédents, c'est-à-dire n = {0,…, n-1} . Puisqu'il n'y a pas de nombres naturels précédant 0 , nous avons que 0 = {} .
la source
ḶL
s'agit d'un no-op, le mnémonique n'est pas de longueur. Il y a aussi non binaire, non décimal, unhalve, unine, unarccosine, etc.Python 2, 26 octets
Testez-le sur Ideone .
la source
JavaScript (ES6), 32 octets
Assez simple.
la source
.map()
sans fonction de flèche à l'intérieur :-).map(Number)
est un cas assez courant..map(e=>+e)
soit plus court, d'un octet.Perl 6 , 16 octets
Renvoie la structure de données imbriquée.
Exemple:
Explication:
la source
Rubis,
2721 octetsJe suis nouveau au golf rubis, mais ici, rien ne va. Merci à Jordan d'avoir économisé 6 octets!
Il s'agit d'une fonction récursive
f
(un proc, pour être spécifique) et prend un arguments
. Il mappe le procf
sur0...s
, qui est la plage[0, s)
.la source
map{|e|f[e]}
parmap &f
.Haskell,
3227 octetsEssayez-le sur Ideone.
la source
CJam , 14 octets
Essayez-le en ligne!
Explication
A chaque itération, le bloc construit la représentation d'un nombre à partir de celui du précédent. Pour illustrer, considérons la deuxième itération, où la représentation du nombre
2
est construite à partir de celle de1
, qui est la chaîne"[[]]"
."[[]]"
_
(en double) qu'il contient"[[]]"
,"[[]]"
)
(uncons) contient"[[]]"
,"[[]"
,"]"
@
(rotate) il contient"[[]"
,"]"
,"[[]]"
\
(swap) qu'il contient"[[]"
,"[[]]"
,"]"
]
(pack dans le tableau) qu'elle contient["[[]" "[[]]" "]"]
, qui serait affichée comme chaîne"[[][[]]]"
.la source
Cheddar, 17 octets
Récursion courte + courte portée + courte itération = un défi où le cheddar fait très bien
Non concurrent, 11 octets
le
=>
opérateur a été ajouté après la publication de ce défi, ce qui rend cette réponse non concurrentielle.Cela peut sembler déroutant, mais permettez-moi de le simplifier:
n
est essentiellement l'entrée etf
est la fonction elle-même.|>n
génère [0, n) et les=>
mappef
.la source
05AB1E ,
87 octetsExplication
Essayez-le en ligne!
Enregistré 1 octet grâce à Adnan.
la source
Pyth, 4 octets
Suite de tests
L
: Définir la fonctiony
avec entréeb
yMb
:y
cartographié sur la plage0, 1, ..., b-1
Sur l'entrée 0, cette carte revient
[]
. Sinon, il renvoiey
mappé sur tous les nombres jusqu'àb
.la source
MATL , 13 octets
Essayez-le en ligne!
Explication
la source
Perl, 27 octets
Comprend +1 pour
-p
De nombreuses méthodes différentes semblent finir par 27 ou 28 octets. par exemple
Le mieux que j'ai pu trouver est
car sur les anciennes perles, vous pouvez supprimer l'espace avant le
for
et obtenir 26 octetsla source
Mathematica, 14 octets
la source
Mathematica, 31 octets
Implémente directement la définition en tant que liste imbriquée. Utilise une fonction sans nom qui s'appelle récursivement en utilisant
#0
.la source
Union
lieu deJoin
:±0={};±n_:={t=±(n-1)}⋃t
... Cependant, dans ce cas, il est encore plus court d'opter pour une solution itérative:Nest[{#}⋃#&,{},#]&
Rétine ,
2418 octetsEssayez-le en ligne! (La première ligne active une suite de tests séparés par un saut de ligne.)
Explication
Cela convertit l'entrée en unaire et ajoute
<>
la représentation de0
.Ici, le
+
indique que cette substitution doit être exécutée en boucle jusqu'à ce que la chaîne cesse de changer. Il est plus facile d'expliquer cela en passant par les étapes individuelles que j'ai suivies en jouant au golf. Voyons avec cette version de la substitution:Cela correspond à la dernière
1
représentation unaire de l'entrée restante (pour la supprimer et décrémenter l'entrée), ainsi qu'au contenu de l'ensemble actuel à la fin. Celui-ci est alors remplacé par un nouvel ensemble contenant le précédent ainsi que son contenu. Cependant, nous pouvons remarquer que$1
c'est suivi>
dans les deux cas et donc nous pouvons l'inclure dans la capture elle-même et l'omettre du modèle de substitution. Cela mène au formulaireCependant, nous pouvons maintenant observer que
(.*)
capture juste le suffixe de la chaîne après1<
et nous réinsérons même ce suffixe à la fin avec$1
. Étant donné que la syntaxe de substitution nous donne un moyen de faire référence à la partie d'une chaîne après une correspondance avec,$'
nous pouvons simplement omettre ces deux parties et nous retrouver avec la version utilisée dans la réponse:la source
{}
, mais<>
c'est la seule paire qui n'a jamais besoin de s'échapper, alors j'ai pensé que j'irais avec ça. ;)Sous-charge , 14 octets
Essayez-le en ligne!
Les programmes complets de sous-charge ne peuvent pas prendre d'entrée via l'une de nos méthodes définies, il s'agit donc d'une fonction qui prend l'entrée de la pile comme un nombre Church (la façon normale de définir des entiers dans Underload), et produit une sortie vers la pile sous forme de chaîne .
Les
(…)
marqueurs de regroupement sont nécessaires pour en faire une fonction (réutilisable) plutôt qu'un extrait de code (utilisable une seule fois). L'encapsuleur dans le lien TIO appelle la fonction en question en utilisant destructivement^
, mais il pourrait être réutilisé en faisant une copie de celui-ci et en ne consommant qu'une des copies lors de son appel. Il fournit également une entrée au programme (ici(:*:*)
, c'est-à-dire 4) et imprime la sortie à l'aide deS
.Explication
La sous-charge est étonnamment adaptée à cette tâche comme le font les tarpits de Turing, ayant des primitives utiles telles que "copier" et "entourer de parenthèses". (D'une manière ou d'une autre, Underload, normalement un langage très verbeux, bat Mathematica, normalement un langage qui gagne en raison d'un énorme ensemble de commandes internes, via des commandes internes plus appropriées!) Voici comment fonctionne le programme:
L'exponentiation de la fonction fait que les étapes de la fonction se répètent autant de fois, par exemple,
(:a*)
³ le serait(:a*:a*:a*)
. C'est la façon idiomatique d'écrire une boucle qui se répète un nombre donné de fois dans Underload. (Vous pouvez noter que le~^
est décrit de deux manières différentes ci-dessus; c'est parce que les entiers dans Underload sont définis comme une exponentiation de fonction spécialisée pour cet entier, donc pour faire une exponentiation de fonction, vous essayez simplement d'exécuter un entier comme s'il s'agissait d'une fonction .)la source
Pari / GP , 23 octets
Essayez-le en ligne!
la source
APL (NARS), 15 caractères, 30 octets
tester:
Je ne sais pas si cela serait accepté ... Zilde est ⍬ ici, il représente l'ensemble de vides {} si je veux imprimer l'élément Zilde ou un élément plein de Zilde, et Zilde enfermé tout ce qui se passe n'est rien imprimer ... donc pour voir Zilde, il faut définir une fonction que j'appelle o (
o←⎕fmt
) je pas dans le compte car l'élément et sa structure existent même si le sys ne l'imprime pas ... C'est possible si io vaut 0pourrait aussi être une solution à 12 caractères ...
la source
Brachylog , 14 octets
Essayez-le en ligne!
Explication
la source
GAP , 22 octets
Par exemple:
la source
Raquette 119 octets
Non golfé:
Test (In Racket {} est identique à () et la sortie par défaut est ()):
Pour voir clairement chaque numéro (0 à 3):
la source
Lot, 74 octets
Utilise le fait que chaque réponse est égale à la réponse précédente insérée en elle-même après l'interlignage
{
. Les premières sorties sont les suivantes:la source