Einführung
Bei der heutigen Herausforderung dreht sich alles um Zähne. Insbesondere, wie lange es dauert, von einem Zahn zum anderen zu putzen. Ihre Herausforderung besteht darin, angesichts der Position von zwei Zähnen die kürzestmögliche Zeit zum Putzen vom ersten zum zweiten auszugeben.
Herausforderung
Für diese Herausforderung verwenden wir ein Layout eines durchschnittlichen erwachsenen menschlichen Mundes:
Dieses Diagramm zeigt das weit verbreitete ISO-Nummerierungssystem . Das System teilt den Mund in vier Teile und weist ihnen jeweils eine Nummer zu: oben rechts (1), oben links (2), unten links (3) und unten rechts (4). Sie nummerieren dann die Zähne jedes Abschnitts von der Mitte des Mundes von 1 bis 8. Daher ist der vierte Zahn von der Mitte oben rechts (Abschnitt 1) die Zahnnummer 14.
Nehmen wir an, das Zähneputzen dauert 1 Einheit. Das seitliche Bewegen von einem Zahn zum nächsten dauert 0 Zeiteinheiten. Sie können auch von einem Zahn zum Zahn direkt darüber oder darunter wechseln, was ebenfalls 1 Zeiteinheit dauert. Wie lange brauchen Sie, um von Zahn 14 bis Zahn 31 zu putzen? Wenn Sie sich das obige Diagramm ansehen, werden Sie sehen, dass es 7 Zeiteinheiten dauert. So wird das berechnet:
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
Beachten Sie, dass dies nicht die einzige Route ist, die wir hätten nehmen können, aber es gibt keine kürzeren Routen.
Ihre Herausforderung lautet also:
- Sie schreiben ein vollständiges Programm oder eine vollständige Funktion, die zwei Argumente akzeptiert, bei denen es sich um Zahnzahlen handelt, und die kürzeste Zeit zum Putzen von einem zum anderen ausgibt (oder zurückgibt).
- Sie nehmen Eingaben als Zahlen oder Zeichenfolgen vor und geben sie nach Belieben aus ( innerhalb akzeptabler Methoden ).
- Standardlücken sind standardmäßig verboten.
- Diese Frage ist Code-Golf , also gewinnt der kürzeste Bytecount.
Hier sind einige Testfälle ( Danke Jonathan Allan ):
14, 21 => 5 14, 44 => 3 14, 14 => 1 33, 37 => 5
Viel Glück!
Antworten:
Gelee ,
2420 BytesEine monadische Verknüpfung, die eine Liste von zwei ganzen Zahlen akzeptiert (z. B.
[14,31]
für das Beispiel von 14 bis 31), die die Bürstzeit ergibt.Probieren Sie es online aus!
Vorherige 24 Byter bauten den Mund und verwendeten Basis 8, Eingabe war eine Liste von Listen von Ziffern:
quelle
JavaScript (ES6), 65 Byte
Nimmt Eingaben als Zeichenfolgen auf.
quelle
Python 2 , 91 Bytes
Probieren Sie es online aus!
quelle
JavaScript (ES6), 67 Byte
Erwartet Eingaben als zwei 2-Element-Arrays von Ziffern.
12
->[1, 2]
Ich hoffe das ist akzeptabel.Probieren Sie es online aus!
Sieht fast wie ein Duplikat der Python-Antwort von @Chas Brown aus , sodass ich sie bei Bedarf entfernen kann (Unsicherheit der Konventionen hier).
Erläuterung
quelle
Python 2 ,
8078 BytesWahrscheinlich noch einige Golfmöglichkeiten hier
Eine unbenannte Funktion, die zwei Ganzzahlen akzeptiert,
s
unde
, die die Putzzeit zurückgibt.Probieren Sie es online aus!
quelle
Sauber ,
134128126 BytesProbieren Sie es online aus!
Definiert die Funktion
$ :: Int Int -> Int
, die nur den Abstand zwischen den beiden Zähnen als kartesische Koordinaten ermittelt. Wirklich ziemlich langweilige Lösung.quelle