Pannenkoek2012 ma na celu ukończenie Super Mario 64 przy jak najmniejszej liczbie naciśnięć przycisku A, co powoduje, że Mario skacze. Każda „prasa” składa się z trzech części:
- Naciśnięcie przycisku
- Trzymając go przez dowolny czas
- Zwolnienie go
Zobacz to wideo (1:15 - 3:23), aby uzyskać świetne wyjaśnienie obejmujące powyższy obraz. (Jednak to wyzwanie nie będzie korzystało z terminologii pół-A i będzie stanowić przeszkodę wymagającą zwolnienia A.)
Zadanie:
Biorąc pod uwagę sekwencję przeszkód wymagających naciśnięcia (P), przytrzymania (H) lub zwolnienia (R) przycisku A, wypisz najmniejszą liczbę naciśnięć wymaganych do ich pokonania w podanej kolejności. Przycisk A początkowo nie jest trzymany.
Formalnie sformułowane: biorąc pod uwagę ciąg S znaków PHR
, rozważ ciągi znaków (PH*R)*
zawierające S jako podsekwencję i wyprowadzaj najmniejszą możliwą liczbę P
takich ciągów. Lub, alternatywnie, znajdź najmniejszą liczbę części formy, na P?H*R?
którą można podzielić S.
Przykład
Spójrzmy na dane wejściowe RHRPHHHR
. Przycisk A nie zaczyna się przytrzymywać, więc pokonanie początkowej przeszkody R
wymaga naciśnięcia i zwolnienia przycisku (naciśnij # 1). Następnie musimy przytrzymać przycisk H
, który ponownie wymaga pierwszego naciśnięcia (naciśnij # 2). Następnie można go później zwolnić, aby zaspokoić R
później. Wreszcie, pozostałe PHHHR
można zaspokoić pojedynczym naciśnięciem (naciśnij 3), a następnie przytrzymaniem HHH
i zwolnieniem R
. Tak więc liczba wyjść wynosi 3.
Innym sposobem, aby to zobaczyć, jest to, że możemy podzielić ciąg wejściowy na 3 części formularza, w PHH..HHR
których litery można pominąć.
R
HR
PHHHR
Format wejściowy
Dane wejściowe będą listą lub ciągiem elementów reprezentujących naciśnięcie, przytrzymanie i zwolnienie jako wybór:
P, H, R
p, h, r
1, 2, 3
0, 1, 2
dopasowane w podanej kolejności. Dane wejściowe nie będą puste.
Przypadki testowe:
P 1
H 1
R 1
HP 2
RHP 3
HHR 1
PHRH 2
RHRPHHHR 3
HHHHHH 1
PPRRHHPP 6
HPPRHRPRHPPRHPPHRP 12
PRHRHPHHPRRRHPPRHHPPRRRHRHPRPHPRPRHHRPPPRHPRP 28
Tabela liderów:
Odpowiedzi:
Siatkówka , 9 bajtów
Wypróbuj online!
źródło
Pyth , 13 bajtów
Wypróbuj tutaj! lub Zweryfikuj wszystkie przypadki testowe.
Pamiętaj, że
1
działa również zamiast3
.Jak to działa?
Więcej informacji o wyrażeniu regularnym:
źródło
Galaretka , 10 bajtów
Monadyczny łańcuch pobierający listę (
P,H,R : 0,1,2
opcja) i zwracający liczbę całkowitą - liczba.Wypróbuj online! lub zobacz zestaw testowy
W jaki sposób?
Skutecznie działa poprzez uzyskanie wszystkich sąsiednich par następnie licząc te, które nie są „pary kontynuacja” (
PR
,PH
,HR
, lubHH
) i dodanie jednego.Poprzednie 11 bajtowe rozwiązanie:
Wypróbuj online! lub zobacz zestaw testowy
W jaki sposób?
Działa jak wyżej, ale w zupełnie inny sposób ...
i kolejny, znowu całkiem inny:
(dodaj 19 do każdego, następnie dla sąsiednich par wykonaj potęgowanie, modulo o 13, modulo o 2, sumuj i dodaj jeden).
źródło
Partia, 69 bajtów
Pobiera dane wejściowe jako listę parametrów wiersza polecenia o indeksie 0, ale możesz użyć listy liter
p, h, r
pisanych wielkimi lub małymi literami, jeśli wpiszeszset /a p=0, h=1, r=2
najpierw. Objaśnienie:b
zachowuje ostatnie wejście (domyślnie2
dla zwolnionego) in
liczbę naciśnięć. Każde wejście dodaje naciśnięcie, jeśli ostatnim wejściem było zwolnienie lub bieżącym wejściem jest naciśnięcie.źródło
set
można ustawić wiele zmiennych jednocześnie? Warto wiedzieć.set /a
jest obliczeniem arytmetycznym, więc tak długo, jak wszystkie zmienne, które chcesz ustawić, są liczbowe, możesz po prostu użyć operatora przecinka, aby połączyć wyrażenia przypisania.Python 2, 44 bajty
Wykorzystuje P-> 1 H-> 2 R-> 3
źródło
Najgorsze , 11 bajtów
Wypróbuj online!
Używa wyrażenia regularnego pana Xcodera
źródło
Japt, 11 bajtów
Wypróbuj | Sprawdź wszystkie przypadki testowe
è
zlicza liczbę dopasowań RegEx w danych wejściowych iÉ
odejmuje 1.źródło
Python 2 , 48 bajtów
Wypróbuj online!
Pobiera
0,1,2
jako dane wejściowe.źródło
Łuska ,
65 bajtówWypróbuj online! Dane wejściowe to lista
0,1,2
(link TIO używa liter w celu łatwiejszego wklejania przypadków testowych).Wyjaśnienie
Używam tego samego ogólnego pomysłu, co odpowiedź Jelly'ego Allana : podzielenie na wystąpienia „par nieciągłości” PP, HP, RH, RR i RP, i liczę powstałe bloki. W kodowaniu 0,1,2 pary te są dokładnie tymi, których lewy element to 2 lub prawy element to 0.
źródło
JavaScript (ES6), 30 bajtów
źródło
Haskell , 36 bajtów
Wypróbuj online!
Używa
0,1,2
kodowania.źródło
Galaretka , 10 bajtów
Wypróbuj online! lub pakiet testowy! (
Skradzionypożyczony od Jonathana).Alternatywny:
Wypróbuj online!
Galaretka , 11 bajtów
Zapisano 1 bajt dzięki pomocy Cairney Coheringaahing.
Wypróbuj online!
źródło
μ
z trzeciegoKotlin , 36 bajtów
Upiększony
Test
TIO
TryItOnline
źródło
J ,
1817 bajtów-1 Dzięki @FrownyFrog
Pobiera dane wejściowe w postaci
0,1,2
. Funkcja pomocnicza w TIO konwertuje przypadki testowe do tego formularza.Wypróbuj online!
Logika porównań może być nadal możliwa do gry w golfa. Przekręcam mózg w węzły, próbując wymyślić bardziej równoważne i krótsze stwierdzenia.
Wyjaśnienie (poprzednie rozwiązanie)
Jedyną różnicą między obecnym rozwiązaniem a poprzednim jest sposób generowania porównań. Obecne rozwiązanie wyraźnie porównuje sąsiednie elementy poprzez przesunięcie tablicy, a poprzednie rozwiązanie porównuje sąsiednie elementy, patrząc na przyrostki 2.
Byłoby to o wiele czystsze, gdyby dwa ładownie nic nie zrobiły. Kod przyjmuje dwa ciągi znaków i sprawdza, czy nie rosną, a nie dwa wstrzymania. W takim przypadku dodajemy jeden do naszej ostatecznej liczby. Musimy dodać 1 na końcu, ponieważ w przeciwnym razie jesteśmy o jeden (lub możesz dodać wcześniej
_
dowolną wartość większą niż 2).Sposób, w jaki sprawdza, czy infix jest dwoma blokadami, polega na pomnożeniu dwóch wartości razem i sprawdzeniu, czy jest to jedna (dwie blokady są
1 1
).źródło
1+1#.}:(<+:1=*)}.
jest jeden krótszy.1+1#.0=}.*2-}:
Vim +
wc
, 25 bajtów␊
jest klawiszem powrotu i␘
jest Ctrl+XWypróbuj online!
Wyjaśnienie
źródło