Wprowadzenie
Zagrajmy w minigolfa! Piłkę golfową reprezentuje a, .
a dołek oznacza O
. Chcesz uzyskać dziurę w jednej na każdej dziurze, ale nie jesteś dobry w zakładaniu. W rzeczywistości nie próbujesz układać po przekątnej! Tylko w górę, w dół i na boki.
Masz zamiar oszukać poprzez umieszczenie dodatkowych zderzaki \
i /
tak można umieścić piłkę w jednym strzałem. Piłka odbija się od zderzaków pod kątem prostym, jak pokazano na tym zdjęciu.
Pamiętaj, aby sprawdzić swoją szansę! Powiedz nam, w jakim kierunku się kierujesz.
Dziury
1: Pierwszy dołek jest łatwy, prosty strzał! Nie trzeba tu umieszczać zderzaków.
Wejście:
. O
Wynik:
right
. O
2: Kolejny podstawowy, krótki zakręt. Piłka uderza w zderzak w otwór.
Wejście:
.
O
Wynik:
left
/ .
O
lub
down
.
O /
3: Niektóre dziury mają już zderzaki!
Wejście:
. \O
Wynik:
right
. \O
\/
lub
right
/ \
. /\O
4: Niektóre dziury są zbyt skomplikowane!
Wejście:
/ \ \ /
/ . \ \ /
/ /\/ /\ \ /
/ / / \ \/
/ / /\ \ / \ /
\ \ / \ \/ \/
\ / /
/\ \//\ \ /
/ \ / \ \ \/
\ /\ \ / \ \
\/ \ \/ \ O/ \
/ \/
Wynik: (jedno możliwe rozwiązanie, istnieje więcej)
down
/ \ \ /
/ . \ \ /
/ /\/ /\ \ /
/ / / \ \/
/ / /\ \ / \ /
\ \ / \ \/ \/
/ \ / /
/\ \//\ \ /
\/ \ / \ \ \/
\ /\ \ / \ / \
\/ \ \/ \ O/ \
/ \ \/
\ /
Zasady
- Dane wejściowe to włączony minigolf
STDIN
. - Wyjście jest kierunek trafisz piłkę i otwór do minigolfa z nowo wprowadzanych na zderzaki
STDOUT
. - Istniejących zderzaków nie można przenosić.
- Możesz dodać dowolną liczbę zderzaków, aby rozwiązać dziurę.
- Załóżmy, że istnieją odpowiednie lokalizacje dla zderzaków, które pozwolą rozwiązać kurs w jednym putcie.
- Otwór wyjściowy może być większy niż wejście.
- Dane wejściowe mogą być wypełnione końcowymi białymi spacjami, ale proszę podać w swojej odpowiedzi, jeśli to zrobisz.
- Dane wyjściowe muszą wyglądać poprawnie, ale mogą mieć początkowe lub końcowe białe znaki.
- Twój program powinien działać dla każdej prawidłowej dziury. Możesz również opublikować swoje przypadki testowe!
Punktacja
To jest golf golfowy . Twój wynik to liczba znaków w twoim programie. Najniższy wynik wygrywa!
right
, # 3 przykład 1 powinien byćdown
, a # 3 przykład 2 powinien byćup
. Ciekawe wyzwanie!.
jest piłką, którą uderzasz iO
jest dołkiem. Zepsułem przykład 2 # 1, ale teraz powinny być dobre.Odpowiedzi:
JavaScript (ES6) - 651 bajtów
Tworzy funkcję,
G
która akceptuje ciąg znaków (pole golfowe) jako dane wejściowe i zwraca żądane rozwiązanie wprowadzania. Łańcuch wejściowy może, ale nie musi, mieć linie wiodące, linie końcowe i końcowe białe znaki. Dane wyjściowe nie będą miały początkowych ani końcowych białych znaków.Rozszerzony kod to:
Solver działa w oparciu o założenie, że każda ścieżka z piłki (dołka) też będzie
Śledzimy ścieżkę piłki we wszystkich czterech kierunkach. Jeśli znajdziemy przypadek 3, problem został rozwiązany. Jeśli znajdziemy przypadek 2, zaznaczamy miejsce wyjścia piłki. Jeśli wszystkie cztery kierunki spowodują przypadek 1, przekształcamy pierwszą przestrzeń bez zderzaka wzdłuż dowolnej trajektorii w zderzak (jeśli problem da się rozwiązać, zawsze istnieje taka przestrzeń) i spróbuj ponownie. Zderzak, na który konwertujemy, będzie miał ten sam typ, co ostatni zderzak, z którym spotkała nas trajektoria *. Jeśli piłka nadal utknęła w pętli, powtarzamy ten proces tyle razy, ile potrzeba. Jeśli problem można rozwiązać, procedura ta ostatecznie doprowadzi do wyniku 2 lub 3.
(* Zauważ, że jeśli po prostu przekonwertujemy na stały zderzak [powiedzmy
\
], istnieją wyjątkowo wymyślone, ale mimo to możliwe przypadki, w których istnieje rozwiązanie, ale nie znajdziemy go.)Wykonujemy podobny ślad z dołka, prowadząc do wyniku 2 lub wyniku 3.
Jeśli zarówno ślad kuli, jak i ślad dziury dają wynik 2, umieszczamy zderzaki na obrzeżach trasy, które łączą dwa punkty wyjścia (w rzeczywistości te zderzaki peryferyjne są umieszczane niezależnie od wyników śledzenia, aby skrócić kod). To uzupełnia rozwiązanie.
Przypadki testowe i wyniki
W
Na zewnątrz
W
Na zewnątrz
W
Na zewnątrz
źródło
"/\\/\\\n\\.//\n// \\\n\\/ \no \\/"