O Doutor, ao tentar escapar das forças de Dalek, decidiu enviá-las girando, viajando em vários bolsos de espaço em um movimento espiral.
Dependendo da natureza do espaço-tempo disponível, o médico precisa entrar no TARDIS controla a altura e a largura da seção do espaço e seu ponto de entrada com o qual iniciar a espiral.
A seção do espaço pode ser vista como uma grade h x w preenchida com números inteiros seqüenciais da esquerda para a direita, de cima para baixo, começando com 1.
A posição inicial é fornecida como rc para a linha e coluna ... A partir disso, o software da TARDIS precisa citar a lista ordenada de números inteiros obtida em espiral para fora no sentido anti-horário a partir da linha r coluna c , começando para cima ...
Sua tarefa, como acompanhante do médico, é programar o TARDIS para receber quatro números no formato height width row column
e determinar qual setor de espaço o TARDIS precisa percorrer para coincidir com o movimento espiral descrito abaixo ...
Entrada 1
5 5 3 3
(Grade 5 x 5, começando na posição 3,3)
Saída 1
13 8 7 12 17 18 19 14 9 4 3 2 1 6 11 16 21 22 23 24 25 20 15 10 5
Explicando a saída
Grade original
Espiral gerada
Entrada 2
2 4 1 2
(Grade 2 x 4 começando na posição 1,2)
Saída 2
2 1 5 6 7 3 8 4
Explicando a saída
Um pouco diferente da espiral agora deve circular ao redor da grade para gerar a saída respectiva ...
Grade original
Espiral gerada
Regras:
Esse é o código-golfe, portanto, o menor tamanho do código é aprovado.
Os exemplos acima devem ser usados para testar seu código. Se não fornecer a respectiva saída, há algo errado ...
As versões de código para golfe e para golfe devem ser fornecidas em sua resposta ...
Boa sorte!
Respostas:
JavaScript (ES6) 124
163 177Editar Forma totalmente diferente, sem necessidade de uma matriz para armazenar células visitadas. Usando o fato de que o lado da espiral aumenta 1 a cada 2 turnos.
fonte
Python 3, 191
Provavelmente não é uma ótima pontuação, mas aqui vai:
Nós nos movemos ao longo da espiral aumentando o comprimento do lado após cada segundo turno. Se nossa posição estiver dentro da grade especificada, imprimimos seu número correspondente.
As variáveis são:
fonte