Introdução
O desafio de hoje é sobre dentes. Especificamente, quanto tempo leva para escovar de um dente para outro. Seu desafio é, dada a localização de dois dentes, produzir o menor tempo possível para escovar do primeiro ao segundo.
Desafio
Para esse desafio, usaremos o layout de uma boca humana adulta média:
Este diagrama mostra o sistema de numeração ISO amplamente utilizado . O sistema divide a boca em quatro partes e atribui-lhes um número: superior direito (1), superior esquerdo (2), inferior esquerdo (3) e inferior direito (4). Eles então numeram os dentes de cada seção do meio da boca de 1 a 8. Portanto, o quarto dente do centro no lado superior direito (seção 1) é o número 14.
Vamos supor que escovar um dente leva 1 unidade de tempo. Mover de um dente para o próximo de lado leva 0 unidades de tempo. Você também pode passar de um dente para o dente diretamente acima ou abaixo dele, o que também leva 1 unidade de tempo. Então, quanto tempo você leva para escovar do dente 14 ao dente 31? Observando o diagrama acima, você verá que são necessárias 7 unidades de tempo. Aqui está como isso é calculado:
Action : Unit of time
Brushing tooth 14 : 1 unit
Brushing tooth 13 : 1 unit
Brushing tooth 12 : 1 unit
Brushing tooth 11 : 1 unit
Brushing tooth 21 : 1 unit
Cross to bottom of mouth : 1 unit
Brushing tooth 31 : 1 unit
------------------------------
Total: 7 units
Observe que ele não é o único caminho que poderíamos seguir, mas não há rotas mais curtas.
Portanto, seu desafio é:
- Você escreverá um programa ou função completo que aceita dois argumentos que são números de dentes e gera (ou retorna) o menor tempo possível para passar de um para o outro.
- Você faz a entrada como números ou seqüências de caracteres e a saída como desejar ( dentro de métodos aceitáveis ).
- As brechas padrão são proibidas por padrão.
- Esta questão é código-golfe , pelo que o menor número de vitórias vence.
Aqui estão alguns casos de teste ( Obrigado Jonathan Allan ):
14, 21 => 5 14, 44 => 3 14, 14 => 1 33, 37 => 5
Boa sorte!
