Se proporciona una colección de coordenadas N dimensionales. A continuación se muestra un ejemplo:
{2,3,4}
Esto puede considerarse como una matriz tridimensional con 2x, 3y y 4z; Puede haber cualquier cantidad de dimensiones. En el ejemplo, hay 24 nodos totales. Cada nodo puede indexarse usando {x, y, z}. Para acceder al quinto nodo, los índices proporcionados serían {0, 1, 0} según la tabla a continuación.
## | x y z
0 1 2
-----------
0 | 0 0 0
1 | 0 0 1
2 | 0 0 2
3 | 0 0 3
4 | 0 1 0
5 | 0 1 1
6 | 0 1 2
7 | 0 1 3
8 | 0 2 0
...
23 | 1 2 3
El propósito de esta aplicación es trabajar hacia atrás para determinar un índice si se le da un número de nodo.
Si se le solicita el índice "y" del octavo nodo, el programa debe imprimir "2".
Con la siguiente entrada proporcionada:
{2,3,4}|8|1
<List of Coordinates>|<Node>|<Index>
Se debe imprimir lo siguiente:
2
Puede suponer que la entrada se proporcionará de manera conveniente en el idioma de su elección y no requiere verificación de límites. Por ejemplo, puede suponer que el índice de elección proporcionado ("y" en el ejemplo) es válido con respecto a las coordenadas proporcionadas. Puede usar 0 o 1 indexación basada; el ejemplo supone 0 basado.
Esto es una especie de reverso de esta pregunta: índice de una matriz multidimensional
fuente
Respuestas:
MATL , 8 bytes
Esto usa indexación basada en 1 para el nodo y para las dimensiones. Entonces los primeros nodos son
1
,2
etc; y la dimensión "x" es1
, "y" es2
etc.Pruébalo en línea!
Explicación
La clave es utilizar la función
X[
(correspondiente aind2sub
Matlab u Octave), que convierte un índice lineal en índices multidimensionales. Sin embargo, el orden de las dimensiones si es lo opuesto a lo definido en el desafío, entoncesP
(flip
) es necesario antes de llamar a la función, y nuevamente después de concatenar (v
) sus salidas.fuente
Haskell , 45 bytes
(#)
toma tres argumentos y devuelve un entero, se usa como[2,3,4]#8$1
.Pruébalo en línea!
Cómo funciona
l
es la lista de coordenadas,n
el número de nodo.l#n
es una función que toma el índice finali
.[2,3,4]
y nodo8
, primero se toma la cola de la lista, dando[3,4]
. Entonces esto sescan
nifica desde el ightr
,div
identificando el número de nodo por cada elemento consecutivamente, dando la lista[0,2,8]
.[0,2,8]
y el originall=[2,3,4]
sonzip
pedwith
elmod
operador ulus, dando[0,2,0]
.!!
operador de indexación de lista se aplica parcialmente, con la función resultante lista para recibir el índice final.fuente
APL (Dyalog Classic) , 5 bytes
No, no te falta una fuente. Así es como se supone que debe verse.
Este es un programa REPL que toma información de STDIN: el número de nodo, las dimensiones y el índice (en ese orden). Este último puede estar basado en 0 o 1, dependiendo del valor de
⎕IO
.Pruébalo en línea!
Cómo funciona
La indexación de matriz multidimensional es esencialmente una conversión de base mixta, al igual
⊤
que lo que pide la primera parte del desafío. Cada aparición de⎕
lee y evalúa una línea de STDIN, por lo queFinalmente,
⌷
toma el elemento en el índice especificado. El extremo izquierdo⎕
lee la tercera y última entrada de STDIN yfuente
Haskell,
38302928 bytesUtiliza índices y coordenadas basados en 0 a partir de 1. ¡ Pruébelo en línea!
Convierta cada dimensión
x
de la entrada en una lista[1..x]
, por ejemplo,[2,3,4]
->[[1,2],[1,2,3],[1,2,3,4]]
.mapM
hace una lista de todas las n-tuplas posibles donde se toma el primer elemento de la primera lista, etc. Dos veces!!
para indexar la n-tupla y la dimensión.Editar: @ Ørjan Johansen guardó
89 bytes. ¡Gracias!fuente
mapM id.map f=mapM f
. Y(`take`[0..])
es más corto.l#n=(mapM(`take`[0..])l!!n!!)
es más corto. (Por cierto que no era necesario elf=
, las funciones pueden ser anónimas Oh, supongo que no se está contando..)f=
fue un error de copiar y pegar de TIO.Brachylog ,
2523 bytesPruébalo en línea!
El segundo argumento está indexado en 1, los otros 2 están indexados en 0.
Explicación
fuente
Mathematica,
2623 bytesUso de indexación basada en 1 para entrada e indexación basada en 0 para salida.
¿Por qué
Or
? Porque es la función incorporada más corta con el atributoFlat
.Ejemplo:
fuente
APL (Dyalog) , 6 bytes
Para obtener una indexación basada en 0
⎕IO←0
, que es predeterminada en muchos sistemas. Solicita dimensiones, luego lista adjunta de (nodo, coordenada).Pruébalo en línea!
⎕
solicitud de dimensiones⍳
generar una matriz de esa forma con cada elemento siendo los i ndices de ese elemento,
ravel (incluir en la lista de índices)↑
convertir un nivel de profundidad a un nivel adicional de rango⎕⊃
solicite la lista adjunta de (nodo, coordenada) y úsela para elegir un elemento de esefuente
Gelatina ,
76 bytesPruébalo en línea!
Esto utiliza la indexación 1 para entrada y salida.
Cómo funciona
fuente
Octava , 63 bytes
Puerto de mi respuesta MATL.
Pruébalo en línea!
fuente
Pyth , 12 bytes
Pruébalo en línea!
Cómo funciona
fuente
R, 52 bytes
devuelve una función anónima, 1 indexada.
Por el ejemplo.
expand.grid
genera la lista, pero el primer argumento varía el más rápido, por lo que tenemos que introducirlos en el orden inverso, es decir,z,y,x
. Luego podemos simplemente indexar[n,4-i]
, donde4-i
sea necesario para el orden inverso, y restar 1 para asegurarnos de que se ejecutan0:(x-1)
, etc.Pruébalo en línea!
fuente
Java , 77 bytes
Pruébalo en línea!
fuente
JavaScript (ES6), 44 bytes
Sin golf:
Lamentablemente
reduce
son dos bytes más largos:fuente
Python 3 , 57 bytes
Pruébalo en línea!
Tenedor de mi respuesta Java .
fuente