介绍
今天的挑战完全是牙齿。具体来说,从一颗牙齿刷到另一颗牙齿需要多长时间。您面临的挑战是,鉴于两颗牙齿的位置,从第一根到第二根要刷牙的时间最短。
挑战
对于这一挑战,我们将使用成年人口的布局:
该图显示了广泛使用的ISO编号系统。系统将嘴巴分为四个部分,并分别为它们分配一个数字:右上(1),左上(2),左下(3)和右下(4)。然后,他们从嘴中开始从1-8编号每个部分的牙齿。因此,从右上角中央起第四个牙齿(第1部分)是牙齿编号14。
假设刷一颗牙齿花费1单位时间。从一颗牙齿向另一颗牙齿横向移动需要0个时间单位。您还可以从牙齿到牙齿正上方或下方的牙齿交叉,这也需要1单位时间。那么,您从牙齿14刷到牙齿31需要多长时间?通过查看上图,您将看到它花费了7个时间单位。计算方法如下:
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
请注意,他不是我们唯一可以走的路,但是没有更短的路。
因此,您面临的挑战是:
- 您将编写一个完整的程序或函数,该程序或函数接受两个参数,即牙齿编号,并输出(或返回)从一个刷到另一个刷的最短时间。
- 您可以将输入作为数字或字符串,然后按需要输出(在可接受的方法内)。
- 默认情况下,标准漏洞是禁止的。
- 这个问题是代码高尔夫,所以最短的字节数取胜。
以下是一些测试用例(感谢Jonathan Allan):
14, 21 => 5 14, 44 => 3 14, 14 => 1 33, 37 => 5
祝好运!
1
当我回到计算机时,@ JonathanAllan将添加。
—
血液学
“从一个牙齿移动到另一个牙齿需要0个时间单位。” <-更准确地说,我认为您的意思是“从一颗牙齿到另一颗牙齿的横向移动需要0单位时间”。(我首先把它的意思是从任何牙齿转移到任何其他牙齿都需要1个单位,这使下句话变得令人困惑。)
—
sundar-恢复莫妮卡
@sundar,您说对了,将进行编辑。
—
血液流变学
@JonathanAllan做完了。
—
血液流变学
