ESPECIFICACIÓN
Dadas m
las variables, crean todas las combinaciones hasta el fin n
. Por ejemplo,
El resultado de mapear dos variables ( a
y b
) por orden 1
sería:
- una
- si
- ab
El resultado de mapear dos variables ( a
y b
) por orden 2
sería:
- una
- un 2
- si
- b 2
- ab
- a 2 b
- ab 2
- a 2 b 2
El resultado de mapear dos variables ( a
y b
) por orden 3
sería:
- una
- un 2
- un 3
- si
- b 2
- b 3
- ab
- a 2 b
- a 3 b
- a 3 b 2
- ab 2
- ab 3
- a 2 b 3
- a 2 b 2
- a 3 b 3
La salida de la cartografía de tres variables ( a
, b
y c
) a la orden 1
sería:
- una
- si
- C
- ab
- antes de Cristo
- C.A
- a B C
La salida de las m
variables de mapeo a pedido n
sería:
- etc.
CRITERIOS GANADORES
Imprima todas las combinaciones posibles como se describe anteriormente. El orden no importa. No importa en qué parte del código imprima en la pantalla. Lo único que importa es que lo que aparece en su salida es correcto.
^
?m
es mayor que 26? ¿Tenemos que apoyar valores tan altos?given m variables
implica que se dará una lista de variables. Si solo se da el número de variables y 0,1,2,3..27,28,29 elevado a las potencias ^ 0, ^ 1, ^ 2, etc. es un resultado aceptable (como infiero de su último comentario) Cosas más fáciles.Respuestas:
Brachylog , 6 bytes
Toma la entrada como un par, que contiene la lista de variables y el orden. La salida es una lista de listas de variables, donde las potencias están representadas por variables repetidas. (por ejemplo, "a²b" es ["a", "a", "b"])
Pruébalo en línea!
j₎
une la primera entrada consigo mismo tantas veces como lo indique la segunda entrada.o
ordena la lista obtenida y luego⊇ᵘ
encuentra todos los subconjuntos únicos de esa lista ordenada. Finalmente, eliminamos el primer elemento conb
, ya que esta siempre será la respuesta vacía, que el desafío no contempla.fuente
L A T E X, 354 bytes
Cuando vi esto, supe que tenía que hacerse en Latex. Las ecuaciones se ven tan nítidas y limpias en Latex y no puedo soportar usarlas
^
para obtener potencia.Explicación
Hay tres fuerzas principales en el trabajo aquí,
\typein
que es lo que nos permite tomar datos de la línea de comandos, elintcalc
paquete que es lo que nos permite hacer cálculos con nuestras variables y elequation
entorno Latex .Una vez que hemos recibido la entrada, comenzamos un ciclo de
\intcalcPow{\b+1}{\a}
tiempo de ciclo , una vez para cada resultado que queremos imprimir. Cada ciclo comenzamos unequation
entorno y recorremos el alfabeto siguiendo\y
la letra actual y\i
el número actual de ejecuciones. Si\i
es mayor o igual\a
que no imprimimos nada (de acuerdo con las especificaciones, esto no es estrictamente necesario, sin embargo, Latex se desbordará para valores mayores que 1 si no hacemos esto). Luego imprimimos\y
a nuestra ecuación y la elevamos al poder deTodo ese desastre simplemente significa tomar el
\i
dígito th de\x
in base\b+1
. Esto asegura que los poderes se decodifiquen correctamente.Salida de ejemplo:
Aquí está la salida para 3, 2
fuente
Mathematica,
5150 bytesAsume que "
m
variables dadas " significa que la primera entrada es una lista de variables.Si la primera entrada es un entero, 69 bytes
Las variables están en la forma
$<integer>
(por ejemplo$5
)fuente
PowerRange
es una cosa! Estoy de acuerdo con la interpretación de su primera presentación por ciertoHaskell,
71585453 bytesDevuelve una lista de cadenas y utiliza el formato de salida
"aabbb"
para"a^2 b^3"
.Ejemplo de uso:
3 # "ab"
->["b","bb","bbb","a","ab","abb","abbb","aa","aab","aabb","aabbb","aaa","aaab","aaabb","aaabbb"]
. Pruébalo en línea! .Se gastan muchos bytes para el formato de salida. Una salida más flexible, por ejemplo, pares de (variable, potencia) ->
[('a',2),('b',3),('c',1)]
para"a^2 b^3 c^1"
ahorraría mucho.Cómo funciona
Con la máxima flexibilidad, es decir, formato de salida como pares (variable, potencia) e incluyendo potencias cero (
"a^0 b^0 c^0"
) se reduce aHaskell, 25 bytes:
Ejemplo de uso
f 2 "ab"
:Dejar caer a cero todos los poderes cuesta 5 bytes para un total de 30:
f n=tail.mapM((<$>[0..n]).(,))
.fuente
[('a',0),('b',0)]
no debería estar en la salida ...a^0 b^0
cuesta 5 bytes. Agregaré otra nota.Jalea ,
2017 bytesUn enlace diádica (función) que acepta una lista de nombres de variables * y el orden máximo (un entero) y devuelve una lista donde cada entrada es una representación completamente expandido de la multiplicación (por ejemplo foo 0 bar 3 BOF 2 habría
['bar', 'bar', 'bar', 'bof', 'bof']
.* los nombres de las variables pueden ser una cadena de caracteres únicos (las cadenas se convierten en listas de caracteres).
Pruébalo en línea! - el pie de página llama al enlace como una diada y luego separa la lista resultante de listas por avances de línea y cada entrada por espacios para facilitar la lectura.
Nota: incluye el pedido 0 (producto vacío) una cola
Ḋ
, se puede insertar aquí...ŒPḊç...
para evitar eso.¿Cómo?
Versión de 13 bytes que solo funcionará para una sola cadena de caracteres únicos (o una lista de caracteres únicos):
intentalo
fuente
JavaScript (propuesta ES), 142 bytes
Requiere un navegador con ambos
**
ypadStart
soporte, así que prueba Firefox 52 o Chrome 57.fuente
Mathematica 100 bytes
¡Seguramente hay una manera más eficiente de lograr esto!
Dos variables para ordenar 4:
fuente
Bash + sed, 60
Un enfoque diferente y más corto a mi respuesta anterior.
Entrada como parámetros de línea de comandos:
m
se proporciona como una lista separada por comas de nombres de variables yn
como un entero:Pruébalo en línea .
Respuesta previa:
Bash + coreutils, 91
Bienvenido al infierno eval-escape-brace. A veces, el script de shell realmente proporciona la herramienta adecuada para el trabajo. Esto no es el caso aquí, pero funciona.
La entrada como parámetros de línea de comandos
m
se proporciona como una lista separada por comas de nombres de variables yn
como un entero. La salida se escribe a mano, por ejemplo, ena^2
realidad se escribeaa
. Esto es aceptable según este comentario .Puede haber formas más cortas de hacer esto.
Pruébalo en línea .
Explicación
printf -vc {%$[$2-1]s}
asigna la variablec
a una cadena como{ }
, donde el número de espacios es el ordenn
- 1, entonces sin
= 1, el resultado es{}
, sin
= 2, el resultado es{ }
, etc.${a[$1]}
usam
como índice para la matriza
, por lo que sim
es 3, entonces el resultado esc
\{{a..${a[$1]}}${c// /,}\\,}
es una expansión de llaves múltiples:\{
- un literal{
{$1}
es a es la expansión de llaves de la listam
, por ejemplo{a,b,c}
oa b c
${c// /,}
reemplaza los espacios$c
con comas, por ejemplo,{,,}
forn
= 3, que también es una expansión de llaves que repite efectivamente cada elemento de{a..c}
n
veces\\\,}
- un literal,}
m
= "a, b" yn
= 2, esto se expande a{a,} {a,} {b,} {b,}
printf
elimina los espacios para dar{a,}{a,}{b,}{b,}
, lo que en sí mismo es una expansión de llavesaabb aab aab aa abb ab ab a abb ab ab a bb b b
printf
pone cada uno de estos elementos en su propia línea.sort -u
elimina los duplicadostr -d {}
está allí para manejar el caso cuandon
= 1. En este caso, la variablec
será la{}
que no es una expansión de llaves, sino que se insertan los caracteres literales. El lostr
quita.eval
sy\
escapes se colocan con mucho cuidado para garantizar que todas las expansiones se produzcan en el orden necesario.fuente
Röda ,
494846 bytesPruébalo en línea!
Creo que es correcto No utiliza ningún separador entre una variable y su orden. La versión anterior utilizada
!
, pero me di cuenta de que no es estrictamente necesario.Explicado:
fuente
Python, 112 bytes
Uso:
Salida:
Formato más agradable en 115 bytes :
Salida (mismo uso):
Aún mejor en 125 bytes :
Salida:
Los últimos 4 bytes (
[1:]
) en total son para eliminar el producto vacío.Estos funcionan tanto en Python 2 como en 3.
fuente
C ++ 14,
146140 bytes-6 bytes para un formato de salida más simple.
Lambda sin nombre, suponiendo entradas
s
comostd::string
yo
comostd::ostream
:Uso y explicación:
Salida:
fuente