Ecrivez un programme qui compte pour toujours, à partir d'un.
Règles:
- Votre programme doit se connecter à
STDOUT
ou à une alternative acceptable, si elleSTDOUT
n’est pas disponible. - Votre programme doit être un programme complet exécutable et non une fonction ou un extrait de code.
- Votre programme doit sortir chaque nombre avec un caractère séparateur (une nouvelle ligne, un espace, une tabulation ou une virgule), mais cela doit être cohérent pour tous les nombres.
- Vous pouvez imprimer les nombres en décimal, en unaire ou en base 256, chaque chiffre étant représenté par une valeur d'octet .
- Votre programme doit compter au moins 2 128 (inclus) sans problèmes et sans manquer de mémoire sur un ordinateur de bureau raisonnable. En particulier, cela signifie que si vous utilisez unary, vous ne pouvez pas stocker en mémoire une représentation unaire du nombre actuel.
Contrairement à nos règles habituelles, n'hésitez pas à utiliser une langue (ou une version linguistique) même si c'est plus récent que ce défi. Les langues spécifiquement écrites pour soumettre une réponse de 0 octet à ce défi sont un jeu juste mais pas particulièrement intéressant.
Notez qu'il doit y avoir un interprète pour que la soumission puisse être testée. Il est permis (et même encouragé) d’écrire cet interprète vous-même pour une langue non encore implémentée.
- Il ne s'agit pas de trouver la langue avec la solution la plus courte pour cela (il y en a où le programme vide fait l'affaire) - il s'agit de trouver la solution la plus courte dans chaque langue. Par conséquent, aucune réponse ne sera marquée comme acceptée.
Catalogue
L'extrait de pile au bas de cet article génère le catalogue à partir des réponses a) sous forme de liste des solutions les plus courtes par langue et b) sous forme de classement global.
Pour vous assurer que votre réponse apparaît, commencez votre réponse par un titre, en utilisant le modèle Markdown suivant:
## Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores en les effaçant. Par exemple:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs numéros dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou si vous souhaitez répertorier séparément les pénalités d'indicateur d'interprétation), assurez-vous que le score réel est le dernier numéro de l'en-tête:
## Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de code:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
Réponses:
Labyrinthe , 5 octets
♫ L'IP dans le code tourne en rond ♫
Instructions pertinentes:
la source
:
et\
> <> , 8 octets
Pas:
(Un programme moins efficace en mémoire (donc invalide) est
llnao
.)la source
Haskell, 21 octets
Les entiers à précision arbitraire et les listes infinies rendent cela facile :-)
Heureusement,
mapM_
c'est dans le prélude. SiData.Traversable
c'était aussi bien, nous pourrions même le réduire à 19 octets:la source
sequence
le résultat donne le résultat final.[1..]
autorisé, puisqu'il affiche tous les nombres avec une virgule entre? ou le premier[
bousiller tout ça?[
n'est pas autorisé non plus.Gol> <> , 3 octets
Pas:
la source
Marbelous ,
114504632 octetsImprimer des nombres décimaux est une douleur !!
Certainement pas gagner avec celui-ci, mais je pensais que je pourrais tenter le coup. J'espère que ça va, ça compense la sortie à 40 zéros (pour 2 ^ 128).
la source
Ehun
tableau qui est supposé incrémenter le prochain chiffre, mais ne fonctionne pas correctementinclude/
par défautC (architecture 64 bits uniquement), 53 octets
S'appuie sur des pointeurs d'au moins 64 bits et les affiche au format hexadécimal à l'aide du
%p
spécificateur. Le programme reviendrait juste quand il frappe 2 ^ 128.la source
Hexagony ,
1211107 octetsMerci à Alephalpha pour l’adaptation du code en side-length 2.
Déplié:
Celui-ci est assez simple.
10
écrit un 10, c’est-à-dire un saut de ligne sur le bord initial de la mémoire. Puis})!';
est exécuté à plusieurs reprises dans une boucle:}
passer au bord de mémoire suivant.)
incrémente-le.!
Imprimez-le en tant qu'entier.'
revenir à la 10.;
Imprimez-le comme un personnage.Je crois que c'est optimal (bien que de loin pas unique). Je l' ai laissé le script de la force brute , j'ai écrit pour cette réponse recherche de solutions 6 octets dans l'hypothèse où il devrait contenir au moins un chacun
;
et!
et soit(
ou)
, et ne contiendrait pas?
,,
ou@
, et il n'a pas trouver des solutions.la source
Pyth, 4 octets
Explication:
la source
f!\n
( Lien TIO ) fonctionnera pendant 3 octets, pas sûr si cela utilise des fonctionnalités qui ont été ajoutées après votre réponse cependant.f
c'était une caractéristique de Pyth il y a 4 ans.bc, 10
Insolite qui
bc
est plus court quedc
.De
man bc
:la source
++i
est une expression, mais pas une affectation, et est donc explicitement sortie. Avez-vous essayé de l'exécuter?echo 'for(;;)++i' | bc
dans votre terminal Linux le plus proche.Java,
139138127123 octetsla source
for(;;)
pour 3 octets faciles.BigInteger b=null;b=b.ZERO;
, malheureusement, le=null
nécessaire, même s’il s’agit d’un accès statique.BigInteger
à FQCN une seule fois.interface
et supprimerpublic
de la fonction. Vous ne voulez pas copier votre code et le poster comme une nouvelle réponse.Mathematica, 22 octets
Echo
est une nouvelle fonction de Mathematica 10.3.la source
Echo
donne quatre caractères de séparation: newline plus">> "
. Pas sûr que cela soit valide - peut-être utiliser à laPrint
place? Enregistrez également un octet aveci=0;While[Echo@++i>0]
.Ruby,
1512 octetsp
, lorsqu'un nombre entier est donné, affiche le nombre entier tel quel (avec la permission de @philomory )$.
est une variable magique contenant le nombre de lignes lues dans stdin. Il est évidemment initialisé à 0 et assignable :)la source
Python 3,
3325 octetsPour autant que je sache, les entiers Pythons ont une précision arbitraire et
print()
produisent automatiquement des nouvelles lignes.Merci pour @Jakub et @ Sp3000 et @wnnmaw! Je ne sais vraiment pas beaucoup de python, la seule chose que je savais, c’est qu’il supporte des entiers de taille arbitraire =)
la source
1
est une valeur de vérité en Python (et la plupart des autres langues). Alorswhile 1:
c'est assez.while
sur une seule lignerepr(k)
plutôt queprint(k)
. Aussi, je compte votre taille d'octet de 25 (sans ma modification suggérée)repr
au lieu deprint
.repr
ne sort rien. @wnnmawrepr
alors?Traitement ,
958571 octetsJ'ai essayé quelque chose avec une boucle while, mais tout le traitement est en panne, je vais donc m'en tenir à cela pour le moment.
(Merci à @ SuperJedi224 et à @TWiStErRob pour leurs suggestions.)
la source
import java.math.*;BigInteger i=BigInteger.ZERO;void draw(){println(i=i.add(BigInteger.ONE));}
marchera.BigInteger.ONE
de le modifieri.ONE
?Samau , 2 octets
Explication:
Lorsque la sortie d'un programme est une liste, les crochets les plus à l'extérieur sont omis.
la source
@
"push" est mal orthographié.JavaScript (ES6),
999467 octetsalert
est l’STDOUT
équivalent généralement accepté pour JavaScript, mais son utilisation signifie que des nombres consécutifs sont automatiquement séparés. J'ai supposé que la sortie d'un caractère après le nombre n'était pas nécessaire pour cette raison.la source
2^53
mais la question oblige à aller jusqu'à2^128
.Matlab, 132 octets
Ok, je pense que ceci est la première réponse sérieuse qui accomplit cette tâche sans un nombre entier trivial intégré. Ce programme implémente un entier de taille arbitraire sous forme de tableau d’entiers. Chaque entier étant toujours compris entre 0 et 9, chaque élément du tableau représente un chiffre décimal. La taille du tableau sera augmentée de un dès que nous en serons par exemple
999
. La taille de la mémoire n’est pas un problème ici, car elle2^128
nécessite seulement un tableau de longueur 39.la source
C ++,
146141138 octetsUtiliser une bibliothèque standard Bigint est peut-être la façon la plus ennuyeuse de répondre à cette question, mais quelqu'un devait le faire.
Ungolfed:
La version golfée utilise
stdio.h
et necstdio
doit pas utiliser l’std::
espace de noms.C’est la première fois que je joue au golf en C ++. Dites-moi s’il existe des astuces pour le raccourcir davantage.
la source
'\n'
au lieu destd::endl
, vous économiserait 8 octets. Il pourrait également y avoir un moyen d’utiliser CPP #define pour réduire certaines répétitions,i
construit par défaut avec la valeur 0? Vous pouvez ensuite supprimer la définition et passer de post-incrémentation à pré-incrémentation, ce qui vous évitera 2b#import
?C # .NET 4.0,
11110310297 octetsJe n’ai trouvé aucune réponse en C # ici, j’ai donc dû en écrire une.
.NET 4.0 est requis car c'est la première version qui inclut BigInteger . Vous devez cependant référencer System.Numerics.dll .
Avec indentation:
Merci à sweerpotato, Kvam et Berend d'avoir économisé quelques octets
la source
class C{static void Main(){var b=System.Numerics.BigInteger.One;for(;;)System.Console.WriteLine(b++);}}
: ~)!Console.WriteLine
dans la structure de la boucle:class C{static void Main(){for(var b=System.Numerics.BigInteger.One;;Console.WriteLine(b++));}}
System
. Cela sauve un octet cependant!using System;
(13 octets), vous pouvez supprimerSystem.
deux fois (7 octets), en enregistrant 1 octet.Clojure, 17 octets
Les séquences paresseuses et les entiers de précision arbitraire facilitent cette opération (comme pour Haskell et CL).
prn
me sauve quelques octets car je n’ai pas besoin d’imprimer une chaîne de format.doseq
serait probablement plus idiomatique puisque nous ne traitons ici que des effets secondaires;map
n’a pas beaucoup de sens à utiliser car cela créera une séquence denil
(qui est la valeur de retour de chaqueprn
appel).En supposant que je compte pour toujours, la séquence de pointeur null résultant de cette opération n'est jamais renvoyée.
la source
MarioLANG , 11 octets
Inspiré par la réponse de Martin Büttner à une autre question .
la source
CJam, 7 octets
Explication:
Remarque: Vous devez utiliser un interpréteur Java.
la source
C, 89 octets
Une nouvelle approche (implémentation d’un incrémenteur au niveau du bit) en C:
Moins golfé
Mettre fin
Cette version a le léger défaut de ne pas se terminer (ce qui n’est pas une obligation pour le moment). Pour ce faire, vous devez ajouter 3 caractères:
la source
forever
Foo , 6 octets
Explication
la source
Minkolang , 4 octets
Essayez ici. (Eh bien, en fait, soyez prudent. 3 secondes de temps d'exécution suffisaient pour atteindre environ 40 000 $.)
1+
ajoute 1 au sommet de la pile, led
duplique etN
génère le haut de la pile sous la forme d'un entier avec un espace de fin. Cela boucle parce que Minkolang est toroïdal, donc lorsque le compteur de programme sort du bord droit, il réapparaît à gauche.la source
Intel 8086+ Assembly, 19 octets
Voici une ventilation:
Il émet le numéro 128 bits sur les 8 positions d'écran en haut à gauche. Chaque position d’écran contient un caractère ASCII 8 bits et deux couleurs 4 bits.
Remarque: il se termine à 2 128 ; changez simplement le
8
enmov cx, 8
pour9
afficher un nombre de 144 bits, ou même80*25
pour montrer des nombres allant jusqu’à 2 32000 .Fonctionnement
Disquette amorçable compressée bzip2 de 1,44 Mo, codée en Base64 Image
Générez l'image de la disquette en copiant-collant ce qui suit
dans cette ligne de commande:
et courir avec, par exemple,
qemu -fda floppy.img -boot a
1,8 Mo ISO amorçable
Ceci est une image ISO compressée bzip2 codée en base64. Générer l'iso en collant
dans
et configurer une machine virtuelle pour démarrer à partir de celle-ci.
DOS .COM
Il s’agit d’un exécutable DOS .COM codé en base64 :
Générez un fichier .COM en utilisant
et lancez-le sous (Free) DOS.
la source
Perl ,
343230282623 octetsTest avec
la source
for(,,){...}
par{...;redo}
pour deux.SV UNDEF
, ce qui, une fois incrémentées, ne déclenchera pas laBigInt
surcharge, car ce n'est pas un fichierBigInt
. Les littéraux entiers, cependant, sont créés en tant queBigInt
s. Pas si étrange que ça en soit;)$-
pour le conserver en tant qu'entier et revenir à l'utilisation++$-
?perl -Mbigint -E '{say++$-;$-+=$-;redo}' | more
et ça tourne autour de 1. Ça reste un int, mais bigint n'intervient pas, malheureusement.Marbelous, 358 octets
16 demi-additionneurs enchaînés, le plus à droite effectuant N ++ à chaque cycle et chaque additionneur alimentant son trop-plein (00 ou 01) au suivant dans la chaîne. La sortie est en hexadécimal.
L'interpréteur python a un bogue dans lequel la sortie des fonctions mémoisées est perdue. Vous devez donc l'exécuter avec "-m 0" pour que tout fonctionne correctement. Sans ce paramètre, vous pouvez voir à quelle vitesse il fonctionnera sans le bogue, mais la sortie ne fonctionnera pas correctement.Note to self: corrigeons ce bogue dans marbelous.pyCe bogue a été corrigé dans la dernière version de marbelous.pyla source
R, 52 octets
(Remarque:
gmp
est une bibliothèque externe, vous devrez peut-être la télécharger pour que cette solution fonctionne)la source
a=gmp::as.bigz(0);repeat{cat(paste(a<-a+1,''))}
. Vous voudrez peut-être noter qu’ilgmp
s’agit d’une bibliothèque externe qui peut nécessiter un téléchargement.BotEngine,
1281201128x13 = 104La sortie est en binaire.
la source