EINGABE: Ein beliebiger String, der ausschließlich aus Kleinbuchstaben besteht (Funktionsargument, Befehlszeilenargument, STDIN oder ähnliches).
AUSGABE: Eine Zahl drucken oder zurückgeben, die die Summe der Abstände der Buchstaben gemäß der folgenden Metrik darstellt:
Sie nehmen den ersten und zweiten Buchstaben und zählen den Abstand zwischen ihnen. Der Abstand wird durch das QWERTZ-Tastaturlayout definiert. Dabei hat jeder benachbarte Buchstabe in derselben Zeile den Abstand 1 und jeder benachbarte Buchstabe in derselben Spalte den Abstand 2. Um den Abstand zwischen Buchstaben zu messen, die nicht benachbart sind, wählen Sie den kürzesten Weg zwischen den beiden.
Beispiele:
q->w is 1 distance apart
q->e is 2 distance
q->a is 2 distance
q->s is 3 distance (q->a->s or q->w->s)
q->m is 10 distance
Dann nehmen Sie den zweiten und dritten Buchstaben, dann den dritten und vierten usw., bis Sie das Ende der Eingabe erreichen. Die Ausgabe ist die Summe aller dieser Entfernungen.
Beispiel Ein- und Ausgabe:
INPUT: qwer
OUTPUT: 3
INPUT: qsx
OUTPUT: 5
INPUT: qmq
OUTPUT: 20
INPUT: tttt
OUTPUT: 0
Hier ist ein Bild, das zeigt, welche Buchstaben sich in derselben Spalte befinden:
Das ist Code Golf, also gewinnt der kürzeste Code in Bytes!
Antworten:
CJam, 50 Bytes
Beachten Sie, dass der Code nicht druckbare Zeichen enthält.
Probieren Sie es online im CJam-Interpreter aus . Wenn der Permalink nicht funktioniert, kopieren Sie den Code aus dieser Paste .
Hintergrund
Wir beginnen, den Buchstaben in der oberen Reihe die Positionen 0 bis 9 zuzuweisen , den Buchstaben in der Ausgangsreihe die Positionen 10 bis 18 und den Buchstaben in der unteren Reihe die Positionen 20 bis 26 .
Die Positionen aller 26 Buchstaben in alphabetischer Reihenfolge sind
Dies ist ein Array mit der Länge 26. Da Arrays in CJam umschlingen, und der Codepunkt des Buchstaben H ist 104 = 4 × 26 , wir die Array 7 Einheiten nach links zu drehen, so dass jede Position des Buchstaben kann durch seine zugegriffen werden Codepunkt.
Jetzt codieren wir dieses Array, indem wir die Ziffern der Elemente einer Zahl zur Basis 27 betrachten und die resultierende Ganzzahl in die Zahl zur Basis 257 konvertieren.
Durch Ersetzen der einzelnen Ganzzahlen durch das entsprechende Unicode-Zeichen erhalten wir die Zeichenfolge aus dem Quellcode.
Wie es funktioniert
quelle
Python 2,
220...124119 BytesEin großes Dankeschön an Sp3000 für das Speichern vieler Bytes.
Verwendung:
Schau es dir hier an.
Leicht ungolfed + Erklärung:
quelle
Java, 266 Bytes
Ungolfed-Version:
quelle
int v=0,l=q.length(),p[][]=new int[l][2];
SWI-Prolog, 162 Bytes
Beispiel:
a(`qmq`)
Outputs20
(undtrue
danach kann ich nichts mehr dagegen tun).Bearbeiten: musste 3 weitere Bytes verwenden. Mein ursprüngliches Programm hat die angegebenen Testfälle bestanden, war aber tatsächlich falsch (absolute Werte wurden verlegt / fehlen)
Hinweis: Wenn Sie Ideone verwenden möchten , müssen Sie alle Anführungszeichen
`
durch doppelte Anführungszeichen ersetzen"
. In meinem Fall stellen Anführungszeichen (der derzeitige Standard in SWI-Prolog) eine Codeliste für Zeichenfolgen und Zeichenfolgen in doppelten Anführungszeichen dar. Dies ist jedoch in älteren Versionen von SWI-Prolog anders.quelle