pengantar
Tantangan hari ini adalah soal gigi. Secara khusus, berapa lama untuk menyikat dari satu gigi ke gigi lainnya. Tantangan Anda adalah, mengingat lokasi dua gigi, menghasilkan waktu sesingkat mungkin untuk menyikat dari yang pertama ke yang kedua.
Tantangan
Untuk tantangan ini kita akan menggunakan tata letak mulut manusia dewasa rata-rata:
Diagram ini menunjukkan sistem penomoran ISO yang banyak digunakan . Sistem membagi mulut menjadi empat bagian dan memberikan nomor masing-masing: kanan atas (1), kiri atas (2), kiri bawah (3), dan kanan bawah (4). Mereka kemudian memberi nomor gigi setiap bagian dari tengah mulut keluar dari 1-8. Oleh karena itu gigi keempat dari tengah di sisi kanan atas (bagian 1) adalah gigi nomor 14.
Mari kita asumsikan menyikat satu gigi membutuhkan 1 unit waktu. Pindah dari satu gigi ke gigi berikutnya membutuhkan waktu 0 unit. Anda juga dapat berpindah dari satu gigi ke gigi lainnya langsung di atas atau di bawahnya, yang juga membutuhkan waktu 1 unit. Jadi berapa lama Anda menyikat dari gigi 14 ke gigi 31? Dengan melihat diagram di atas, Anda akan melihatnya butuh 7 unit waktu. Berikut ini cara penghitungannya:
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
Perhatikan bahwa ini bukan satu-satunya rute yang bisa kita ambil, tetapi tidak ada rute yang lebih pendek.
Jadi tantangan Anda adalah:
- Anda akan menulis program atau fungsi lengkap yang menerima dua argumen yang merupakan nomor gigi, dan menghasilkan (atau mengembalikan) waktu tersingkat untuk menyikat dari satu ke yang lain.
- Anda membuat masukan sebagai angka atau string, dan hasilkan sesuka Anda ( dengan metode yang dapat diterima ).
- Celah standar dilarang secara default.
- Pertanyaan ini adalah kode-golf , sehingga bytecount terpendek menang.
Berikut adalah beberapa testcases ( Terima kasih Jonathan Allan ):
14, 21 => 5 14, 44 => 3 14, 14 => 1 33, 37 => 5
Semoga berhasil!
Jawaban:
Jelly ,
2420 byteTautan monadik yang menerima daftar dua bilangan bulat (misalnya
[14,31]
untuk dari 14 hingga 31 contoh) yang menghasilkan waktu menyikat.Cobalah online!
Sebelumnya 24 byter membangun mulut dan menggunakan basis 8, input adalah daftar daftar digit:
sumber
JavaScript (ES6), 65 byte
Mengambil input sebagai string.
sumber
Python 2 , 91 byte
Cobalah online!
sumber
JavaScript (ES6), 67 byte
Mengharapkan input sebagai dua array elemen 2 digit.
12
->[1, 2]
Saya harap ini bisa diterima.Cobalah online!
Sepertinya hampir duplikat ke jawaban Python @Chas Brown , jadi saya bisa menghapusnya jika perlu (tidak yakin dengan konvensi di sini).
Penjelasan
sumber
Python 2 ,
8078 byteMungkin masih ada beberapa peluang bermain golf
Fungsi yang tidak disebutkan namanya menerima dua bilangan bulat,
s
dane
, yang mengembalikan waktu menyikat.Cobalah online!
sumber
Bersih ,
134128126 byteCobalah online!
Menentukan fungsi
$ :: Int Int -> Int
, yang hanya menemukan jarak antara dua gigi sebagai koordinat Kartesius. Solusi yang sangat membosankan.sumber