Contexto
Considere matrizes quadradas com n
colunas e linhas contendo os primeiros inteiros positivos n^2
(isto é, n
ao quadrado), onde n
é ímpar. Os elementos das matrizes estão dispostos de tal modo que os números inteiros 1
através n^2
são colocados sequencialmente num sentido anti-horário em espiral a partir do centro e inicialmente mover-se para a esquerda. Chame essas matrizesM(n)
Pois n=1
isso simplesmente fornece a matriz de um elemento M(1)=[[1]]
.
M(3)
é a matriz
9 8 7
2 1 6
3 4 5
M(5)
é a 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
e M(7)
é a 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
Agora considere achatar essa matriz em uma lista / matriz concatenando suas linhas começando do topo e descendo. Ligue para essas listas L(n)
. L(3)
, L(5)
e L(7)
são representados abaixo, com seus elementos delimitados por espaços.
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 o índice i(n)
de L(n)
em uma lista lexicograficamente classificada de permutações de L(n)
. Em Jelly, o Œ¿
átomo fornece esse índice para a lista em que atua.
Desafio
Seu desafio é pegar um número inteiro ímpar positivo n
como entrada e gerar o índice i(n)
.
Os primeiros valores são
n i(n)
-------
1 1
3 362299
5 15511208759089364438087641
7 608281864033718930841258106553056047013696596030153750700912081
Note que i(n)
~ = (n^2)!
. Isso não está no OEIS.
Esse é o código golf por idioma, portanto, faça isso no menor número de bytes possível.
fonte
[:A.@,,.@*0&((,~(#\.+{:)@{.)@|:|.)~2*<:
. Também joguei uma versão do método no artigo de voluta para 38 bytes[:A.@/:_1+/\@|.(2#1+i.)#&}:+:$_1,],1,-
.Gelatina , 27 bytes
Experimente online!
fonte
MATL ,
161514 bytesFalha em casos de teste maiores que
3
devido a imprecisões de ponto flutuante e limitações de memória.Experimente online!
Explicação
fonte