Uma espiral numérica é uma grade infinita cujo quadrado superior esquerdo tem o número 1. Aqui estão as cinco primeiras camadas da espiral:
Sua tarefa é descobrir o número na linha ye coluna x.
Exemplo:
Input: 2 3
Out : 8
Input: 1 1
Out : 1
Input: 4 2
Out : 15
Nota:
- Qualquer linguagem de programação é permitida.
- Este é um desafio do código-golfe , e o código mais curto vence.
- Melhor da sorte!
Respostas:
C (gcc),
4443 bytesExperimente online!
A espiral tem vários "braços":
A posição está localizada no braço máximo ( x , y ) (atribuído à variável ). Então, o maior número no braço n é n 2 , que alterna entre estar na posição inferior esquerda e superior direita no braço. Subtrair x de y fornece a sequência - n + 1 , - n + 2 , … , - 1 , 0 , 1 , … , n(x,y) max(x,y) n n2 x y movendo ao longo do braço n , então escolhemos o sinal apropriado com base na paridade de n , ajustamos por n - 1 para obter uma sequência começando em 0 e subtraí esse valor de n 2 .−n+1,−n+2,…,−1,0,1,…,n−1,n−2 n n n−1 n2
z
Agradecemos ao Sr. Xcoder por salvar um byte.
fonte
f(x,y,z){z=x>y?x:y;z=z*z-~(z%2?x-y:y-x)-z;}
salva 1 byte.f(1, 1)
retorna o valor1
. A seção Rodapé percorre x = 1 a 5 e y = 1 a 5, chama a função para todos esses valores e imprime sua saída em uma grade, para demonstrar que a função está correta para todas as entradas mostradas na pergunta.Python,
545049 bytes-4 bytes graças a @ChasBrown
-1 bytes graças a @Shaggy
Experimente Online!
Golfe pela primeira vez! Estou mais do que ciente de que isso não é o ideal, mas tanto faz.
É executado basicamente no mesmo princípio que o código C do @Doorknob.
fonte
def f(a,b):
abordagem, veja aqui .M**2
pode ser substituído porM*M
.MATL , 15 bytes
Experimente online!
Coletar e imprimir como uma matriz
Quão?
Edit: Mesma técnica que a resposta da @ Maçaneta da porta, apenas chegou de maneira diferente.
Solução alternativa de 21 bytes:
Experimente online!
Coletar e imprimir como uma matriz
Do exposto, sabemos que a função que queremos é
Alguns cálculos básicos mostram que uma expressão para no máximo dois números é
Essa é a função que a solução implementa.
fonte
Japonês , 16 bytes
Adaptado da solução da Maçaneta da porta com algumas cervejas.
Tente
Explicação
fonte
Pitão, 20 bytes
Suíte de teste
Uma tradução quase literal da resposta de Rushabh Mehta .
Explicação:fonte
Gelatina , 13 bytes
Experimente online!
Usa o método da maçaneta da porta . Tempo demais.
fonte
»Ḃ-*×_‘+»²_»ʋ
Geléia ,
1312 bytesExperimente online!
Calcula o termo diagonal com
²_’Ṁ
e adiciona / subtrai ao valor correto do índice comṀḂḤ’×I
.fonte
Flacidez cerebral , 76 bytes
Experimente online!
fonte
05AB1E ,
1211 bytes-1 byte, graças à mudança de @Emigna
Èi
paraG
.Resposta do Porto da MATL de @sundar , por isso não deixe de votar nele!
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
Èi
poderia serG
.Pascal (FPC) , 90 bytes
Experimente online!
A resposta da porta da maçaneta da porta , mas a resposta da sundar me deu uma ideia para a
z mod 2*2-1
qual eu me transformei1and z*2-1
para remover o espaço.fonte
Mathematica 34 bytes
então:
(*
54
*)
fonte
Julia 1.0 , 35 bytes
Experimente online!
fonte
JavaScript (ES6), 46 bytes
fonte
Java (JDK 10) , 39 bytes
Experimente online!
Créditos
fonte