Escriba un programa o función que, dado un número entero n
, construya una matriz con n
dimensiones de n
longitud, donde cada elemento es un identificador de sus propias coordenadas. Es decir, comenzando con una matriz, llénela con n
matrices, donde cada una de ellas contiene n
más matrices, hasta una profundidad de n-1
. Los elementos de las matrices más profundas son las coordenadas que describen dónde están en la matriz completa.
Algunos ejemplos en caso de que mi explicación fuera confusa.
n = 1
["1"]
n = 2
[
["11", "12"],
["21", "22"]
]
n = 3
[
[
["111","112","113"],
["121","122","123"],
["131","132","133"]
],
[
["211","212","213"],
["221","222","223"],
["231","232","233"]
],
[
["311","312","313"],
["321","322","323"],
["331","332","333"]
]
]
Aquí, "321" significa que es el primer elemento del segundo elemento de la tercera matriz.
Reglas:
- Las coordenadas y la dimensión (
n
) pueden ser 0 o 1 indexadas - Puede suponer que
n
tiene un solo dígito, debajo de 10 para ambas opciones de indexación para evitar salidas ambiguas - IO es flexible.
- En particular, las coordenadas pueden ser matrices, cadenas, etc., siempre que estén claras. "321" => [3,2,1]
- La salida puede ser enteros en base 10 con o sin ceros a la izquierda.
- Las coordenadas pueden estar en orden inverso si lo desea, siempre que sea coherente. "321" => "123"
- La salida no necesariamente tiene que ser una estructura de matriz en su idioma. Siempre y cuando haya claros marcadores distintos para el inicio de una matriz, el final de una matriz y para separar elementos.
- La salida
n=1
puede ser solo 1 - Si su salida es atípica, asegúrese de explicar el formato.
- Este es el código de golf, por lo que gana la solución más corta en cada idioma.
data L a = L [L a] | E a
.Int -> [String]
oInt -> [[String]]
etc., dependiendo de cuál sea la entradaRespuestas:
Dyalog APL ,
53 bytes-2 bytes gracias a FrownyFrog
Pruébalo en línea!
⍳
da todos los índices dados la forma de una matriz. por ejemplo, 2 3 .⍴
da nueva forma al argumento derecho para que tenga el tamaño del argumento izquierdo.⍨
hace que ambos sean el argumento correcto.fuente
Python 3 , 56 bytes
Pruébalo en línea!
El Sr. Xcoder guardó 2 bytes cambiando a Python 3 para desempacar con estrellas.
fuente
f=lambda n,*l:len(l)//n*l or[f(n,*l,k)for k in range(n)]
funciona para 56 bytes.Wolfram Language (Mathematica) ,
3222 bytes-10 bytes gracias a @alephalpha
Pruébalo en línea!
fuente
J , 18 bytes
Pruébalo en línea!
Solución iterativa, sin producto cartesiano incorporado. Así es como se ve el pico J.
fuente
Jalea ,
87 bytesPruébalo en línea!
Explicación
Use el argumento 2 como ejemplo.
Si
¡
no variara, es el argumento correcto sobre las iteraciones para díadas, entonces esto sería 4 bytes:ṗs³¡
fuente
1
es válida?J, 13 bytes
Pruébalo en línea!
Es interesante que esto sea mucho más largo que la respuesta APL (aunque esa puede ser mi incapacidad para ver una mejor traducción)
explicación
fuente
#.inv
es muy inteligente, +1.MATLAB,
928955 bytesTengo una respuesta diferente al volver a leer las reglas del desafío, pero dejaré el intento anterior a continuación, ya que es diferente y aún divertido de ver.
Explicación
Esto genera una matriz n-dimensional de cadenas que están indexadas en 0.
Respuesta anterior (89 bytes)
Mi primer golf! Es probable que esto se reduzca más, pero pensé en publicar lo que tengo.
Explicación
Salidas x al final para dar solución
Similar a la otra publicación de MATLAB, la salida es una matriz n-dimensional, excepto que usa números para mostrar las coordenadas. Funciona para cualquier valor, aunque debido a que los bucles son malos en MATLAB, comienza a disminuir significativamente alrededor de n = 8.
Editar: -2 bytes gracias a Luis Mendo. También se eliminó el punto y coma final para imprimir la salida.
fuente
length
pornnz
guardar algunos bytes. Además, según las reglas PPCG, el código tiene que producir una salida real, generalmente mostrándola en STDOUT (no es suficiente tener la salida almacenada en una variable), o debe ser una función que devuelva la salidaRust ,
201176167166154 bytesPruébalo en línea!
El tipo de salida es un tipo de suma con dos variantes, ya que el idioma está estrictamente escrito. Puede ser
L
, que es un tipo de lista que contiene este tipo de suma oS
que es un tipo de resultado (una cadena). El resultado puede verse así.Además, formateado usando
rustfmt
:fuente
R , 102 bytes
Pruébalo en línea!
which
indexación de matricesfuente
which
es lo que estaba buscando, ¡gracias! 9 bytesJava 10, 144 bytes
La solución es el método
f
. Produce una representación de cadena de la matriz.Pruébalo en línea
Sin golf
Expresiones de gratitud
fuente
Object[]
convar
. Además, creo que esteelse
bloque es innecesario, como lo has hechoreturn
en elif
bloque.05AB1E , 7 bytes
Pruébalo en línea!
Explicación
fuente
JavaScript (Node.js) ,
626058 bytesPruébalo en línea! La salida está indexada en 0. Editar: Guardado 2 bytes gracias a @JoKing y otros 2 bytes gracias a @Arnauld.
fuente
MATLAB,
116108104 bytesSiento que debe haber una forma más corta de hacer esto, dada la afinidad de MATLAB hacia las matrices multidimensionales ... Gracias a Luis por los 4 bytes de alguna entrega corta
Explicación
La salida es una matriz de celdas n-dimensionales, donde cada elemento es una matriz de los valores de coordenadas. Funciona para cualquier persona
n
sin ambigüedad debido a la salida de la matriz numérica, ¡siempre que unan^(n+1)
matriz de elementos se pueda almacenar en la RAM!fuente
Carbón , 26 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Entrada
n
.Genere todos los
nⁿ
n
números de dígitos en la basen
.Dividirlos
n
en unan
matriz dimensional donde cada dimensión es de tamañon
.Imprime la matriz. El formato de salida predeterminado es cada elemento en su propia línea, luego cada bloque de
n
líneas termina con una línea en blanco, luego cada bloque den
bloques den
líneas termina con una segunda línea en blanco, y así sucesivamente hastan-1
las líneas en blanco en el nivel superior .fuente
Jalea , 7 bytes
Pruébalo en línea!
fuente