WEJŚCIE: Dowolny ciąg składający się wyłącznie z małych liter za pomocą argumentu funkcji, argumentu wiersza poleceń, STDIN lub podobnego.
WYJŚCIE: Wydrukuj lub zwróć liczbę, która będzie reprezentować sumę odległości liter zgodnie z następującą miarą:
Weź pierwszą i drugą literę i policz odległość między nimi. Odległość jest zdefiniowana przez układ klawiatury QWERTY, w którym każda sąsiadująca litera w tym samym rzędzie ma odległość 1, a każda sąsiadująca litera w tej samej kolumnie ma odległość 2. Aby zmierzyć odległość między literami, które nie są sąsiadujące, należy wybrać najkrótszą ścieżkę pomiędzy dwoma.
Przykłady:
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
Następnie bierzesz drugą i trzecią literę, a następnie trzecią i czwartą itd., Aż dojdziesz do końca wejścia. Wynik jest sumą wszystkich tych odległości.
Przykładowe dane wejściowe i wyjściowe:
INPUT: qwer
OUTPUT: 3
INPUT: qsx
OUTPUT: 5
INPUT: qmq
OUTPUT: 20
INPUT: tttt
OUTPUT: 0
Oto obraz pokazujący, które litery znajdują się w tej samej kolumnie:
To jest kod golfowy, więc wygrywa najkrótszy kod w bajtach!
Odpowiedzi:
CJam, 50 bajtów
Pamiętaj, że kod zawiera znaki niedrukowalne.
Wypróbuj online w interpretatorze CJam . Jeśli bezpośredni link nie działa, skopiuj kod z tej pasty .
tło
Zaczynamy przypisywać pozycje od 0 do 9 do liter w górnym rzędzie, od 10 do 18 do liter w rzędzie głównym i od 20 do 26 do liter w dolnym rzędzie.
Pozycje wszystkich 26 liter w porządku alfabetycznym są
Jest to tablica o długości 26. Ponieważ tablice zawijają się w CJam, a punkt kodowy litery h wynosi 104 = 4 × 26 , obracamy tablicę o 7 jednostek w lewo, aby uzyskać dostęp do pozycji każdej litery za pomocą jej punkt kodowy.
Teraz kodujemy tę tablicę, biorąc pod uwagę cyfry jej elementów liczby podstawowej 27 i przekształcamy wynikową liczbę całkowitą na podstawową 257.
Zastępując każdą liczbę całkowitą odpowiednim znakiem Unicode, otrzymujemy ciąg z kodu źródłowego.
Jak to działa
źródło
Python 2,
220...124119 bajtówOgromne podziękowania dla Sp3000 za oszczędność wielu bajtów.
Stosowanie:
Sprawdź to tutaj.
Nieco golfa + wyjaśnienie:
źródło
Java, 266 bajtów
Wersja bez golfa:
źródło
int v=0,l=q.length(),p[][]=new int[l][2];
SWI-prolog, 162 bajty
Przykład:
a(`qmq`)
wyjścia20
(itrue
po tym, ale nic nie mogę na to poradzić).Edycja: musiał użyć jeszcze 3 bajtów. Mój oryginalny program przeszedł podane przypadki testowe, ale w rzeczywistości był niepoprawny (wartości bezwzględne zostały niewłaściwie umieszczone / brakujące)
Uwaga: jeśli chcesz go użyć w powiedzmy Ideone , musisz zamienić wszystkie
`
cudzysłowy na podwójne cudzysłowy"
. W moim przypadku cudzysłowy (które są obecnie standardem w SWI-Prologu) reprezentują listę kodów dla ciągów znaków i cudzysłowy, ale w starszych wersjach SWI-Prologu jest inaczej.źródło