Powiedzmy, że coś pisałem i przypadkowo napisałem to w niewłaściwym polu:
+-------+--------+
| Verbs | Nouns |
+-------+--------+
| Truck | |
| eat | Banana |
| | Car |
+-------+--------+
Więc, będąc leniwym, po prostu narysowałem strzałkę w przestrzeń, którą powinna być:
+-------+--------+
| Verbs | Nouns |
+-------+--------+
|[Truck]---> |
| eat | Banana |
| | Car |
+-------+--------+
Twoim zadaniem jest, aby wyglądał ładnie - zmień go w następujący sposób:
+-------+--------+
| Verbs | Nouns |
+-------+--------+
| | Truck |
| eat | Banana |
| | Car |
+-------+--------+
Zasady
- Zwroty lub słowa są otoczone nawiasami ([...])
Wpisy wielowierszowe są oznaczone jako [...](usunięto wielowierszowy), nowa linia, [...] --...-->. Tak więc strzałka zawsze wychodzi z prawegodolnegowspornika
Na przykład:
+-----------+----------+
| Verbs | Nouns |
+-----------+----------+
| | |
|[is a noun]-> |
| eat | Banana |
| | Car |
+-----------+----------+
Zamienia się w:
+-----------+----------+
| Verbs | Nouns |
+-----------+----------+
| | |
| | is a noun|
| eat | Banana |
| | Car |
+-----------+----------+
- Pola są ograniczone plusami („+”) i należy założyć, że strzałki nie przejdą przez plus
- Na końcu strzałki zawsze będzie miejsce na dopasowanie słowa lub frazy
- Kolejność ma znaczenie - słowo musi pojawić się w miejscu wskazanym przez strzałkę, chociaż wyrównanie w pionie nie jest ważne
- Strzały mogą obracać się o 90 stopni na raz, ale tylko między „/” a „\” (patrz poniżej)
Na przykład:
+-----------+----------+
| Verbs | Nouns |
+-----------+----------+
| [Truck]--\| |
/------------/| <--\
| | eat | Banana ||
| | /--\ | Car ||
| +--|--|-----+----------+|
\----/ \-----------------/
Konkurs
Każde wejście jest dopuszczalne (plik tekstowy, STDIN itp.)
Każde czytelne wyjście jest dopuszczalne (plik tekstowy, STDOUT itp.)
Oto kilka innych przykładów:
To jest golf golfowy, więc wygrywa najkrótszy kod!
Niektóre przypadki testowe:
+--------+----------+-------------+
| Colors | Foods | Countries |
+--------+----------+-------------+
| red | pizza | Switzerland |
/--> /----> | |
| |[kale]/ | hot dogs | Brazil |
| | <----------------------\ |
| | orange |[yellow]\ | [green]/ |
| +--------+--------|-+-------------+
\-------------------/
/------------------------------------------\
| |
| +------------------+----------+-------+ |
| | frog | | | |
| | forge | dog | eagle | |
| | foundation | diligent | ease | |
| |[Brother]--\ | down | elf | |
| | | |[egg]--\ |[fort]---/
\----> | | | | |
| \-\ | \-----> |
+-------------|----+----------+ |
| Boy \--> | |
| Bull | |
| Browser | |
+-----------------------------+-------+
/--------------------------------------\
| /---------------\|
/------------|---------------------/ ||
| | /---------------\ ||
| +---------|-+-----------+-|------+--------|+ ||
\----> | | clarinet | \> | [drums]/| ||
| [viola]\\---> | +---------+ ||
| \-----> | | |/---/|
+-----------+ [violin]\ | | [cello]--/ |
| <------------/ | +---------+ |
| +-----------+ <----------\| |
| | | | [tuba]/| |
| | [piano]\ | | | |
| <-----------/ | | | |
| +-----------+--------+ | |
| | |[trumpet]------/
| [flute]-----> | |
| | saxaphone | |
+-----------+--------------------+---------+
Odpowiedzi:
Python,
700681676667 znakówJeszcze nie w pełni grał w golfa, ale chciał znaleźć odpowiedź.
Strategia :
Przekształcam dane wejściowe w macierz. Następnie skanuję go linia po linii, znajdując
[
s. Dla każdego[
znajduję dopasowanie]
, a następnie wywołuję funkcję śledzeniaT
z miejscem bezpośrednio po prawej stronie]
. Funkcja śledzenia podąża za linią, zastępując ścieżkę' '
s, gdy idzie, i zwraca tam, gdzie słowo powinno się udać. Następnie usuwam słowo ze starej lokalizacji i umieszczam je w nowej lokalizacji.Wreszcie dzwonię
F
, co rekurencyjnie rekonstruuje pudła.Testy :
źródło