Wyzwanie
Biorąc pod uwagę ciąg małych liter [a-z]
, wypisz całkowitą odległość między literami.
Przykład
Input: golf
Distance from g to o : 8
Distance from o to l : 3
Distance from l to f : 6
Output: 17
Zasady
- Standardowe luki zabronione
- To jest golf golfowy - wygrywa najkrótsza odpowiedź w bajtach.
- Alfabet może być przesuwany z obu kierunków. Zawsze musisz używać najkrótszej ścieżki. (tj. odległość między
x
ic
wynosi 5).
Przypadki testowe
Input: aa
Output: 0
Input: stack
Output: 18
Input: zaza
Output: 3
Input: valleys
Output: 35
code-golf
string
number
arithmetic
Daniel
źródło
źródło
æ%
Pewnego dnia natknąłem się na lekturę wbudowanych elementów i było to w zasadzie zrobione z tego (rodzaju) problemu:OIæ%13AS
æ
to dwa).Haskell,
5756 bajtówPrzykład użycia:
sum.q.q.(zipWith(-)=<<tail).map fromEnum $ "valleys"
->35
.Jak to działa:
Edycja: @Damien zapisał jeden bajt. Dzięki!
źródło
q.q
)map
definicję oq
jeden bajt mniejMATL ,
14, 10 bajtówWypróbuj online!
Dzięki @Suever za uratowanie 4 bajtów!
Wyjaśnienie:
Poprzednia wersja:
źródło
Python 3,
6968 bajtówAwaria:
źródło
for
f=lambda a,b,*s:13-abs(13-abs(ord(a)-ord(b)))+(s and f(b,*s)or 0)
Java,
126120117 bajtówPodziękowania dla @KevinCruijssen za wskazanie błędu w oryginalnej wersji i zasugerowanie, aby pętla for była pusta.
Zastosowanie
(26 + z[i] - z[i - 1]) % 26)
inspirowane jest komentarzem @Neil na temat innej odpowiedzi.(26 + ...)%26
służy temu samemu celowi, co zMath.abs(...)
powodu...? e : 26 - e
.Nie golfowany :
źródło
[edit] those details into the top of your post, with this markdown:
#Język, n bajtów`-
przede
w swojej wersji bez golfa.e=z[i]-z[i-1];
Więc albo trzeba oddanych do(byte)
lub zmieniće
naint
. Ponadto, można usunąć wsporniki dla pętli umieszczając wszystko wewnątrz pętli for, tak: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: odwrócona pętli for jest niestety taka sama długość: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 bajtówZaoszczędzono 3 bajty dzięki Cyoce:
Wyjaśnienie:
Przykład:
Call:
f('golf')
Output:
17
Poprzednie rozwiązania:
82 bajty dzięki Neilowi:
84 bajtów:
źródło
Math.abs(...)
ciebie możesz użyć(26+...)%26
; działa to, ponieważ i tak przerzucasz wartości powyżej 13. (Myślę, że tak działa odpowiedź MATL.)p=parseInt;
a następnie używającp()
zamiastparseInt()
Ruby, 73 bajty
źródło
PHP, 93 bajty
źródło
05AB1E , 12 bajtów
Wyjaśnienie
Wypróbuj online!
źródło
Perl, 46 bajtów
Obejmuje +3 dla
-p
(kod zawiera'
)Podaj dane na temat STDIN bez ostatniej nowej linii:
stringd.pl
:źródło
Rakieta 119 bajtów
Testowanie:
Wydajność:
Wersja szczegółowa:
źródło
(define(f s)
z(lambda(s)
2 bajty krótszy (funkcje anonimowe są w porządku).(λ(s)
, co, jeśli w utf8 ma 6 bajtów, myślęC #,
8785 bajtówUlepszone rozwiązanie - zastąpiono Math.Abs () sztuczką add & modulo, aby zaoszczędzić 2 bajty:
Wstępne rozwiązanie:
Wypróbuj online!
Pełne źródło, w tym przypadki testowe:
źródło
Właściwie 21 bajtów
Oparty częściowo na odpowiedzi Ruby na cia_rana .
Wystąpił błąd z
O
(w tym przypadku map ord () nad ciągiem), w którym nie działałd
(dequeue bottom element) ip
(pop pierwszy element) bez uprzedniej konwersji mapy na listę za pomocą#
. Ten błąd został naprawiony, ale ponieważ ta poprawka jest nowsza niż to wyzwanie, więc nadal się pojawiłem#
.Edytować: Liczba bajtów jest nieprawidłowa od września. Ups
Sugestie dotyczące gry w golfa mile widziane. Wypróbuj online!
Ungolfing
źródło
Java 7,128 bajtów
Nie golfił
źródło
Pyth, 20 bajtów
Program, który pobiera ciąg cytowanego ciągu na STDIN i wypisuje wynik.
Wypróbuj online
Jak to działa
źródło
dc + od, 65 bajtów
Wyjaśnienie:
Ponieważ w DC nie można uzyskać dostępu do znaków ciągu, użyłem od, aby uzyskać wartości ASCII. Będą one przetwarzane w kolejności odwrotnej od stosu (kontener LIFO) w następujący sposób:
Biegać:
Wydajność:
źródło
C,
82 86 8376 bajtówZakłada, że łańcuch wejściowy ma co najmniej jeden znak. To nie wymaga
#include<stdlib.h>
Edycja: Argh, punkty sekwencji!
Wypróbuj na Ideone
źródło
C, 70 bajtów
76 bajtówźródło
Scala, 68 bajtów
Krytyka jest mile widziana.
źródło
C #, 217 bajtów
Gra w golfa:
Nie golfowany:
Wydajność:
„a” wynosi 97 po przekształceniu w bajty, więc 97 jest odejmowane od każdego z nich. Jeśli różnica jest większa niż 13 (tj. Połowa alfabetu), to odejmij różnice między każdym znakiem (wartością bajtu) od 26. Dodanie w ostatniej chwili „zwrotu z zysku” pozwoliło mi zaoszczędzić kilka bajtów!
źródło
Python 3, 126 bajtów
Z listy w zrozumieniu.
źródło
abs(x-y)
przezy-x
od czasu wezwania dosorted
wykonaniax < y
.PHP, 79 bajtów
źródło
Java, 109 bajtów
źródło