Écrire un programme, étant donné une entrée n , générera tous les n-uplets possibles en utilisant des nombres naturels.
n=1
(1),(2),(3),(4),(5),(6)...
n=2
(1,1),(1,2),(2,1),(2,2),(1,3),(3,1),(2,3),(3,2),(3,3)...
n=6
(1,1,1,1,1,1) (1,1,1,1,2,1) (1,1,1,2,1,1)...
- La sortie peut être dans n'importe quel ordre qui ne casse aucune autre règle.
- Le programme doit être écrit pour fonctionner pour toujours et répertorier tous les nuplets applicables exactement une fois, en théorie.
- En réalité, votre programme atteindra la limite et le crash de votre type entier. Ceci est acceptable tant que le programme serait courir infiniment long si seulement votre type entier était illimité.
- Chaque tuple valide doit être répertorié dans un délai déterminé, si seul le programme est autorisé à exécuter ce processus.
- La sortie peut, à votre choix, inclure des zéros en plus des nombres naturels.
- Vous pouvez choisir le format de sortie de votre programme pour votre commodité, à condition que la séparation entre les n-uplets et les nombres à l'intérieur de chaque tuple soit claire et cohérente. (Par exemple, un tuple par ligne.)
- L'entrée (n) est un entier de un à six. Le comportement requis n'est pas défini pour les entrées situées en dehors de cette plage.
- Les règles du code-golf s'appliquent, le programme le plus court gagne.
Merci à "Artemis Fowl" pour ses commentaires pendant la phase de bac à sable.
Réponses:
Husk , 2 octets
Essayez-le en ligne!
Explication
N
est la liste infinie de nombres naturels[1,2,3,4,..
.π
est le pouvoir cartésien. Le résultat est une liste infinie de listes. Chaque liste de la longueur souhaitée apparaît exactement une fois parce queπ
c'est cool comme ça. Les entrées et sorties sont implicites.la source
n
- les n-uplets sont obtenus en prenant le produit cartésien de la liste d'origine et la liste desn-1
-uuples, dans l'ordre croissant de la somme des indices.2,2,2
vient après4,1,2
et5,1,1
.N
. Pour 2-tuples, vous prenez un produit cartésien avecN
ordre par somme d'indices. Dans les deux listes, chaque nombren
est indexé,n
ainsi pour la longueur 2, le résultat est ordonné par somme. Pour obtenir 3-tuples, vous prenez le produit cartésienN
et la liste des 2-tuples, classés par la somme des indices des éléments de ces listes. Il ne regarde pas la somme du tuple, mais sa position dans la liste des n-uplets.Haskell , 62 octets
Essayez-le en ligne!
n!s
génère tous lesn
-tuples qui totalisents
.Ensuite, la réponse est
([1..]>>=).(!)
, à savoir\n -> [t | s<-[1..], t<-n!s]
.Il s’agit d’une fonction mappant un entier
n
sur une liste infinie de n-uplets (listes d’entiers).la source
Haskell , 50 octets
Essayez-le en ligne!
Listes
n
-tuples triés par somme.mapM
fait le gros du travail pour générer tous lesn
couples de nombres de 0 à k. Le<$f
truc est expliqué ici .Haskell , 51 octets
Essayez-le en ligne!
n-1
Étend de manière récursive tous les -tuples en tous lesn
-tuples en divisant le premier nombrea
de chaquen-1
-tuple en deux nombresa-k,k
qui le résument, de toutes les manières possibles.la source
Pyth - 9 octets
Merci à @FryAmTheEggman pour le golf
Parcourt tout x et prend [1..x] ^ n. Cela crée des doublons, donc ne conserve que ceux qui sont nouveaux pour ce x, c'est-à-dire qu'ils contiennent x. Le formatage est un peu bizarre, mais il peut être rendu standard avec un octet supplémentaire,
.V1j}#b^Sb
Essayez-le en ligne .
la source
f}bT
->}#b
De plus, votre nombre d'octets semble être incorrect pour le moment?j(b)
. Merci également pour le golf.Brachylog (v2), 9 octets
Essayez-le en ligne!
C'est un générateur infini qui génère tous les nuplets possibles. Le lien TIO a un en-tête qui utilise le générateur pour générer 1000 éléments et les imprime (mais le générateur pourrait continuer indéfiniment si je le demandais à la place; les entiers de Brachylog ne sont pas liés).
On sent qu'il devrait y avoir une marge de manoeuvre, mais il y a beaucoup de contraintes et c'est le plus difficile pour moi de pouvoir les intégrer dans un seul programme.
Explication
Incidemment, il me semble intéressant de voir à quel point mes explications sur les deux
≜
sont différentes, même si elles font exactement la même chose du point de vue de Brachylog. Le premier≜
est le premier prédicat non déterministe du programme, il définit donc l'ordre des résultats; dans ce cas, il calcule toutes les valeurs explicites possibles pour la somme de la liste dans l’ordre 0, 1, 2, 3…, et est utilisé pour garantir que les listes sont éditées dans l’ordre de leur somme la liste apparaît après une quantité finie de sortie). La seconde≜
est utilisée pour calculer toutes les possibilités explicites de la liste (plutôt que de générer une formule spécifiant le lien entre les éléments de la liste).la source
↰₁ẉ⊥
est également un bon en-tête, pour imprimer à l'infini.ᶠ
ou⊥
dans l’en-tête.Perl 6 , 37 octets
Essayez-le en ligne!
Fonctionne essentiellement
polymod
avec autant d'entrées que nécessaire, où le modulo est toujours supérieur à l'entrée, c'est-à-dire 0.polymod (1,1,1), 1.polymod (2,2,2), etc. Ainsi, le chiffre est toujours compris entre la gamme. Perl6 ne me laissera pas modulo l'infini ...la source
(0, 1, 0, 0)
n'est pas listé).Wolfram Language (Mathematica) , 62 octets
Essayez-le en ligne!
-3 octets avec séparation incohérente (supprimer
@#&
)Essayez-le en ligne!
la source
C # (compilateur interactif Visual C #) , 148 octets
Essayez-le en ligne!
-3 octets grâce à @ASCIIOnly!
la source
Write
avec eg'<literal tab>'
ou a|
la même longueur et prend beaucoup moins de lignes: PGelée , 10 (9?) Octets
9 si nous pouvons sortir en utilisant une séparation non cohérente (sur laquelle je me suis renseigné) - suppression de
€
.Essayez-le en ligne!
Comment?
la source
€
nécessaire, mais attendons de ce que OP doit dire.05AB1E ,
15 à11 octets-4 octets en créant un port de @Maltysen réponse Pyth de .
Essayez-le en ligne.
Explication:
la source
MATL , 16 octets
Les tuples sont classés par somme croissante, et à l'intérieur d'une somme donnée, ils sont classés lexicographiquement.
Essayez-le en ligne!
la source
Python 2 ,
12611210610110083 octetsEssayez-le en ligne!
5 octets thypet à mypetlion ; 1 octet de l'oeil d'aigle d' ArBo ; 17 octets de xnor !
Construisez les partitions ordonnées de
m
dans desn
bacs,m = 0,1,2,3,...
en sélectionnant des nombres binaires avecn-1
0
s etm
1
s.la source
if i==p:i=0;p*=2
peut deveniri%=p;p<<=i<1
économiser 5 octets.print b
n'est pas nécessaire: Di+p
fait que compter 1, 2, 3 ... de façon alambiquée et peut donc ne représenter qu'une seule variable.C # (.NET Core) ,
608 570567 octetsEssayez-le en ligne!
mon dieu qu'est-ce que j'ai fait (tant de boucles, c'est ce que j'ai fait)
Cela devrait marcher!
Si vous déplacez la boucle d’impression d’un crochet vers l’autre, la liste sera affichée telle qu’elle est construite, à chaque boucle. (Je vous recommande d'ajouter une nouvelle ligne ou quelque chose pour distinguer chaque boucle si vous le faites.)
Honnêtement, beaucoup j'ai passé de temps à me battre avec la langue ... pas de jolies baies d'impression, des comportements assortis de == ...
Espérons que cette version est plus facile à lire.
la source
Perl 6 , 50 octets
Essayez-le en ligne!
Bloc de code anonyme qui renvoie une liste infinie paresseuse. Ceci utilise la même stratégie que la réponse de Chas Brown .
Explication:
la source
VDM-SL , 51 octets
Compréhension récursive des ensembles avec concaténation de séquences.
Pas sur TIO, vous pouvez exécuter un programme (si vous activez les limites pour le type nat ou si cela ne se termine pas):
Inclut les 0 facultatifs dans la réponse, sinon ce serait une liaison de 52 octets sur nat1
la source
Wolfram Language (Mathematica) , 131 octets
Essayez-le en ligne!
la source
perl -M5.010 122 octets
Ajout de nouvelles lignes pour des raisons de lisibilité (non prises en compte dans le nombre d'octets)
la source
Python 2 , 120 octets
Essayez-le en ligne!
Un peu plus long que la plupart des autres réponses, mais j’ai aimé l’idée derrière tout ça.
la source
Stax , 6 octets
Exécuter et déboguer
Pour la saisie,
n
la procédure est approximativementla source
JavaScript (V8) , 98 octets
Essayez-le en ligne!
Hourra! Enfin obtenu moins de 100 :) Fondamentalement, un portage de ma réponse C # .
la source