Kredit geht dahin, wo Kredit fällig ist
Berechnen Sie bei zwei Ziffern, x und y, die kürzeste Anzahl horizontaler oder vertikaler Sprünge, um auf einem Standard-Nummernblock von x nach y zu gelangen, z
789
456
123
00
Sie können davon ausgehen, dass alle Eingaben 0-9 sind und Sie keine ungültigen Eingaben verarbeiten müssen. Die Eingabe kann zweimal dieselbe Nummer sein, die einen Abstand von 0 hat.
E / A kann in jedem vernünftigen Format vorliegen , und Standardlücken sind verboten. Die kürzeste Antwort in Bytes gewinnt!
Beispiel IO:
1, 4: 1
1, 8: 3
3, 7: 4
8, 2: 2
6, 1: 3
0, 9: 4
4, 4: 0
0, 4: 2
Antworten:
Gelee , 11 Bytes
Probieren Sie es online aus! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
Python,
140114 BytesIch bin ein Anfänger, also bitte helfen Sie. Hier ist mein Code.
quelle
divmod
können Sie helfen, 5) statt zuif cond:return A\nelse:return B
tunreturn cond and A or B
.divmod
hilft? Ich glaube nicht, dass ich jemals Bytes damit gespeichert habep,q=divmod(x,3);r,s=divmod(y,3)
Dhruv durch Definieren (zum Beispiel) Bytes einsparen könnte,k(y//3-x//3)+k(y%3-x%3
indem er zu wechseltk(r-p)+k(s-q)
. Darüber hinaus denke ich, dass Sie entfernen könnenint
und nur haben(max(x,y)%3==2)
p,q=x//3,x%3
ist immer besser alsp,q=divmod(x,3)
, auch in Python 3Gelee, 13 Bytes
Probieren Sie es online aus!
Port meiner Pyth-Antwort .
Testsuite.
quelle
JavaScript (ES6), 59
Leider nicht
divmod
in Javascript. In der Tat keine ganze Zahldiv
und auch keinemod
: das%
ist nicht genaumod
. Aber ausnahmsweise ist das seltsame Verhalten%
mit negativen Zahlen nützlich.Prüfung
quelle
0
es links von und1
nicht darunter liegt, und dann(a*b%3<0)
ist dies die hinterhältige Anpassung für die Sekunde0
. Nett!Pyth,
222119 BytesFGITW.
Testsuite.
Umrechnungstabelle:
quelle
Julia, 56 Bytes
Probieren Sie es online aus!
quelle
Python 2, 61 Bytes
Testen Sie es auf Ideone .
Wie es funktioniert
Vertikale Entfernung
Ganzzahlige Teilung immer rund nach unten auf die nächste ganze Zahl in Python, was die folgenden Ergebnisse für die 10 möglichen Dividenden geteilt durch -3 .
Somit können wir den vertikalen Abstand zwischen x und y als berechnen
abs(x/-3-y/-3)
.Horizontaler Abstand
Bei Spalten können wir vermeiden, 0 als Sonderfall zu behandeln , indem wir sie durch 1,5 ersetzen und sie so "zwischen" der ersten und zweiten Spalte platzieren.
Modulus (
%
) hat in Python immer das Vorzeichen des Divisors und liefert die folgenden Ergebnisse für die 10 möglichen Dividenden modulo -3 .Durch Abrunden (
//1
) des Ergebnisses vonabs((x or 1.5)%-3-(y or 1.5)%-3)
können wir also die horizontale Differenz zwischen x und y berechnen .quelle
Java
149160 ZeichenDas obligatorische: Weil ... du weißt ... Java! Spaß mit Java in weniger als
150161 Zeichen:Ungolfed in eine Klasse:
Wie es funktioniert
Zuerst wird der Standardfall erfasst, in dem wir uns nirgendwo bewegen müssen.
Nun können wir annehmen, dass sich beide Ganzzahlen unterscheiden, daher kann nur die kleinere 0 sein. Wenn dies der Fall ist, berechnen wir den Abstand von Schlüssel 1 und 2 zum anderen Schlüssel. Wir werden den mit dem kürzeren Abstand verwenden und einen Schritt hinzufügen, um von 1 oder 2 auf 0 zu gelangen.
Wenn wir nicht auf / von Null gehen wollen, müssen wir uns nur im 3x3-Gitter bewegen. Wir können die Spalte und Zeile des Schlüssels mit mod bzw. div bestimmen. Dann berechnen wir den Spalten- und Zeilenabstand und addieren sie. Dies ist die Entfernung, die wir von einem Schlüssel zum anderen benötigen.
Ich hoffe die Erklärung konnte verstanden werden, zögern Sie nicht Golf zu spielen :)
Aktualisierung
Musste es in eine tatsächliche Funktion ändern, da es eine Rekursion verwendet, die mit Lambdas nicht möglich ist :, (
quelle