Moi rodzice mają urządzenie kina domowego. Pilot jest zepsuty, co utrudnia poruszanie się po menu w prawo. Przez większość czasu nie działa, ale kiedy to robi, porusza się niezwykle szybko w prawo.
Jest to oczywiście frustrujące, ale najbardziej frustrujące, gdy chcesz wprowadzić tytuł filmu, który wymaga nawigacji na klawiaturze, która wygląda następująco:
a b c d e f
g h i j k l
m n o p q r
s t u v w x
y z 1 2 3 4
5 6 7 8 9 0
Twoim zadaniem jest wziąć za wejście tytuł filmu i obliczyć, jak „frustrujące” jest wpisanie tego tytułu filmu. Liczba frustracyjna określonego ciągu to liczba liter, które wymagają przeniesienia bezpośrednio od litery przed nimi. Nie dbamy o to, jak daleko mają rację, ponieważ jeśli zaczniemy jechać w prawo, niemal natychmiast dojdziemy do końca linii i nie dbamy o ruch w górę, w dół lub w lewo, ponieważ są łatwe.
Na przykład, jeśli chcemy wpisać
keyboard
- Zaczynamy od
k
za darmo. e
jest tuż powyżej,k
więc nie musimy się poruszać w prawo.y
jest całkowicie w lewo, więc nie trzeba się poruszać w prawo.b
znajduje się jednak w następnej kolumnie, więc musimy przejść w prawo, aby się do niej dostać.o
znajduje się w następnej kolumnie, więc musimy przejść w prawo, aby się do niego dostać.a
jest z powrotem w pierwszej kolumnie, więc przechodzimy w lewo, aby się do niego dostać.r
znajduje się po prawej stronie, więc przechodzimy do tego.d
to dwie kolumny po lewej stronier
kolumny.
Znaki, które muszą przejść w prawo, bor
oznaczają, że jest to frustracja 3.
Dodatkowe zasady
Jest to wyzwanie polegające na grze w golfa, więc twoje odpowiedzi będą liczone w bajtach, a mniej bajtów będzie lepszych. Dane wejściowe zawsze będą się składać ze znaków alfanumerycznych, możesz obsługiwać duże lub małe litery i wystarczy, że wprowadzisz tylko jedną. Dane wejściowe nigdy nie będą puste.
Przypadki testowe
keyboard -> 3
2001aspaceodyssey -> 6
sorrytobotheryou -> 8
thinblueline -> 5
blast2 -> 3
"blast2" -> 3
(nie jest to prawdziwy film, ale niektóre odpowiedzi mają problemy z takimi przypadkami testowymi)90 -> 1
Odpowiedzi:
JavaScript (Node.js) ,
615554 bajtówZaoszczędzono 1 bajt dzięki @nwellnhof
Pobiera dane wejściowe jako tablicę znaków.
Wypróbuj online!
W jaki sposób?
Dla wszystkich znaków oprócz cyfr większych od0 kolumna x indeksie 0 jest podawana przez:
gdziedo jest kodem ASCII znaku.
Dla cyfr dodatnichn musimy zamiast tego zrobić:
Przykłady:
Skomentował
źródło
"blast2"
."234"
.Galaretka , 11 bajtów
Monadyczny link akceptujący listę (wielkich liter) znaków.
Wypróbuj online!
W jaki sposób?
Najpierw zamienia dowolne
'0'
s na'4'
s (więc reszta kodu traktuje je jako znajdujące się w skrajnej prawej kolumnie). Następnie rzutuje do rzędnych, dodaje jeden i modulo przez,6
aby uzyskać indeksy kolumn oparte na 0. Następnie porównuje sąsiadów z is-less-than i sumuje wynik.źródło
Perl 6 ,
4539 bajtówWypróbuj online!
Działa z dużymi literami.
(2-ord(c))%46%6
oblicza odwróconą współrzędną x.źródło
Czysty , 85 bajtów
Wypróbuj online!
źródło
Rubinowy , 56 bajtów
Wypróbuj online!
Wstępna naiwna wersja zostanie zagrana w golfa.
źródło
Japt
-x
, 14 bajtówWypróbuj online!
Port tej odpowiedzi galaretki. Pobiera dane wejściowe jako tablicę znaków, z dużymi literami.
Wyjaśnienie:
źródło
Java (OpenJDK 8) , 73 bajty
Niezłe rozwiązanie dla Javy! To zero po prawej stronie kosztowało mnie kilka bajtów.
Wypróbuj online!
Wyjaśnił
źródło
05AB1E ,
1211 bajtów-1 bajt dzięki @Kevin Cruijssen
Kolejny port galaretki Jonathana Allana. Pobiera dane pisane wielkimi literami.
Wyjaśnienie:
Wypróbuj online!
źródło
0'4
można¾4
zapisać bajt ( odpowiednia wskazówka 05AB1E ).K (ngn / k) ,
32 3128 bajtówWypróbuj online!
źródło
Retina 0.8.2 , 46 bajtów
Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:
Wymień alfabet i cyfry w kolejności w OSK i zamapuj każdy z nich na (1-indeksowany) numer kolumny.
Konwertuj każdy numer kolumny na unary.
Policz liczbę kolumn, po których następuje większa (tj. Prawa) kolumna.
&`
Pozwala mecze do nakładania.źródło
Python 2 , 84 bajtów
Wypróbuj online!
źródło
Mathematica, 102 bajty
Czysta funkcja. Pobiera listę znaków jako dane wejściowe i zwraca liczbę jako dane wyjściowe. To dość naiwne rozwiązanie, mile widziane sugestie dotyczące gry w golfa.
źródło
PHP,
74 8177 bajtówUruchom jako potok z
-nR
lub spróbuj online .źródło
C (gcc) ,
82 7977 bajtówWypróbuj online!
Ta funkcja obsługuje tylko małe litery
Nie golfił i skomentował:
Jeśli moja funkcja może akceptować szerokie ciągi znaków, można ją zmniejszyć do 76 bajtów za pomocą:
Wypróbuj online!
Ta wersja akceptuje tylko dane wejściowe jako
int*
zamiastchar*
Edycje:
c
)źródło