Giriş
Bugünün meydan okuması tamamen dişlerle ilgilidir. Özellikle, bir dişten diğerine fırçalama ne kadar sürer. Zorluğunuz, iki dişin yerleri göz önüne alındığında, birinden diğerine fırçalamak için mümkün olan en kısa süreyi çıkarmaktır.
Meydan okuma
Bu meydan okuma için ortalama bir yetişkin insan ağzı düzeni kullanacağız:
Bu şemada yaygın olarak kullanılan ISO numaralandırma sistemi gösterilmektedir . Sistem ağzı dört parçaya ayırır ve her birine bir sayı atar: sağ üst (1), sol üst (2), sol alt (3) ve sağ alt (4). Daha sonra her bölümün dişlerini ağzın ortasından 1-8 arasında numaralandırırlar. Bu nedenle, sağ üst taraftaki merkezden dördüncü diş (bölüm 1) 14 numaralı diştir.
Bir diş fırçalamanın 1 birim zaman aldığını varsayalım. Bir dişten diğerine yana doğru hareket etmek 0 birim zaman alır. Ayrıca bir dişten doğrudan üstündeki veya altındaki dişe de geçebilirsiniz, bu da 1 birim zaman alır. Öyleyse diş 14'ten diş 31'e fırçalamak ne kadar sürer? Yukarıdaki şemaya bakarak 7 birim zaman aldığını göreceksiniz. Bunun nasıl hesaplandığı aşağıda açıklanmıştır:
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
Dikkat etmeliyiz ki, bu bizim tek yolumuz değildi, ama daha kısa yollar da yok.
Yani zorluklarınız:
- Diş sayısı olan iki argümanı kabul eden ve birinden diğerine fırçalamak için en kısa süreyi veren (veya döndüren) tam bir program veya işlev yazacaksınız.
- Sayı veya karakter dizisi olarak girdi alırsınız ve istediğiniz şekilde çıktı alabilirsiniz ( kabul edilebilir yöntemler dahilinde ).
- Standart boşluklar varsayılan olarak yasaktır.
- Bu soru kod golf , bu yüzden en kısa bayt kazanır.
İşte bazı testcases ( Teşekkürler Jonathan Allan ):
14, 21 => 5 14, 44 => 3 14, 14 => 1 33, 37 => 5
İyi şanslar!
