Wprowadzenie
Dzisiejsze wyzwanie dotyczy zębów. W szczególności ile czasu zajmuje szczotkowanie od jednego zęba do drugiego. Twoim wyzwaniem jest, biorąc pod uwagę położenie dwóch zębów, uzyskanie jak najkrótszego czasu na szczotkowanie od pierwszego do drugiego.
Wyzwanie
Do tego wyzwania użyjemy układu przeciętnego dorosłego człowieka:
Ten schemat pokazuje szeroko stosowany system numeracji ISO . System dzieli usta na cztery części i przypisuje im każdą liczbę: prawy górny (1), lewy górny (2), lewy dolny (3) i prawy dolny (4). Następnie numerują zęby każdej sekcji od środka jamy ustnej od 1-8. Dlatego czwartym zębem od środka w prawym górnym rogu (część 1) jest ząb numer 14.
Załóżmy, że szczotkowanie jednego zęba zajmuje 1 jednostkę czasu. Przejście z jednego zęba do następnego na boki zajmuje 0 jednostek czasu. Możesz również przejść od zęba do zęba bezpośrednio nad nim lub pod nim, co również zajmuje 1 jednostkę czasu. Ile czasu zajmuje szczotkowanie zębów od zęba 14 do zęba 31? Patrząc na powyższy schemat, zobaczysz, że zajmuje to 7 jednostek czasu. Oto jak to się oblicza:
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
Zwróć uwagę, że nie jest to jedyna trasa, którą mogliśmy obrać, ale nie ma krótszych tras.
Twoim wyzwaniem jest:
- Napiszemy pełny program lub funkcję, która akceptuje dwa argumenty, które są liczbami zębów, i wyświetla (lub zwraca) najkrótszy czas na zamiatanie od jednego do drugiego.
- Podejmujesz dane wejściowe jako liczby lub ciągi i wypisujesz je w dowolny sposób ( w ramach akceptowalnych metod ).
- Standardowe luki są domyślnie zabronione.
- To pytanie dotyczy gry w golfa , więc wygrywa najkrótsza liczba bajtów.
Oto kilka przypadków testowych ( Dzięki Jonathan Allan ):
14, 21 => 5 14, 44 => 3 14, 14 => 1 33, 37 => 5
Powodzenia!
Odpowiedzi:
Galaretka ,
2420 bajtówŁącze monadyczne akceptujące listę dwóch liczb całkowitych (np.
[14,31]
Dla przykładu od 14 do 31), co daje czas szczotkowania.Wypróbuj online!
Poprzednie 24 byter zbudowało usta i użyło podstawy 8, wprowadzono listę list cyfr:
źródło
JavaScript (ES6), 65 bajtów
Pobiera dane wejściowe jako ciągi znaków.
źródło
Python 2 , 91 bajtów
Wypróbuj online!
źródło
JavaScript (ES6), 67 bajtów
Oczekuje danych wejściowych jako dwóch 2-elementowych tablic cyfr.
12
->[1, 2]
Mam nadzieję, że jest to do przyjęcia.Wypróbuj online!
Wygląda jak niemal duplikat odpowiedzi Pythona @Chasa Browna , więc w razie potrzeby mogę ją usunąć (nie jestem pewien konwencji tutaj).
Wyjaśnienie
źródło
Python 2 ,
8078 bajtówPrawdopodobnie wciąż istnieją tutaj możliwości gry w golfa
Nienazwany funkcja przyjmując dwie liczby całkowite,
s
ie
, co zwraca szczotkowanie wymiarze godzin.Wypróbuj online!
źródło
Czysty ,
134128126 bajtówWypróbuj online!
Definiuje funkcję
$ :: Int Int -> Int
, która właśnie znajduje odległość między dwoma zębami jako współrzędne kartezjańskie. Naprawdę nudne rozwiązanie.źródło