Définissez une séquence de longueur pré-ajoutée-ajoutéen
comme une permutation des nombres 1, 2, ..., n
pouvant être générés par la procédure suivante:
Commencez par le nombre
1
.Pour chaque numéro de
2
lan
, placez ce numéro au début ou à la fin de la séquence (soit précédez ou append , d' où le nom de la séquence).
Par exemple, c'est un moyen valide pour générer une séquence de pré-ajout-ajout de longueur 4:
1
21 [beginning]
213 [end]
2134 [end]
Votre tâche consiste à créer un programme ou une fonction qui prendra un nombre n
de 3
à 30
en entrée, et à imprimer ou renvoyer toutes les séquences de longueur de pré-ajout-ajout n
dans l'ordre lexicographique (si vous sortez des chaînes et non des listes, les nombres supérieurs à 9 seront représentés sous forme de lettres a-u
, pour conserver la longueur de la chaîne). Par exemple, voici cette commande pour n = 4
:
1234 [RRR]
2134 [LRR]
3124 [RLR]
3214 [LLR]
4123 [RRL]
4213 [LRL]
4312 [RLL]
4321 [LLL]
En général, il existe 2 n-1 permutations de longueur pré-ajoutée-ajoutée n
.
Vous ne pouvez pas utiliser de fonctions de tri intégrées dans votre langue dans votre code. Le programme le plus court pour le faire dans n'importe quelle langue gagne.
la source
a-u
. Pouvons-nous simplement sortir des listes de nombres?Réponses:
CJam,
22 20 1917 octetsExpansion du code :
Comment ça marche :
Il s'agit d'une version de débogage du code:
Voyons comment cela fonctionne pour la saisie
3
:Essayez-le en ligne ici
la source
Haskell, 47 octets
la source
f n=[[n:x,x++[n]]|x<-f$n-1]>>=id
(en utilisant la fonction de concaténation code-golfers>>=id
).f n=[x++[n]|x<-f$n-1]++[n:x|x<-f$n-1]
,f n=map(++[n])(f$n-1)++[n:x|x<-f$n-1]
,f n=map(++[n])(f$n-1)++map(n:)(f$n-1)
,f n=(++[n])#n++(n:)#n;p#i=map p$f$i-1
Python 2, 68
Produit une liste de listes de nombres.
Une solution récursive. Pour
n==1
, sortie[[1]]
. Sinon, ajoutezn
au début ou à la fin de toutes les(n-1)
permutations. La pré-extension rend la permutation lexicographiquement plus tard que l'ajout, donc les permutations restent triées.Le "booléen"
b
code s'il faut mettre[n]
au début ou à la fin. En fait, nous déplaçons le reste de la listex
dans l'expressionx*b+[n]+x*-b
. Mettreb
as-1
ou1
permet d'utiliser flip en niant, car une liste multipliée par-1
est la liste vide.la source
Pyth, 19
Essayez-le en ligne ici
Il s'agit d'un programme complet qui accepte les données de stdin.
Cela fonctionne de manière similaire à la solution de xnor, mais génère des valeurs un peu hors service, elles doivent donc être réorganisées. Ce qui se passe à chaque niveau, c'est que chaque liste de valeurs précédente a la nouvelle valeur ajoutée à la fin et au début et celles-ci sont chacune enveloppées dans un tuple 2 qui sont enveloppées ensemble dans une liste. Par exemple, la première étape fait ceci:
Ensuite, cette liste de tuples est zippée (puis additionnée pour supprimer la liste la plus externe). Dans le premier cas, cela donne simplement la valeur non enveloppée d'en haut, car il n'y a qu'une seule valeur dans la liste.
Étapes indiquant 2-> 3:
la source
Mathematica,
575449 octetsExemple:
la source
J, 26 octets
Amélioration d'un octet grâce à FUZxxl .
la source
,.
par,"1
un caractère.Pyth,
34333129Fondamentalement, une traduction de la réponse Python de xnor . Je ne suis toujours pas génial avec Pyth, donc les suggestions d'amélioration sont les bienvenues.
Définit une fonction
y
pour renvoyer une liste de listes d'entiers.Mise à jour: enregistré 2 octets grâce à FryAmTheEggman .
Explication:
la source
-b1
peut êtretb
,[1_1)
peut être,1_1
(cependant vous pouvez simplement supprimer le crochet de fermeture car il vous suffit de compter les octets nécessaires pour créer la fonction, même si vous ne pourrez pas l'appeler sans la fermer), et vous vous n'avez pas besoin d'envelopperb
dans une liste car pyth se convertit automatiquement en liste lors de l'ajout d'une liste à un int.[1,-1]
. Je peux enregistrer des octets pour coder en dur quelque chose d'aussi court, surtout lorsque vous simplifiez la logique. Je reçoisL?]]1<b2sCm,+db+bdytb
Pure Bash, 103
Plus longtemps que je ne l'avais espéré:
la source
JavaScript (ES6) 73
80Implémentation JavaScript de la belle solution de @ Optimizer.
Récursif (73):
Itératif (74):
Tester dans la console Firefox / FireBug
la source
Ma solution Java:
la source
false
par quelque chose comme5<4
.