Super Mario Galaxy zawiera dwieplanety w kształcie rombu o kształcie kwadratu * wyłożone kafelkami z platformami, które kurczą się, gdy Mario biegnie. Jeśli Mario wpadnie w trójkątną dziurę lub szczelinę pozostawioną przez wcześniej dotknięty kafelek, zostanie pochłonięty przez czarną dziurę w rdzeniu. (Oglądaj: Hurry-Scurry Galaxy , Sea Slide Galaxy )
Zdjęcie: MarioWiki.com
(Możesz myśleć o planecie jako sześcianie 2x2x2, którego twarze zostały odłączone i połączone ze sobą 2x3 „mostami”.)
Niestety, ponieważ mój kontroler jest bardzo zepsuty, Mario nie może skakać i ogranicza się do czterech głównych kierunków. Dodatkowo Mario porusza się bardzo powoli i nie może cofnąć się nawet o jeden krok bez uprzedniego zniknięcia platformy za sobą.
Załóżmy, że kamera zawsze znajduje się nad głową Mario, a on zaczyna w prawym dolnym rogu twarzy 2x2:
■ ■
■ ■
■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ M ■ ■ ■
■ ■
■ ■
■ ■
Twój program pobierze listę lub ciąg wskazówek U
D
L
R
(w górę, w dół, w lewo, w prawo), reprezentujących marsz Mario wokół planety do tej pory jako szereg kroków. Program może wysyłać jeden z dwóch różnych wyników: jeden reprezentujący, że Mario wciąż żyje i idzie, a drugi reprezentujący to, że gdzieś w trakcie marszu Mario wpadł do zmniejszającej się satelity.
RR: ■ ■ RRD: ■ ■ RRL: ■ ■
■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ □ □ M ■ ■ ■ ■ ■ □ □ □ ■ ■ ■ ■ ■ □ M □ ■
■ ■ \ ■ ■ M ■ ■ \
■ ■ Let's-a go! ■ ■ \ ■ ■ W-aaaaaaaaaahh!
■ ■ ■ ■ W-aaaaaaaaaahh! ■ ■
Oczywiście, w przeciwieństwie do powyższych diagramów, będziesz musiał wziąć pod uwagę 3D. Oto schemat, który może pomóc w lepszej wizualizacji scenariusza:
Top 2x2 face
<- clockwise anticlockwise ->
- ■ - ■ - ■ - ■ -
/ \ / \ / \ / \
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ Left and right
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ M ■ ■ ■ ■ ■ ■ ■ ■ ■ edges wrap around.
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
\ / \ / \ / \ /
- ■ - ■ - ■ - ■ -
<- anticlockwise clockwise ->
Bottom 2x2 face
Zgodnie z tym diagramem UUUUURRRR
może wyglądać następująco:
- ■ - ■ - □ - ■ -
/ \ / \ / \ / \
■ ■ ■ ■ □ □ ■ ■
■ ■ ■ ■ □ □ ■ ■
■ ■ ■ ■ □ □ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ M ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
\ / \ / \ / \ /
- ■ - ■ - ■ - ■ -
I UUUUUUUUULURRRRRR
może wyglądać tak:
- ■ - ■ - □ - □ -
/ \ / \ / \ / \
■ ■ ■ ■ □ ■ ■ □
■ ■ ■ ■ □ ■ ■ □
-> □ ■ ■ ■ □ ■ ■ □ ->
<- □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ M □ □ □ □ □ <-
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
\ / \ / \ / \ /
- ■ - ■ - ■ - ■ -
Niech najkrótszy program w bajtach w-aaaaaaaaaah!
Przypadki testowe
Wyjście 1: wciąż żywe
DDDDDLUUUUU
- Mario idzie przez most iz powrotem.
RRRRDDDDLLL
- Mario chodzi w trójkącie.
LLLLLLUUUUUURRRRR
- Mario chodzi w większym trójkącie.
ULLDRDDDRU
- Mario naraża się na niebezpieczeństwo.
RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRR
- Mario wybiera niekonwencjonalną drogę ... i naraża się na niebezpieczeństwo.
Mario przecina każdą płytkę dokładnie raz.
DDDDLUUUULLLLDDDLUUULLLLDDDDLUUUULLLLDDDLUUULLLURRRUUURDDDRRRRUUURDDDRRRRUUURDDDRRRRUUUUURDDDDD
DLDRDLDLLLDRRRDDDDLLLLLLLLLDRRRRRRRRRDDDDLLLDRRRDDDRUUURRRRULLLLUUUURRRULLLUUUUURDRURDRUURULURU
Wyjście 2: W-aaaaaaaaaah!
LLR
- Mario próbuje cofnąć się o krok i spada.
UULDR
- Mario próbuje dwukrotnie przejść przez kafelek i wchodzi w powietrze.
RRDDDDD
- Mario wychodzi z mostu w pierwszym D (zignoruj kolejne kroki).
RRRRDDDDLLLL
- Mario chodzi w trójkącie i spada przez płytkę początkową.
LLLLLLUUUUUURRRRRR
- Mario idzie większym trójkątem i spada przez płytkę początkową.
UUUUUUUUUUUUUUUUUUUU
- Mario chodzi dookoła planety i spada przez płytkę początkową.
RURDRURDRDLDRDLDLDLULDLLUU
- Mario wybiera niekonwencjonalną trasę i staje się zdezorientowany.
Mario, zdając sobie sprawę z niebezpieczeństwa, w którym się znajduje, nie ma wyboru.
ULLDRDDDRUUU
ULLDRDDDRUUL
ULLDRDDDRUUR
ULLDRDDDRUUD
RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRRR
RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRRU
RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRRL
RURDRURDRDLDRDLDLDLULDLLLLLLLLLLLLLLLLURRRRRRRRRRRRRRD
Na koniec skopiuj dowolny przypadek testowy z „Mario krzyżuje każdy kafel dokładnie raz” i zmień lub dodaj losowo jeden krok. Mario powinien upaść. (Jeśli dodasz krok do końca, Mario upada po Power Star!)
* Kantellowany sześcian byłby bardziej poprawnym terminem, ponieważ niektóre twarze nie są kwadratowe, ale musisz przyznać, że „rombowo-kwadratowy” płynie ładniej.
źródło
R
. Opracowałem to na papierze, aby upewnić się, że mój kod jest poprawny.Odpowiedzi:
Rubinowy, golfowy,
244230 bajtówWydaje się, że działa dobrze, przetestuje trochę więcej.
Ruby, pierwsza działająca wersja, 260 bajtów
Wypróbuj online
Funkcja lambda przyjmująca argument ciągu. Zwraca 4 za żywych, 0 za martwych.
Wyjaśnienie
Plansza jest rozłożona na 6 pasków o rozmiarze 2x8, reprezentowanych przez znaki
/\
iO
poniżej. Są one odwzorowane na mapie 2D 24 * 8, gdzie x = (numer paska) * 4 + (pozycja pozioma na pasku), ay = pozycja pionowa na pasku.Są one przechowywane w tablicy 8 liczb binarnych, więc x zwiększa się w lewo, a y rośnie w dół.
Tablica jest zainicjalizowana 8 kopiami numeru
0x33333333
. To tworzy kwadraty, na które Mario może nadepnąć. Gdy Mario porusza się po kwadracie, na którym się znajduje, jest ustawiony na zero, a kwadrat, na który się porusza, jest testowany - żyje, że zawiera 1, i umiera, jeśli zawiera 0.Jeśli Mario zejdzie z górnej lub dolnej części paska, na którym jest, przechodzi do innego paska. Jeśli zejdzie z boku paska, jest na nim, jeśli jest na kwadracie z y = 3 lub y = 4, przechodzi do innego paska. Jeśli y nie jest równe 3 lub 4, nie przesuwa się do innego paska i kończy na polu, na którym od początku było 0, więc umiera.
Ponieważ kamera jest zawsze nad głową Mario, za każdym razem, gdy Mario zmienia pasek, odniesienie dla kierunków musi zostać obrócone o 90 stopni.
Niegolfowany w programie testowym
źródło