Contexto
Considere las matrices cuadradas con n
columnas y filas que contienen los primeros enteros positivos n^2
(es decir, al n
cuadrado), donde n
es impar. Los elementos de las matrices están dispuestas de tal manera que los números enteros 1
a través n^2
son colocados secuencialmente en una espiral hacia la izquierda comenzando en el centro y moviendo inicialmente a la izquierda. Llama a estas matricesM(n)
Para n=1
esto simplemente da la matriz de un elemento M(1)=[[1]]
.
M(3)
es la matriz
9 8 7
2 1 6
3 4 5
M(5)
es la matriz
25 24 23 22 21
10 9 8 7 20
11 2 1 6 19
12 3 4 5 18
13 14 15 16 17
y M(7)
es la matriz
49 48 47 46 45 44 43
26 25 24 23 22 21 42
27 10 9 8 7 20 41
28 11 2 1 6 19 40
29 12 3 4 5 18 39
30 13 14 15 16 17 38
31 32 33 34 35 36 37
Ahora considere aplanar esta matriz en una lista / matriz concatenando sus filas comenzando desde la parte superior y bajando. Llama a estas listas L(n)
. L(3)
, L(5)
y L(7)
se representan a continuación, con sus elementos delimitados por espacios.
9 8 7 2 1 6 3 4 5 (n=3)
25 24 23 22 21 10 9 8 7 20 11 2 1 6 19 12 3 4 5 18 13 14 15 16 17 (n=5)
49 48 47 46 45 44 43 26 25 24 23 22 21 42 27 10 9 8 7 20 41 28 11 2 1 6 19 40 29 12 3 4 5 18 39 30 13 14 15 16 17 38 31 32 33 34 35 36 37 (n=7)
Podemos encontrar el índice i(n)
de L(n)
en una lista ordenada lexicográficamente de permutaciones de L(n)
. En Jelly, el Œ¿
átomo da este índice para la lista en la que actúa.
Desafío
Su desafío es tomar un entero impar positivo n
como entrada y salida del índice i(n)
.
Los primeros pocos valores son
n i(n)
-------
1 1
3 362299
5 15511208759089364438087641
7 608281864033718930841258106553056047013696596030153750700912081
Tenga en cuenta que i(n)
~ = (n^2)!
. Esto no está en OEIS.
Este es el código de golf por idioma, así que consiga esto en la menor cantidad de bytes posible.
fuente
[:A.@,,.@*0&((,~(#\.+{:)@{.)@|:|.)~2*<:
. También jugué una versión del método en el artículo de voluta a 38 bytes[:A.@/:_1+/\@|.(2#1+i.)#&}:+:$_1,],1,-
.Jalea , 27 bytes
Pruébalo en línea!
fuente
MATL ,
161514 bytesFalla en casos de prueba mayores que
3
debido a imprecisiones de punto flotante y limitaciones de memoria.Pruébalo en línea!
Explicación
fuente