Os números devem ser impressos com zeros à esquerda em um campo com comprimento = (número de dígitos de N ^ 2).
Entrada (N):
4
Resultado:
01 12 11 10
02 13 16 09
03 14 15 08
04 05 06 07
Estou interessado no algoritmo e na limpeza da implementação. Portanto, o espaço em branco não conta e o limite superior para N é 42.
atomic-code-golf
Hristo Hristov
fonte
fonte
L = floor(log10(N^2)) + 1
correto?N
?Respostas:
Pitão
Outros testes
fonte
Em Ruby:
Teste:
Uma outra solução usando cálculos daqui :
Teste:
fonte
No Python3:
Saída de amostra para 7:
editar: Uma solução recursiva - 263 bytes
fonte
Solução Java
saída de amostra para entrada 10
fonte
Perl, 178 caracteres
Usa Math :: Complex e mantém a direção atual em uma variável complexa (1 / i / -1 / .i). Correr com:
Coloque
N
no$l
.fonte
C
fonte
Python 2.7:
fonte
PHP, 272 caracteres incluindo comentário
Versão recursiva baseada em Func - mais interessante para mim, pois expressa melhor a intenção. Também funciona para largura e altura distintas.
Resultado:
fonte
C #, 380-ish jogado
Eu não me incomodei em colar na versão de golfe, pois estava bastante confiante de que isso não quebraria recordes. Mas eu queria tentar pensar um pouco diferente. Em vez de escrever cada linha ou posição à medida que chego a ela, estou movendo o cursor para a posição, escrevendo o número do centro inicial e saindo em espiral a partir daí (que ilustrou um padrão interessante de posições a serem movidas por mudança de direção )
Há uma quantidade razoável de espaço de caracteres desperdiçado, fazendo com que o buffer do console aceite os valores maiores, além de calcular a posição do canto superior esquerdo (o que, com certeza, pode ser melhorado).
De qualquer forma, foi um exercício interessante.
fonte
Rubi
Esta não é uma solução de golfe particularmente boa, mas pode ser de interesse algorítmico.
Eu sempre fui fascinado por um problema semelhante , a saber, encontrar o caminho espiral no sentido horário através de uma matriz NxM. Uma maneira realmente intuitiva de resolver esse problema é continuar girando a matriz no sentido anti-horário e descascando-a como uma laranja. Eu uso um método semelhante - embora não tão elegante - para fazer o inverso:
fonte
Raquete
Só queria experimentá-lo com uma solução usando quase 0 de memória. Sem matriz, sem nada. O valor pode ser gerado para qualquer posição a qualquer momento. Poderíamos pedir uma espiral de qualquer tamanho (se o que receber o fluxo de saída puder lidar com isso). Na esperança de que alguém precise de espirais gigantescas.
Aqui está o código
Testando com este
Resultados na saída
Bastante intensidade de CPU em comparação com matrizes pré-calculadas, se você precisar de toda a espiral, mas pode ser útil. Quem sabe! Por exemplo:
Não jogou golfe ... É bem pequeno, apesar da aparência. Eu usei nomes longos e comentários.
fonte
Python 2 , 800 bytes
Experimente online!
Alguns anos atrás, um amigo meu fez essa pergunta em uma entrevista. Eles me falaram sobre isso no jantar de Ação de Graças da nossa família, então penso nisso como o "problema do Dia de Ação de Graças".
fonte
PHP,
172171 + 1 bytes, 24 operaçõescria uma matriz percorrendo os índices através de uma espiral; depois imprime o resultado.
Execute como pipe
-nR
ou experimente online .Adicione uma atribuição para salvar cinco bytes: substitua o loop final por
fonte
Código de exemplo: isso funciona para 4x5, mas falha em 3x5
while (k <m && l <n) {/ * Imprime a primeira linha das linhas restantes * / para (i = l; i <n; ++ i) {printf ("% d", a [k] [ Eu]); } k ++;
fonte