Dado um número de entrada positivo n
, construa uma espiral de números de 1
para n^2
, com 1
no canto superior esquerdo, espiralando para dentro no sentido horário. Pegue a soma das diagonais (se n
for ímpar, o número do meio n^2
é contado duas vezes) e produza esse número.
Exemplo para n = 1
:
1
(1) + (1) = 2
Exemplo para n = 2
:
1 2
4 3
(1+3) + (4+2) = 4 + 6 = 10
Exemplo para n = 4
:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
(1+13+15+7) + (10+16+14+4) = 36 + 44 = 80
Exemplo de n = 5
:
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
(1+17+25+21+9) + (13+23+25+19+5) = 73 + 85 = 158
Regras e esclarecimentos adicionais
- Este é o OEIS A059924 e existem algumas soluções em formato fechado nessa página.
- Pode-se presumir que a entrada e a saída se encaixam no tipo inteiro nativo do seu idioma.
- A entrada e saída podem ser fornecidas em qualquer formato conveniente .
- Você pode optar pelo índice 0 ou 1, como eu estou aqui nos meus exemplos, para sua apresentação. Por favor, indique o que você está fazendo.
- Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
- Se possível, inclua um link para um ambiente de teste on-line para que outras pessoas possam experimentar seu código!
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
+3-3*(-1)^n
não é realmente o mesmo que6
, embora a diferença seja perdida na divisão inteira.+3-3*(-1^n)
a mesma+6
. Vou atualizar minha resposta para tornar isso mais óbvio.+6
sen
é estranho, mas+0
quandon
é mesmo3-3*(-1^n)
é sempre,6
mas3-3*(-1)^n
tem esse comportamento alternado. A fórmula original tem o último, o que torna o uso de divisão inteira desnecessário, pois é sempre divisível por 12Python 2 , 30 bytes
Economizou alguns bytes portando a abordagem de Giuseppe .
Experimente online!
Python 2 ,
3634 bytesEconomizei mais alguns bytes graças a @LeakyNun .
Experimente online!
fonte
Mathematica, 19 bytes
Você pode executá-lo com a seguinte sintaxe:
Onde
5
pode ser substituído pela entrada.Você pode experimentá-lo na caixa de areia Wolfram (copiar e colar + avaliar células)
fonte
Mathematica, 19 bytes
Experimente online!
Economizou alguns bytes portando a abordagem de Giuseppe.
Mathematica, 58 bytes
Eu sempre gosto de perguntas com respostas dadas thanx to oeis (para a boa pergunta e resposta)
fonte
Geléia ,
1110 bytes1 byte graças a Jonathan Allan.
Experimente online!
fonte
8,-3,4,3
->⁽ø\DN2¦
para salvar um byteMATL , 21 bytes
Experimente online!
fonte
UQG1YL-tP,wXds]+
Cubix , 33 bytes
Experimente online!
versão do cubo:
Implementa o mesmo algoritmo que minha resposta R . Suspeito que isso possa ser jogado para baixo.
fonte
SOGL V0.12 ,
251514 bytesExperimente aqui!
Tradução da resposta Python do Sr.Xcoder, que está usando a abordagem de Giuseppe . SOGL não está ganhando nada aqui: p
fonte
Java 8, 24 bytes
Porto da resposta R de @Giuseppe .
Observe que
/6
, por padrão, o piso é calculado com números inteiros em Java.Experimente aqui.
fonte
Excel,
3530 bytesEconomizou 5 bytes usando a abordagem de Giuseppe .
Primeira tentativa:
Evoluiu de uma implementação direta da fórmula do OEIS (37 bytes):
+3-3*(-1)^A1
lógica pode ser alterada para6*MOD(A1,2)
.Não salva bytes, mas permite a remoção de um fator comum por 2 bytes.
fonte
05AB1E ,
1312 bytesUsa a mesma técnica de conversão de base que a submissão de geléia de Leaky Nun
Talvezexista uma maneira mais curta de criar a lista de coeficientes?-1 byte graças ao Datboi (use espaços e wrap para vencer a compactação (!))
Experimente online!
Quão?
Meus 13 anos ...
Tudo usando compressões para encontrar a lista de coeficientes.
fonte
8 3(4 3)¹β6÷
para 1 byte seguro (sem compressão sofisticada)Pitão , 17 bytes
Experimente aqui.
fonte
Pyke , 14 bytes
Experimente aqui!
fonte
05AB1E , 14 bytes
Experimente online!
fonte
MATL , 12 bytes
Experimente no MATL Online!
Explicação
Mesma abordagem que a resposta de Giuseppe .
fonte
Gaia , 14 bytes
Experimente online!
fonte