소개
오늘날의 과제는 모두 치아에 관한 것입니다. 특히, 한 치아에서 다른 치아로 칫솔질하는 데 걸리는 시간. 두 개의 치아의 위치가 주어지면 첫 번째에서 두 번째로 칫솔질하는 데 가장 짧은 시간이 출력됩니다.
도전
이 도전을 위해 우리는 평균 성인 인간 입의 레이아웃을 사용할 것입니다.
이 다이어그램은 널리 사용되는 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
우리가 취할 수있는 유일한 경로는 아니지만 짧은 경로는 없습니다.
그래서 당신의 도전은 :
- 치아 번호 인 두 개의 인수를 허용하고 하나에서 다른 것으로 브러시하는 데 가장 짧은 시간을 출력 (또는 반환)하는 전체 프로그램 또는 함수를 작성합니다.
- 숫자 또는 문자열로 입력하고 원하는 방법으로 허용되는 방법 내에서 출력합니다 .
- 표준 허점 은 기본적으로 금지되어 있습니다.
- 이 질문은 code-golf 이므로 가장 짧은 바이트 수가 이깁니다.
다음은 몇 가지 테스트 사례입니다 ( Thanks Jonathan Allan ).
14, 21 => 5 14, 44 => 3 14, 14 => 1 33, 37 => 5
행운을 빕니다!
