Вступ
Сьогоднішній виклик стосується зубів. Зокрема, скільки часу потрібно чистити від одного зуба до іншого. Ваше завдання полягає в тому, що, враховуючи розташування двох зубів, виведіть найкоротший проміжок часу для чищення від першого до другого.
Виклик
Для цього виклику ми будемо використовувати макет середнього дорослого людського рота:
На цій діаграмі показана широко застосовувана система нумерації 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
Зауважте, він не єдиний маршрут, який ми могли пройти, але коротших маршрутів немає.
Тож ваше завдання:
- Ви напишете повну програму або функцію, яка приймає два аргументи, що є числами зубів, і виводить (або повертає) найкоротший час для чищення від одного до іншого.
- Ви вносите введення цифр або рядків і виводите як завгодно ( у межах прийнятних методів ).
- Стандартні лазівки за замовчуванням заборонені.
- Це питання є кодовим гольфом , тому найкоротші виграші на рахунку.
Ось кілька тестів ( спасибі Джонатану Аллану ):
14, 21 => 5 14, 44 => 3 14, 14 => 1 33, 37 => 5
Удачі!
