Étant donné une chaîne de caractères différents et un nombre n, générez toutes les combinaisons ordonnées avec répétition, de longueur 1 à n, en utilisant ces caractères.
Une autre façon de le définir est de voir les caractères donnés comme des chiffres "personnalisés" dans la base (radix) du nombre de caractères, puis le programme devrait générer tous les "nombres" avec 1 à n chiffres dans cette base, cependant, menant "zéros" sont également inclus.
Les combinaisons doivent être classées selon leur longueur (1 caractère en premier, puis 2, etc.), mais à part cela, elles peuvent être dans n'importe quel ordre. Vous pouvez choisir les moyens les plus pratiques de gérer les entrées et les sorties. Le code le plus court gagne.
Exemples:
ab, 3
-> a,b,aa,ab,ba,bb,aaa,aab,aba,baa,abb,bab,bba,bbb
0123456789, 2
->0,1,2,3,4,5,6,7,8,9,00,01,...,09,10,11,...,99
la source
Réponses:
APL (Dyalog Unicode) , 13 octets SBCS
Essayez-le en ligne!
ne manquez jamais une occasion d'utiliser un scan :)
vous invite à saisir une chaîne de "chiffres", puis à
n
merci @ Adám de m'avoir expliqué comment activer
]box
sur TIOla source
Python 2, 56 octets
n
est la longueur maximale ets
devrait être une liste de caractères. Il n'est pas clair pour moi si n = 0 ou une liste de caractères vide sont des entrées valides, mais cette fonction les gère également correctement.la source
J, 41 car
la source
APL (31)
Utilisation: l'argument de gauche est la chaîne et l'argument de droite est le nombre, comme ceci:
La sortie est ordonnée par longueur, mais dans les groupes de longueurs, ils sont décalés d'un vers la gauche, c'était plus simple.
Explication:
,/⍺∘{
...}¨⍳⍵
: pour 1..⍵, appliquez la fonction à ⍺ et joignez les résultats ensemble.(⍵⍴⍴⍺)⊤⍳⍵*⍨⍴⍺
: pour chaque nombre de 1 à (⍵ = (longueur actuelle)) ^ (⍴⍺ = (quantité de caractères)), convertissez en base ⍴⍺ en utilisant ⍵ chiffres.1+
: ajoutez-en un car les tableaux sont indexés sur 1.⍺[
...]
: utilisez-les comme index dans la chaîne↓⍉
: faites pivoter la matrice, de sorte que les «nombres» se trouvent sur les lignes plutôt que dans les colonnes, puis divisez la matrice en lignes.la source
?!/\-+*~&=,.|
et probablement plus. Il existe des codages APL à un octet, mais Unicode est plus facile à utiliser.Haskell, 34 caractères
Utilisation simple de la monade de liste. Le seul vrai golf est l'utilisation
mapM
au lieu du plus idiomatique (et plus court)replicateM
qui nécessiterait l'importationControl.Monad
.Usage
la source
Python,
9794t=t+[s]
ne peut pas être raccourcit+=[s]
car L et t pointeraient vers la même liste.Contribution:
'ab', 3
Production:
la source
Mathematica
29 1928Usage
la source
MATL,
98 octetsEssayez-le sur MATL Online!
(MATL a été créé après la publication de ce défi, mais je pense que c'est correct par le méta-consensus de nos jours.)
(-1 octets grâce à @Luis Mendo.)
x
- supprimer l'entrée de chaîne de la pile (la copie automatiquement dans le presse-papiers G):"
- entrée implicite du nombre n, boucle de 1 à n1G
- collez la chaîne d'entrée du presse-papiers G sur la pile@
- pousser l'index d'itération de la boucle actuelleZ^
- pouvoir cartésien: produit d'entrée cartésien avec lui-même@
nombre de foisLes résultats de puissance cartésienne (
@
-digit "nombres" dans la base donnée) sont accumulés sur la pile et affichés implicitement à la fin.la source
x:"1G@Z^
Python - 106
La solution simple et non créative. Si vous trouvez des améliorations significatives, veuillez poster une réponse séparée.
Entrée:
"ab",3
Sortie:
la source
Python, 100
Dérivé de la solution de @ aditsu .
Contribution:
'ab', 3
Production:
la source
Perl 5 +
-nlF -M5.010 -MList::Util+(uniq)
, 41 octetsEssayez-le en ligne!
-1 octet grâce à @Xcali !
la source
Pyth, 6 octets
Attend le jeu de caractères comme 1ère entrée, le nombre de chiffres comme 2ème. Un octet pourrait être enregistré s'il existait une méthode à un octet pour accéder à plusieurs reprises à la 2e entrée, mais hélas ...
Essayez-le en ligne ici .
la source
Perl 6 , 33 octets
Essayez-le en ligne!
Bloc de code anonyme qui prend une chaîne et un nombre et renvoie une liste de chaînes.
la source
PHP 180
Je n'en ai aucune idée ... je me sens paresseux.
la source
Erlang 110
La version combinateur Y (pour shell):
la source
Erlang 89 (118)
Version du module:
Caractères comptés sans comptabilité obligatoire (module et exportation).
la source
Rubis , 73 octets
Essayez-le en ligne!
la source
Japt , 9 octets
Explications à suivre.
Essayez-le
Essayez-le
la source
Gelée , 6 octets
Essayez-le en ligne!
Soumission de la fonction, en prenant la liste des chiffres comme premier argument et le nombre de chiffres comme deuxième. Les chiffres eux-mêmes peuvent être l'un des types de données de Jelly, mais j'ai utilisé des entiers dans le lien TIO ci-dessus car il produit la meilleure sortie dans le wrapper automatique «fonction → programme complet» de Jelly.
Explication
Le produit cartésien nous donne effectivement tous les nombres avec un nombre donné de chiffres (selon le préfixe avec lequel nous travaillons). Nous nous retrouvons donc avec une liste de listes de combinaisons (regroupées par longueur), et pouvons aplatir ce niveau afin d'obtenir une liste qui n'est pas groupée (mais qui est toujours triée par longueur, comme la question l'exige, comme
Ẏ
ne le fait pas 'change pas l'ordre relatif des éléments etƤ
essaie d'abord des préfixes plus courts).la source
05AB1E , 6 octets
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
Alternative à 6 octets:
REMARQUE: sortie flexible: génère une nouvelle liste pour chaque longueur, le tout sur la même ligne d'impression.
Le convertir en une seule liste serait plus long de 2 octets:
Lv²yã`})
( Essayez-le en ligne ).Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
K (ngn / k) , 17 octets
Essayez-le en ligne!
la source