De Wikipédia Définition théorique des nombres naturels
L'ensemble N de nombres naturels est défini comme le plus petit ensemble contenant 0 et fermé sous la fonction successeur S définie par S (n) = n ∪ {n}.
Les premiers nombres définis de cette façon sont 0 = {}, 1 = {0} = {{}}, 2 = {0,1} = {{}, {{}}}, 3 = {0,1,2 } = {{}, {{}}, {{}, {{}}}}.
En utilisant cette définition des nombres naturels, comptez la longueur d'une chaîne.
Entrez une chaîne de caractères de a-zA-Z de n'importe quelle longueur
Afficher la longueur de la chaîne en notation définie sans séparateurs
Exemples
Entrée chaîne vide
Sortie {}
Entrez un
Sortie {{}}
Entrée aaaa
Sortie {{} {{}} {{} {{}}} {{} {{}} {{} {{}}}}}
Pour la lisibilité, la sortie pour 'aaaa' avec séparateurs est
{
{}
{{}}
{{} {{}} }
{{} {{}} {{} {{} } } }
}
Conditions
- Pas de chiffres de 0 à 9 pour apparaître dans le code;
- Pas d'utilisation de conversion de code de caractères pour générer des nombres;
- Pas d'utilisation de + - * / pour les calculs arithmétiques incluant l'incrémentation et la décrémentation;
- Aucune opération mathématique autre que la logique booléenne;
- La chaîne d'entrée ne compte pas pour déterminer la longueur d'octet;
Gagnant Longueur de code la plus courte en octets.
Comme il s'agit de ma première question, j'espère l'avoir suffisamment claire et rigoureuse. Conseils amicaux acceptés.
f(n-1)
?Réponses:
GolfScript (
1817 octets)Prend des entrées sur la pile (donc si exécuté en tant que programme, via stdin). Laisse la sortie sous forme de deux chaînes sur la pile (donc si elle est exécutée en tant que programme, la sortie correcte est envoyée à stdout).
Pour laisser une seule chaîne sur la pile, ajoutez
+
à concaténer ou utilisez l'alternativeDissection
Alternative:
Impact des restrictions
Si la décrémentation était autorisée, cela permettrait la solution à 15 octets
la source
Fonction Haskell,
3534 caractèresProgramme Haskell avec entrée codée en dur,
48 ou 4947 ou 48 caractères(47 caractères si cela ne vous dérange pas de guillemets supplémentaires autour de la sortie; si vous le faites, utilisez
putStr
au lieu deprint
pour un total de 48 caractères)Programme Haskell,
5150 caractèresla source
Python 3-64
Si l'inlining est autorisé:
Python 2 - 54
la source
o[-1]
au lieu deo.pop()
o=[]
, qui deviento=['{}']
après une étape, et allonger l'entrée d'une unité en la remplaçant par'_'+input()
, en coupant l'espace aprèsin
.Javascript 70 (caractères)
C'était mon effort avant de poser la question. Je suppose que quelqu'un avec plus de connaissances sur Javascript que moi peut probablement le battre.
Merci Jan Dvorak et Peter Taylor pour de nouvelles réductions
maintenant 62
et maintenant 61
Explication du code d'origine
définir s pour être vide
chaîne d'entrée en c et divisée en un tableau
alors qu'il est possible de pop () un caractère de c faire ainsi et réinitialiser s = s {s} comme successeur
courant de sortie s mais doivent être entourés de supports définis.
la source
while
(enregistre un caractère).s='{'
et abandonnez les deux'{'+
. (Cela se comporte alors comme ma solution GS). Il y a une autre économie de 1 caractère en utilisantfor
au lieu dewhile
et en tirant l'une des deux initialisations vers l'initialisation pour la boucle.for(a;b;c){d}
est directement équivalent àa;while(b){d;c}
dans la plupart des langues qui ont les deux. Ainsi, tandis quefor(;b;)
est identique à l'while(b)
effet et au nombre de caractères,for(a;b;)
enregistre un caractèrea;while(b)
et est identique en effet.J -
2220 caractèresComment cela peut être dérivé:
Alternativement, cela peut être écrit
'{','{'&(,,~)&'}'@#
, ce qui signifie la même chose.Usage:
la source
Haskell - 35 caractères
La solution est influencée par celle de Jan Dvorak, mais sans inverser l'ordre.
la source
Scala, 64 caractères
Notez les rôles doubles que les accolades et
s
jouent dans ce code.EDIT: a supprimé un chiffre
la source
Python 3 (44)
À chaque étape,
s
la chaîne représentant l'ensemble avec la finale}
supprimée. Nous créons l'ensemble représentant àn+1
partir de l'ensemble représentantn
via la relation f (n + 1) = f (n) ∪ {f (n)}. Pour implémenter l'union avec des chaînes, nous ajoutons la chaîne pour {f (n)}, qui est exactements
mais avec la finale}
retournée, et négligeons d'inclure la finale}
dans le résultat. Enfin, nous ajoutons une finale'}'
avant l'impression.Si je peux coder en dur la chaîne, le nombre de caractères est réduit à 35 caractères, en passant à Python 2 pour enregistrer des paranthèses sur le
print
.Il pourrait y avoir un moyen d'économiser l'espace après le
print
en faisant quelque chose commeprint'{'+s
avec un inversés
, mais cela gâche avec l'+=
annexe à droite.la source
gs2, 12 octets
mnémotechnique:
la source
Mathematica, 115 caractères
Le code complet, comme indiqué, contient 121 caractères, mais 6 d'entre eux sont utilisés pour la chaîne d'entrée (
"test"
) qui, selon les règles, ne compte pas.Sans l'exigence de l'absence de délimiteurs, la longueur du code pourrait être encore réduite de 24 caractères; sans conversion explicite en chaîne, 9 autres caractères pourraient être supprimés.
la source
Ruby, 27 ans, sorte de tricherie
Choses douteuses:
[[], [[]], [[], [[]]], [[], [[]], [[], [[]]]]]
la source
inspect
le tableau manuellement ettr
le résultat.Pure Bash, 54
Production:
la source
Julia 43
La construction {z ...} développe la chaîne z dans un tableau. Pliez les boucles sur tous les éléments du tableau en ignorant le contenu et à la place à partir de la chaîne vide. La fonction foldl est disponible dans Julia 0.30.
Exemple de sortie
la source
Haskell, 31 octets
la source
Mathematica,
455748 octetsUne solution à 36 octets:
Cependant, il utilise certains calculs arithmétiques.
la source
Delphi XE3 (264)
D' accord , je ne viennent même près de l'autre , mais il était amusant de le faire :)
overthinking Probablement il. Je vais voir s'il y a une meilleure façon de le faire.
Golfé
Non golfé
Résultats des tests
Cordes testées de longueur 0..10
la source
Perl 5:33 caractères
Il n'est pas très clair quels caractères je devrais compter dans la solution. Probablement pas laecho ... |
partie car c'est juste utilisé pour alimenter une ligne vers stdin. Probablement pas le nom du binaire perl, car vous pouvez renommer ce que vous voulez.J'ai donc compté les commutateurs de ligne de commande passés à perl, les guillemets enroulés autour du code Perl et le code Perl lui-même.Aussi, lié .
la source
pl
comme standard, mais vous obtenez-e
et les citations autour du code gratuitement. RefPerl 6: 37 caractères
ou de STDIN:
{"\{@_.join()\}"}...*
fait une liste paresseuse des formes définies des nombres naturels, et nous prenons juste celle dont nous avons besoinget.chars
.La liste paresseuse pourrait être écrite de manière plus lisible:
Qui se lit assez similaire à la définition.
la source
Fléchette: 85 caractères
(avec une nouvelle ligne supplémentaire pour plus de lisibilité).
L'exigence de ne pas utiliser "0" mord vraiment, sinon ce
.first
serait[0]
et ce(..).isNegative
serait..<0
.la source
Pyth, 13 octets
C'est l'équivalent Pyth golfé de la réponse Python de @ xnor. Notez que Pyth est plus récent que cette question, donc cette réponse n'est pas éligible pour gagner ce défi.
Manifestation.
la source
u+G]GlQY
Javascript,
171149147142 octets(Sera probablement joué au golf plus tard)
la source