Você recebe inteiros N
e M
, 1 <= N,M <= 10^6
e índices i
e j
. Seu trabalho é encontrar o número inteiro na posição [i][j]
. A sequência é assim (pois N=M=5, i=1, j=3
o resultado é 23
):
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
O menor código vence. Boa sorte!
i=j=0
e continua naj=0
direção.Respostas:
Mathematica,
6355 bytesIsso define uma função
g
que pode ser chamada comoEstou usando uma abordagem recursiva. Ele usa até 2 (N + M) iterações, dependendo de quão baixo da espiral o resultado é encontrado. Ele lida com todas as entradas (até
g[10^6,10^6,5^5-1,5^5]
, o que requer mais iterações) em alguns segundos, mas para entradas maiores, você precisará aumentar o limite de iteração padrão, comoBasicamente, se
k
é o número inicial da espiral, estou verificando se oj
índice está0
, nesse caso, posso apenas retornark + i
. Caso contrário, jogo fora a linha superior, giro a espiral em 90 graus (no sentido anti-horário), incremento dek
acordo e olho a espiral restante. Podemos passar para a próxima espiral com o seguinte mapeamento de parâmetros:Isso pressupõe que M é a largura e N é a altura.
fonte
If[#5<1,#+#4,#0[#+#2,#3-1,#2,#5-1,#2-1-#4]]&[1,##]&
Pitão, 25 bytes
Isso define uma função
(
,. Exemplo de uso:impressões
23
.Isso é algoritmicamente idêntico à resposta do Mathematica de Martin Büttner, embora tenha sido desenvolvida de forma independente. Até onde eu sei, essa é a única maneira de fazê-lo.
Observe que o Pyth não pode lidar com toda a faixa de entrada da minha máquina, ele sobrecarregará a pilha e morrerá com um segfault em entradas grandes.
fonte
Haskell, 44
isso usa a abordagem recursiva regular
fonte