Herausforderung
Geben Sie bei Eingabe einer Zeichenfolge in Kleinbuchstaben [a-z]
den Gesamtabstand zwischen den Buchstaben aus.
Beispiel
Input: golf
Distance from g to o : 8
Distance from o to l : 3
Distance from l to f : 6
Output: 17
Regeln
- Standardlücken verboten
- Dies ist Code-Golf - kürzeste Antwort in Bytes gewinnt.
- Das Alphabet kann aus beiden Richtungen durchlaufen werden. Sie müssen immer den kürzesten Weg verwenden. (dh der Abstand zwischen
x
undc
ist 5).
Testfälle
Input: aa
Output: 0
Input: stack
Output: 18
Input: zaza
Output: 3
Input: valleys
Output: 35
code-golf
string
number
arithmetic
Daniel
quelle
quelle
æ%
beim Durchlesen der EinbautenOIæ%13AS
æ
sind zwei).Haskell,
5756 BytesAnwendungsbeispiel:
sum.q.q.(zipWith(-)=<<tail).map fromEnum $ "valleys"
->35
.Wie es funktioniert:
Edit: @Damien hat ein Byte gespeichert. Vielen Dank!
quelle
q.q
)map
in der Definition vonq
für ein Byte weniger hinzufügenMATL ,
14, 10 BytesProbieren Sie es online!
Vielen Dank an @Suever für das Speichern von 4 Bytes!
Erläuterung:
Vorherige Version:
quelle
Python 3,
6968 BytesNervenzusammenbruch:
quelle
for
f=lambda a,b,*s:13-abs(13-abs(ord(a)-ord(b)))+(s and f(b,*s)or 0)
Java,
126120117 BytesVielen Dank an @KevinCruijssen für den Hinweis auf einen Fehler in der Originalversion und den Vorschlag, die for-Schleife leer zu machen.
Die Verwendung von
(26 + z[i] - z[i - 1]) % 26)
basiert auf einem Kommentar von @Neil zu einer anderen Antwort.(26 + ...)%26
dient dem gleichen Zweck wieMath.abs(...)
wegen...? e : 26 - e
.Ungolfed :
quelle
[edit] those details into the top of your post, with this markdown:
#Language, n bytes`-
vor eineme
.e=z[i]-z[i-1];
So benötigen Sie entweder eine Besetzung zu(byte)
ändern oder dase
zuint
. Außerdem können Sie die for-Schleife Klammern entfernen , indem sie alles in dem for-Schleife platzieren, wie folgt aus :int f(String s){byte[]z=s.getBytes();int r=0,i=0,e;for(;++i<z.length;r+=(e=z[i]-z[i-1])>0?e<14?e:26-e:-e<14?-e:e+26);return r;}
(PS: Die umgekehrten die for-Schleife ist leider die gleiche Länge:int f(String s){byte[]z=s.getBytes();int r=0,i=z.length-1,e;for(;i>0;r+=(e=z[i]-z[--i])>0?e<14?e:26-e:-e<14?-e:e+26);return r;}
.JavaScript (ES6),
848279 Byte3 Bytes gespart dank Cyoce:
Erläuterung:
Beispiel:
Aufruf:
f('golf')
Ausgabe:
17
Bisherige Lösungen:
82 Bytes dank Neil:
84 Bytes:
quelle
Math.abs(...)
Ihnen können verwenden(26+...)%26
; Das funktioniert, weil Sie sowieso Werte über 13 spiegeln. (Ich denke, so funktioniert die MATL-Antwort.)p=parseInt;
und dann unter Verwendungp()
anstelle vonparseInt()
Ruby, 73 Bytes
quelle
PHP, 93 Bytes
quelle
05AB1E , 12 Bytes
Erläuterung
Probieren Sie es online!
quelle
Perl, 46 Bytes
Beinhaltet +3 für
-p
(Code enthält'
)Geben Sie eine Eingabe in STDIN ohne letzte Zeile ein:
stringd.pl
:quelle
Schläger 119 Bytes
Testen:
Ausgabe:
Ausführliche Version:
quelle
(define(f s)
mit(lambda(s)
, 2 Bytes kürzer ersetzen (anonyme Funktionen sind in Ordnung).(λ(s)
, was, wenn in utf8 6 Bytes ich denkeC #,
87-85BytesVerbesserte Lösung - Math.Abs () wurde durch den Add & Modulo-Trick ersetzt, um 2 Bytes zu sparen:
Anfangslösung :
Probieren Sie es online!
Vollständige Quelle, einschließlich Testfällen:
quelle
Eigentlich 21 Bytes
Basiert teilweise auf der Ruby-Antwort von cia_rana .
Es gab einen Fehler mit
O
(in diesem Fall map ord () über einer Zeichenfolge), bei dem es nicht funktioniert hatd
(unteres Element aus der Warteschlange entfernen) undp
(erstes Element einblenden ), ohne die Karte zuerst in eine Liste mit zu konvertieren#
. Dieser Fehler wurde behoben, aber da dieses Update neuer als diese Herausforderung ist, habe ich mich daran gehalten#
.Edit: Und die Byteanzahl ist seit September falsch. Hoppla.
Golfvorschläge sind willkommen. Probieren Sie es online!
Ungolfing
quelle
Java 7.128 Bytes
Ungolfed
quelle
Pyth, 20 Bytes
Ein Programm, das eine in Anführungszeichen gesetzte Zeichenfolge in STDIN eingibt und das Ergebnis ausgibt.
Probieren Sie es online aus
Wie es funktioniert
quelle
dc + od, 65 bytes
Erläuterung:
Da Sie in dc nicht auf die Zeichen eines Strings zugreifen können, habe ich od verwendet , um die ASCII-Werte abzurufen. Diese werden vom Stapel (LIFO-Container) in umgekehrter Reihenfolge wie folgt verarbeitet:
Lauf:
Ausgabe:
quelle
C,
82 86 8376 BytesEs wird davon ausgegangen, dass die Eingabezeichenfolge mindestens ein Zeichen lang ist. Dies ist nicht erforderlich
#include<stdlib.h>
Edit: Argh, Sequenzpunkte!
Probieren Sie es auf Ideone
quelle
C 70 Bytes
76 Bytesquelle
Scala, 68 Bytes
Kritik ist willkommen.
quelle
C #, 217 Bytes
Golf gespielt:
Ungolfed:
Ausgabe:
'a' ist 97, wenn es in Bytes konvertiert wird, also wird 97 von jedem abgezogen. Wenn die Differenz größer als 13 ist (dh die Hälfte des Alphabets), dann subtrahieren Sie die Unterschiede zwischen den einzelnen Zeichen (Bytewert) von 26. Eine Last-Minute-Addition von "yield return" hat mir ein paar Bytes erspart!
quelle
Python 3, 126 Bytes
Mit Liste im Verständnis.
quelle
abs(x-y)
durch ,y-x
da der Anruf zusorted
machenx < y
.PHP, 79 Bytes
quelle
Java, 109 Bytes
quelle