Dada una cadena de caracteres diferentes y un número n, genere todas las combinaciones ordenadas con repetición, de longitud 1 a n, utilizando esos caracteres.
Otra forma de definirlo es ver los caracteres dados como dígitos "personalizados" en la base (raíz) del número de caracteres, luego el programa debe generar todos los "números" con 1 a n dígitos en esa base, sin embargo, También se incluyen "ceros".
Las combinaciones deben ordenarse por su longitud (1 carácter primero, luego 2, etc.), pero aparte de eso pueden estar en cualquier orden. Puede elegir las formas más convenientes de manejar la entrada y la salida. El código más corto gana.
Ejemplos:
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
fuente
Respuestas:
APL (Dyalog Unicode) , SBCS de 13 bytes
Pruébalo en línea!
nunca pierdas la oportunidad de usar un escaneo :)
solicita una cadena de "dígitos" y luego
n
gracias @ Adám por decirme cómo habilitar
]box
en TIOfuente
Python 2, 56 bytes
n
es la longitud máxima ys
se espera que sea una lista de caracteres. No me queda claro si n = 0 o una lista de caracteres vacía son entradas válidas, pero esta función también las maneja correctamente.fuente
J, 41 char
fuente
APL (31)
Uso: el argumento izquierdo es la cadena y el argumento derecho es el número, así:
La salida está ordenada por longitud, pero dentro de los grupos de longitud se desplazan uno a la izquierda, esto fue más fácil.
Explicación:
,/⍺∘{
...}¨⍳⍵
: para 1..⍵, aplique la función a ⍺ y combine los resultados.(⍵⍴⍴⍺)⊤⍳⍵*⍨⍴⍺
: para cada número de 1 a (⍵ = (longitud actual)) ^ (⍴⍺ = (cantidad de caracteres)), convierta a base ⍴⍺ usando ⍵ dígitos.1+
: agrega uno porque las matrices están indexadas en 1.⍺[
...]
: utilícelos como índices en la cadena↓⍉
: gire la matriz, de modo que los 'números' estén en las filas en lugar de en las columnas, y luego divida la matriz en filas.fuente
?!/\-+*~&=,.|
y probablemente un poco más. Existen codificaciones APL de un solo byte, pero Unicode es más fácil de usar.Haskell, 34 personajes
Uso directo de la lista mónada. El único golf real es el uso de, en
mapM
lugar del más idiomático (y más corto)replicateM
que requeriría importaciónControl.Monad
.Uso
fuente
Python,
9794t=t+[s]
no se puede acortar at+=[s]
porque L y t estarían apuntando a la misma lista.Entrada:
'ab', 3
Salida:
fuente
Mathematica
29 1928Uso
fuente
MATL,
98 bytesPruébalo en MATL Online!
(MATL se creó después de publicar este desafío, pero creo que está bien por meta consenso en estos días).
(-1 bytes gracias a @Luis Mendo.)
x
- Eliminar la entrada de cadena de la pila (la copia automáticamente al portapapeles G):"
- entrada implícita del número n, bucle de 1 a n1G
- pegue la cadena de entrada del portapapeles G en la pila@
- empujar el índice de iteración de bucle actualZ^
- poder cartesiano: producto cartesiano de entrada consigo mismo@
número de vecesLos resultados del poder cartesiano (
@
"números" de dígitos en la base dada) se acumulan en la pila y se muestran implícitamente al final.fuente
x:"1G@Z^
Python - 106
La solución sencilla y poco creativa. Si encuentra mejoras significativas, publique como respuesta por separado.
Entrada:
"ab",3
Salida:
fuente
Python, 100
Derivado de la solución de @ aditsu .
Entrada:
'ab', 3
Salida:
fuente
Perl 5 +
-nlF -M5.010 -MList::Util+(uniq)
, 41 bytesPruébalo en línea!
-1 byte gracias a @Xcali !
fuente
Pyth, 6 bytes
Espera el conjunto de caracteres como primera entrada, número de dígitos como segunda. Se podría guardar un byte si hubiera un método de un solo byte para acceder repetidamente a la segunda entrada, pero por desgracia ...
Pruébelo en línea aquí .
fuente
Perl 6 , 33 bytes
Pruébalo en línea!
Bloque de código anónimo que toma una cadena y un número y devuelve una lista de cadenas.
fuente
PHP 180
No tengo idea ... me siento flojo.
fuente
Erlang 110
La versión del combinador Y (para shell):
fuente
Erlang 89 (118)
Versión del módulo:
Caracteres contados sin contabilidad obligatoria (módulo y exportación).
fuente
Ruby , 73 bytes
Pruébalo en línea!
fuente
Japt , 9 bytes
Explicaciones a seguir.
Intentalo
Intentalo
fuente
Jalea , 6 bytes
Pruébalo en línea!
Envío de funciones, tomando la lista de dígitos como primer argumento y el número de dígitos como segundo. Los dígitos en sí pueden ser cualquiera de los tipos de datos de Jelly, pero utilicé números enteros en el enlace TIO anterior porque produce la salida más atractiva en el contenedor automático "función → programa completo" de Jelly.
Explicación
El producto cartesiano nos da efectivamente todos los números con un número determinado de dígitos (según el prefijo con el que estamos trabajando). Así que terminamos con una lista de listas de combinaciones (agrupados por longitud), y se puede acoplar un nivel que con el fin de obtener una lista que no está agrupado (pero que sigue siendo solucionado por la longitud, ya que la cuestión requiere, como
Ẏ
doesn No cambie el orden relativo de los elementos eƤ
intente prefijos más cortos primero).fuente
05AB1E , 6 bytes
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
Alternativa de 6 bytes:
NOTA: Salida flexible: genera una nueva lista para cada longitud, todo en la misma línea de impresión.
Convertirlo en una sola lista sería 2 bytes más largo:
Lv²yã`})
( Pruébelo en línea ).Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
K (ngn / k) , 17 bytes
Pruébalo en línea!
fuente