O crédito vai para onde é devido
Dado dois dígitos, x e y, calcule o menor número de saltos horizontais ou verticais para ir de x a y em um numpad padrão, por exemplo
789
456
123
00
Você pode assumir com segurança que todas as entradas serão de 0 a 9 e não precisa manipular entradas inválidas. A entrada pode ser o mesmo número duas vezes, que tem uma distância de 0.
O IO pode estar em qualquer formato razoável , e as brechas padrão são proibidas. Menor resposta em bytes ganha!
IO de amostra:
1, 4: 1
1, 8: 3
3, 7: 4
8, 2: 2
6, 1: 3
0, 9: 4
4, 4: 0
0, 4: 2
Respostas:
Gelatina , 11 bytes
Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
Python,
140114 bytesEu sou o primeiro temporizador, então por favor ajude. Aqui está o meu código.
fonte
divmod
pode ajudá-lo, 5) em vez deif cond:return A\nelse:return B
fazê-loreturn cond and A or B
.divmod
ajuda? Eu não acho que eu bytes já salvou com issop,q=divmod(x,3);r,s=divmod(y,3)
, o Dhruv pode salvar bytesk(y//3-x//3)+k(y%3-x%3
ao mudar parak(r-p)+k(s-q)
. Além disso, eu acho que você pode removerint
e apenas se(max(x,y)%3==2)
p,q=x//3,x%3
é sempre melhor do quep,q=divmod(x,3)
, mesmo em Python 3Gelatina, 13 bytes
Experimente online!
Porto da minha resposta Pyth .
Suíte de teste.
fonte
JavaScript (ES6), 59
Infelizmente, não
divmod
em javascript. De fato, nenhum número inteirodiv
e nenhummod
: o%
não é exatamentemod
. Mas, pela primeira vez, o comportamento estranho de%
números negativos é útil.Teste
fonte
0
à esquerda, em1
vez de abaixo dela, e então(a*b%3<0)
é o ajuste furtivo do segundo0
. Agradável!Pitão,
222119 bytesFGITW.
Suíte de teste.
Tabela de conversão:
fonte
Julia, 56 bytes
Experimente online!
fonte
Python 2, 61 bytes
Teste em Ideone .
Como funciona
Distância vertical
Divisão inteira sempre volta para baixo para o número inteiro mais próximo em Python, produzindo os seguintes resultados para os 10 possíveis dividendos dividido pelo -3 .
Assim, podemos calcular a distância vertical entre x e y como
abs(x/-3-y/-3)
.Distância horizontal
Para colunas, podemos evitar tratar 0 como um caso especial substituindo-o por 1,5 , colocando-o "entre" a primeira e a segunda coluna.
O módulo (
%
) sempre tem o sinal do divisor em Python, produzindo os seguintes resultados para o possível 10 módulo -3 de dividendos .Assim, arredondando para baixo (
//1
) o resultado deabs((x or 1.5)%-3-(y or 1.5)%-3)
, podemos calcular a diferença horizontal entre x e y .fonte
Java
149160 caracteresO obrigatório: Porque ... você sabe ... Java! Divertir-se com Java em menos de
150161 caracteres:Ungolfed em uma classe:
Como funciona
Primeiro, ele captura o caso padrão em que não precisamos ir a lugar algum.
Agora, podemos assumir que ambos os números inteiros diferem, portanto, apenas o menor pode ser 0. Se esse for o caso, calculamos a distância da chave 1 e 2 à outra chave. Usaremos o de menor distância e adicionaremos uma etapa para passar de 1 ou 2 a 0.
Se não queremos ir de / para zero, precisamos apenas mover-nos na grade 3x3. Podemos determinar a coluna e a linha da chave usando mod ou div, respectivamente. Depois calculamos a distância da coluna e da linha e as adicionamos. Essa é a distância que precisamos percorrer de uma chave para outra.
Espero que a explicação possa ser entendida, fique à vontade para jogar golfe :)
Atualizações
Teve que alterá-lo para uma função real, pois usa recursão que não é possível com lambdas:, (
fonte