introduction
Cela peut sembler étrange, mais nous n'avons pas eu UN défi pour compter de 1
à n
, inclus.
Ce n'est pas la même chose. Celui-ci est un défi (fermé) pas bien expliqué.
Ce n'est pas la même chose. Celui-ci consiste à compter indéfiniment.
Défi
Écrivez un programme ou une fonction qui imprime chaque entier de 1
à n
inclusif.
Règles
- Vous pouvez obtenir
n
n'importe quel moyen. - Vous pouvez supposer que ce
n
sera toujours un entier positif. - Vous pouvez entrer
n
dans n'importe quelle base, mais vous devez toujours produire en décimal. - La sortie doit être séparée par tout caractère (ou motif) qui ne se trouve pas
0123456789
. Les caractères de début ou de fin non décimaux sont autorisés (par exemple lors de l'utilisation de tableaux tels que[1, 2, 3, 4, 5, 6]
). - Les failles standard sont refusées.
- Nous voulons trouver l'approche la plus courte dans chaque langue, pas la langue la plus courte, donc je n'accepterai aucune réponse.
- Vous devez mettre à jour vos réponses après cette modification, les réponses publiées avant la dernière modification doivent respecter la règle de changement concernant les failles standard (je ne voulais pas les refuser, mais je ne voulais pas faire rugir la communauté, alors Je les ai niés).
- Vous pouvez utiliser n'importe quelle version linguistique (ou langue) post-datation. Vous ne pouvez pas utiliser de langue ou de version linguistique spécialement conçue pour ce défi.
Bonus
20%
- Votre programme doit pouvoir compter au moins jusqu'à
18446744073709551615
(2^64-1
). Par exemple, si un nouveau type de données est le seul moyen de prendre en charge de grands nombres entiers, vous devez le construire. Si votre langue n'a aucun moyen de prendre en charge des entiers énormes jusqu'à 2 ^ 64-1, la limite supérieure de cette langue particulière doit être prise en charge à la place.
EDIT : J'ai changé la limite de 2^64
à 2^64-1
pour autoriser plus de réponses.
EDIT : J'ai fait de la règle 2 ^ 64-1 un bonus, car ce défi n'a pas suscité beaucoup d'intérêt. Si votre réponse prend en charge 2 ^ 64-1, vous pouvez maintenant la modifier pour inclure le bonus. De plus, vous pouvez poster une réponse ne la supportant pas, si elle est plus courte.
n
n'importe quel moyen." Est-ce à dire que l'on peut supposern
être enregistré dans une variable?n
n'importe quel moyen. Vous pouvez l'enregistrer dans une variable, mais elle ne doit pas être codée en dur.Réponses:
MarioLANG , 29 octets
Essayez-le en ligne!
Je sais que mon code est tristement super triste ou en colère:
Joyeux MarioLANG, 46 octets
Essayez-le en ligne!
Une approche plus heureuse:
MarioLANG non émotionnel, 41 octets
Essayez-le en ligne!
la source
:!
)=#
, ou>(
, ou(-[
, etc. De plus, aucune idée pourquoi, mais il y a apparemment une liste d'émoticônes la page Wikipedia , qui ne contient pas:!
ni l'un de ceux que j'ai mentionnés.Pyth, 1 octet
Le corps doit contenir au moins 30 caractères; vous avez entré 14.
la source
Cjam, 5 octets
Essayez-le en ligne!
Il s'agit d'un bloc sans nom qui attend
n
sur la pile et laisse une liste avec la plage[1...n]
dessus.Fonctionne en construisant simplement la plage avec
,
puis en incrémentant chaque élément de la plage avec:)
pour rendre la plage unitaire.la source
:)
Mathematica, 5 octets
Assez simple.
la source
Hexagonie, 19
Ou au format hexagonal étendu:
Un grand merci à Martin pour avoir proposé ce programme, je l'ai juste joué au golf pour s'adapter à un hexagone de 3 côtés.
Essayez-le en ligne!
Je n'ai pas les fantastiques programmes liés à Hexagony de Timwi, donc cette explication ne sera pas très colorée. Au lieu de cela, vous pouvez lire une énorme tache de texte. N'est-ce pas agréable?
Dans tous les cas, l'IP commence dans le coin supérieur gauche, sur le
$
, se déplaçant vers l'est si vous imaginez que ce programme a été placé avec le nord orienté vers le haut sur une carte. Le$
nous fait sauter la prochaine instruction, qui serait@
, qui mettrait fin au programme. Au lieu de cela, nous exécutons?
ce qui définit le bord de mémoire actuel comme étant le numéro d'entrée. Nous arrivons maintenant à la fin de la rangée, ce qui nous amène à la rangée médiane de l'hexagone, toujours en mouvement vers l'Est.La plupart du reste du programme est une boucle. Nous commençons par
.
ce qui est un no-op. Ensuite, nous rencontrons une fourchette dans ... euh ... l'hexagone ... l'<
instruction fait pivoter l'IP de 60 degrés vers la droite si le bord de mémoire actuel est positif, sinon nous tournons de 60 degrés vers la gauche. Puisque nous nous déplaçons vers l'est, nous nous retrouvons soit avec notre cap vers le sud ou le nord-est. Puisque l'entrée est supérieure à zéro (et donc positive), nous commençons toujours par aller vers le sud-est.Ensuite, nous avons frappé un
>
qui nous redirige vers l'est; ces opérateurs ne bifurquent que si vous frappez la partie fourche. Ensuite, nous frappons'
ce qui change le bord de mémoire que nous regardons. Ensuite, nous frappons)
qui incrémente la valeur du bord de mémoire actuel. Étant donné que tous les fronts de mémoire commencent à 0, la première fois que nous le faisons, nous obtenons une valeur de 1. Ensuite, nous sautons à la deuxième ligne supérieure et exécutons!
ce qui imprime notre numéro. Ensuite, nous passons à un autre bord avec{
et stockons la valeur ASCII de M multipliée par 10 plus 8 (778). Ensuite, nous revenons à l'avant-dernière ligne de l'hexagone et frappons le/
. Cela nous amène à nous déplacer vers le nord-ouest. Nous passons devant la.
rangée du milieu et sortons sur la;
en bas à droite. Ceci imprime le mod de bord de mémoire actuel 256 en ASCII. Cela se trouve être une nouvelle ligne. Nous frappons,'
ce qui nous ramène au premier bord qui a la valeur que nous lisons. Le nous frappons/
qui nous oblige à nous déplacer à nouveau vers l'Est. Ensuite, nous frappons(
ce qui diminue la valeur.=
nous amène à faire face à nouveau dans la bonne direction pour le futur saut de bord de mémoire.Maintenant, comme la valeur est positive (à moins qu'elle ne soit nulle), nous retournons au bas de l'hexagone. Ici, nous frappons
.
puis nous sautons par-dessus;
pour que rien ne se passe, et nous retournons au début de la boucle. Lorsque la valeur est zéro, nous retournons au début du programme, où le même problème se produit à nouveau mais?
ne parvient pas à trouver un autre nombre, et nous prenons l'autre chemin de branchement. Ce chemin est relativement simple: nous frappons{
ce qui change le bord de la mémoire, mais nous ne nous soucions plus, puis nous frappons@
qui termine le programme.la source
MATL, 1 octet
Exemple de sortie:
Essayez-le en ligne ici
la source
GNU Coreutils, 6 octets
réponse partagée à bash pur, voir ci-dessous ...
la source
R, 13 octets
Le corps doit contenir au moins 30 caractères.
la source
Javascript
182177160154139138132 octets (valide)1 octet enregistré grâce à @ShaunH
La précision arbitraire à la rescousse!
Parce que javascript ne peut compter que jusqu'à 2 ^ 53-1 (merci à @ MartinBüttner de l'avoir signalé), j'avais besoin de créer une précision arbitraire pour ce faire. Il stocke les données dans un tableau, et chaque "tick" il ajoute 1 au dernier élément, puis passe à travers le tableau, et si quelque chose dépasse 9, il définit cet élément à 0 et ajoute 1 à celui de la main gauche.
Essayez-le ici! Remarque: appuyez sur F12 pour voir le résultat, car je ne voulais pas vous faire attendre les zones de texte.
BTW .: J'étais le seul, qui ne savait pas, les opérateurs ternaires sont si utiles en codegolf?
est plus long que
par 1 octet.
Javascript, 28 octets (invalide - ne peut pas compter jusqu'à 2 64 )
la source
&&
peut aussi être utile, je dois juste faire attention à la cohersion.condition&&action()
e?c.unshift(1):0
poure&&c.unshift(1)
enregistrer un octetJava 8, 43/69/94 octets
Barré 44 est toujours un 44 régulier - attendez, je ne l'ai pas barré je l'ai juste remplacé :(Si je peux retourner un
LongStream
: (43 bytes
)Ceci est un lambda pour un
Function<Long,LongStream>
. Techniquement, je devrais utiliserrangeClosed
au lieu derange
, car j'en coupe un de mon entrée maximale de cette façon, mais ilrangeClosed
est plus long querange
.Si je dois imprimer dans la fonction: (
69 bytes
)Ceci est un lambda pour un
Consumer<Long>
. Techniquementpeek
, j'abuse , car c'est une opération intermédiaire , ce qui signifie que cette lambda renvoie techniquement unLongStream
comme le premier exemple; Je devrais utiliser à laforEach
place. Encore une fois, le golf n'est pas un bon code.Malheureusement, comme
long
la plage de est un entier 64 bits signé , elle n'atteint pas la requête2^64-1
, mais simplement2^63-1
.Cependant , Java SE 8 fournit des fonctionnalités pour traiter les
long
s comme s'ils n'étaient pas signés, en appelantLong
explicitement des méthodes spécifiques sur la classe. Malheureusement, comme Java est toujours Java, c'est assez long, bien que plus court que la version BigInteger qu'il remplace. (94 bytes
)C'est un
Consumer<Long>
, comme le précédent.Et juste trop longtemps pour éviter le défilement.
la source
n->java.util.stream.LongStream.range(1,n+1)
?BigInteger
est que l'utilisation d'unint
(ou mêmelong
) pour l'itérateur n'est pas assez grande.long
non signée, donc leur utilisation est plus courte que l'BigInteger
approche. (Cela n'aurait pas été le cas si nous avions dû mettre en œuvre notre propre traitement long non signé comme vous l'avez fait avant le J8.)05AB1E , 1 octet
Code:
Essayez-le en ligne! .
Une approche plus intéressante:
Explication:
Essayez-le en ligne! .
la source
MATLAB, 7 octets
Une fonction anonyme sans nom:
Courir comme:
Testez-le ici!
Si un programme complet est requis, 17 octets:
Testez-le ici!
la source
Haskell, 10 octets
Exemple d'utilisation:
f 4
->[1,2,3,4]
.la source
n
, vous devez prendren
.n
n'est pas codé en dur ici - c'est un argument de fonction. La syntaxe Haskell peut être étrange pour les personnes habituées à la syntaxe de type C.MarioLANG , 19 octets
Essayez-le en ligne!
Les programmes verticaux sont généralement plus faciles à jouer pour les boucles simples dans MarioLANG. Je ne suis pas sûr de ce que fait l'interprète lorsqu'il rencontre à l'
[
intérieur d'un ascenseur, mais il semble mettre fin au programme lorsque la cellule actuelle est à 0. C'est probablement une astuce utile en général.Explication
MarioLANG est un langage de type Brainfuck (avec une bande de mémoire infinie d'entiers de précision arbitraire) où le pointeur d'instruction ressemble à Mario marchant et sautant.
Mario commence dans le coin supérieur gauche et tombe vers le bas.
;
lit un entier depuis STDIN et le place dans la cellule mémoire actuelle. Notez maintenant que=
Mario est une cellule au sol sur laquelle marcher,"
et#
forme un ascenseur (avec#
le départ) et!
fait que Mario s'arrête sur l'ascenseur pour qu'il ne marche pas tout de suite. Le>
et<
définir sa direction de mouvement. Nous pouvons voir que cela donne une boucle simple, contenant le code suivant:Maintenant, normalement
[
, conditionnellement, Mario passerait au suivant selon que la cellule actuelle est nulle ou non. Autrement dit, tant que le compteur est différent de zéro, cela ne fait rien. Cependant, il semble que lorsque Mario rencontre un[
certain temps dans un ascenseur et que la cellule actuelle se trouve0
, le programme se termine simplement immédiatement avec une erreur, ce qui signifie que nous n'avons même pas besoin de trouver un moyen de le rediriger correctement.la source
[
, ce qui est en fait encore plus pratique.Joe - 2 ou 6
Bien que vous puissiez utiliser la variante inclusive de la fonction de plage.
..c'est ennuyant! Prenons plutôt la somme cumulée (
\/+
) d'un tableau de ceux de forme n (1~T
).la source
Pyth -
32 octets1 octets économisés grâce à @DenkerAffe.
Sans utiliser la fonction intégrée.
Essayez-le en ligne .
la source
hM
si vous voulez vraiment vous faire plaisir :)-.-
Pyke, 1 octet
Essayez-le ici!
Ou 2 octets sans le intégré
Essayez-le ici!
Essayez-le ici!
Essayez-le ici!
la source
dc, 15
Entrée lue depuis stdin. Cela décompte à partir de
n
, en poussant une copie de chaque numéro dans la pile. La pile est ensuite sortie comme une seule avec laf
commande, donc les nombres sont imprimés dans le bon ordre croissant.Parce que tous les nombres sont poussés vers la pile, cela risque fort de manquer de mémoire avant de se rapprocher de 2 ^ 64. Si c'est un problème, nous pouvons le faire à la place:
dc, 18
la source
dc
, commebc
, utilise des mathématiques de précision arbitraire par défaut, et donc de telles limites ne sont pas pertinentes pour cette langue.ArnoldC, 415 octets
La seule chose intéressante est d'utiliser nx (où n est l'objectif et x la variable incrémentée) pour tester la fin de la boucle while au lieu d'avoir une variable dédiée, donc je finis par avoir nx et n- (nx) = x dans chaque boucle
Remarque : je ne peux compter que jusqu'à 2 ^ 31-1. Eh bien, je suppose que les Terminators ne sont pas un vrai danger après tout.
la source
Piet, 64 Codels
Avec codelsize 20:
Images de trace Npiet
Première boucle:
Trace restante pour
n=2
:Remarques
Pas encore Piet réponse? Permettez-moi de résoudre ce problème avec mon tout premier programme Piet! Cela pourrait probablement être plus court avec de meilleurs rouleaux et moins de manipulation du pointeur ...
La limite supérieure prise en charge dépend de la mise en œuvre de l'interpréteur. Il serait théoriquement possible de prendre en charge des nombres arbitrairement élevés avec le bon interprète.
Le délimiteur est
ETX
(Ascii3
), mais cela ne peut pas être correctement affiché dans cette réponse, je vais donc les laisser de côté. Cela fonctionne dans la console:Sortie
Trace Npiet pour
n=2
la source
ETX
caractère (Ascii3
) diviser les sorties, le caractère ETX ne peut cependant pas être affiché sur ce site.JavaScript (ES6),
7776635958 octetsPrend l'entrée
n
sous forme de chaîne, devrait prendre en charge jusqu'à 9007199254740991999999999Expliqué:
la source
2^64-1
est bien, j'ai changé les spécifications.n=>{for(a=b="";a+""+b!=n;console.log(a+""+b))++b-1e9||(++a,b=0)}
a+""+b
à[a]+b
GNU bc, 23
Entrée lue depuis stdin.
bc
gère les nombres de précision arbitraires par défaut, donc le 2 ^ 64 max n'est pas un problème.la source
En fait, 1 octet
Boring builtin est ennuyeux. Nécessite une version 64 bits de Python 3 pour obtenir tout le chemin jusqu'à
2**64
.Essayez-le en ligne! (en raison de restrictions de mémoire et de longueur de sortie, l'interpréteur en ligne ne peut pas aller très haut).
Voici une version à 5 octets qui ne nécessite pas Python 3 64 bits et est un peu plus agréable sur l'utilisation de la mémoire:
Essayez-le en ligne! (voir les mises en garde ci-dessus)
la source
Octo-Guacamole floue, 7 octets
Explication:
la source
X
au lieu deo;
, pour 7 octets.n
:
Imprime la pile complète.X
est nouveau.^!$[_;]
.$
est gamme.Oration, 31 octets (non concurrent)
la source
literally,
devant chaque déclaration? (Question 2: avant ou après les dates si c'est la vôtre? Les deux sont acceptables sauf si vous avez fait cela pour ce défi, auquel cas c'est une échappatoire)QBASIC, 43 octets
la source
INPUT e;a
ouINPUT a
est-ce suffisant? Je ne te vois pas réutilisere
.1 TO
?:
entre des instructions au lieu d'un retour et un numéro de ligne? QB4.5 me permet de faire ceci:INPUT a: FOR b=1 TO a (\n) ?b:NEXT
Cubix , 17 octets
Essayez-le ici
Cubix est un langage 2D créé par @ETHProductions où les commandes sont enveloppées dans un cube. Ce programme encapsule sur un cube avec une longueur de bord de 2 comme suit.
I
obtient l'entrée entière0
pousser 0 dans la pile-
soustraire les éléments supérieurs de la pile!
si la vérité saute la prochaine commande se@
termine;
pop le résultat de la soustraction de la pile)
incrémenter le haut de la pilew
déplacez ip vers la droite et continuez. Cela le fait passer à la ligne suivanteO
sortir le haut de la pile sous forme de nombreN
pousser le saut de ligne (10) vers la pileo
sortie d'un saut de lignew
déplacez ip vers la droite et continuez. Cela le fait passer au visage suivant!
parce que TOS véridique, saute la@
fin;
sauter le saut de ligne de la pileU
tourner vers la gauche sur la-
soustraction et reprendre à partir de làla source
Python 2,
37333233 octetsFonctionne probablement jusqu'à
2**64
et au-delà.Abattu quatre octets grâce à @dieter , et un autre grâce à @orlp . Mais apparemment, comme @ Sp3000 l'a découvert, il
range()
pourrait y avoir des problèmes avec des valeurs plus élevées, donc la fonction a été remplacée parxrange()
. Remarque: mêmexrange()
peut avoir des problèmes, au moins dans 2.7.10 .la source
for i in range(input()):print i+1
for i in range(input()):print-~i
2**64
et au-delà." - en douter en Python 2, mais cela pourrait avecxrange
(edit: mêmexrange
pourrait avoir des problèmes, au moins en 2.7.10)-~
marche? Edit : je l'ai compris. Aussi, belle astuce!Zsh, 12 octets
Cela fonctionne car les variables sont développées avant les accolades.
la source
2^64-1
va bien maintenant.2^63 - 1
V, 11 octets
Puisqu'il contient un méchant UTF-8 et des non imprimables, voici un hexdump réversible:
V est une langue inachevée que j'ai écrite, mais cela fonctionne dès le commit 19 . Cette réponse était un peu plus verbeuse que je ne le souhaiterais, mais c'est principalement parce que V n'a aucune connaissance des entiers, seulement des chaînes. C'est donc une réponse décente! Cela va travailler jusqu'à 2 ^ 64, mais il faudra probablement très longtemps.
Pour rendre mon explication plus facile à lire / écrire, je vais travailler avec ce "formulaire lisible par l'homme", qui est en fait la façon dont vous tapez ceci dans vim.
Explication:
Si les failles sont autorisées, voici une version plus courte qui affiche 1 à n, mais affiche également un 0 (8 octets):
Et sous une forme lisible:
Ceci est plus court car
<A-q>
à la fin est implicite, donc nous n'en avons pas besoin si nous n'avons pas à supprimer la dernière ligne.la source