Dawno, dawno temu, kiedy spędzałem więcej czasu grając w RPG, jednym z problemów, jakie mieli niektórzy gracze, było śledzenie ruchu drużyny i narysowanie odpowiedniej mapy. Wpadłem na pomysł, żeby sprawdzić, jak sobie radzicie z tym problemem.
Zadanie polega na napisaniu funkcji, która jako listę parametrów wejściowych przyjmuje kierunki (przekazane jako wybrana przez Ciebie struktura) ^v<>
, wyświetla mapę lochu. Na przykład dla danych wejściowych: >>>vvv<<<^^^
wyjście będzie:
+----+ +----+
| | |>>>v|
| ++ | |^++v|
| ++ | because |^++v|
| | |^<<<|
+----+ +----+
Przypadki testowe
>>>>>>vvvvv<<<<^^^>>v
+-------+
| |
+-+---+ |
| | |
| + | |
| +-+ |
| |
+-----+
^^^^^vvv<<<^^vv>>>>>>>>vv>><<^^^^v>>>>v^<^
+-+
+-+| | +-++-+
| || | | ++ ++
| ++ +-+ |
| +-+ |
+--+ +-+ +-+-+
| | | |
+-+ +---+
Ponieważ jest to wyzwanie dla kodu golfowego, wygrywa najkrótszy kod.
Wesołego golfa.
EDYCJA Przepraszam za późną edycję, ostatnio nie miałem dużo czasu.
Mapa jest generowana na podstawie ruchu. Powinien zawierać tylko korytarze, które odwiedzono podczas spaceru. Dlatego utworzenie jednego dużego pokoju nie będzie prawidłową odpowiedzią.
Na mapie znajdują się trzy prawidłowe symbole:
|
pionowa ściana|
ściana pozioma+
przecięcie ściany pionowej i poziomej.
Maksymalna długość ścieżki wynosi 255 znaków (ale jeśli możesz, nie ograniczaj się).
Więcej przypadków testowych:
><><><><
+--+
| |
+--+
>^<v
+--+
| |
| |
+--+
Mam nadzieję, że teraz wszystko jest jasne.
vvv>>^^^<<
będzie produkować (krzyże rur?)Odpowiedzi:
JavaScript (ES6),
261254243 bajtówJSFiddle
źródło
return
przez zastąpienie;
z,
oraz{}
z()
for
pętla, której nie można osadzić w ten sposób.{
zeval("
i}
w")
celu usunięcia powrotne codegolf.stackexchange.com/a/80967/41042'\\n'
, jakbym to zrobił. Jeśli policzę poprawnie, to faktycznie prowadzi do +1 bajtu. Czy jest lepszy sposób na osadzenie podziału linii w eval?\n
ponieważ ciągi szablonów obsługują dosłownie nowe wiersze, ale nadal pozostawiłoby to tę samą liczbę bajtów. No cóżC, 246 bajtów
Traktuje dane wejściowe jako osobne znaki, na przykład:
Lub wygodniej ten (celowo nie cytowany!) Format:
Lub dla (dość nieefektywnego) losowego wprowadzania danych:
I wreszcie, użycie
awk
do przycięcia wyniku oznacza, że możemy stać się znacznie większy:Wyjścia na standardowe wyjście. Wykorzystuje fakt, że dopełnienie jest dozwolone wokół mapy (tworzy mapę, która ma długość krawędzi 2 * n + 1, umieszczając ostateczną pozycję na środku).
Awaria
Działa to poprzez zapętlanie argumentów w odwrotnej kolejności i poruszanie się w odwrotnej kolejności. Wykorzystuje fakt, że arg 0 jest nazwą programu; nie ma znaczenia, jak się nazywa, ale pozwala nam odwiedzić zarówno początkową, jak i ostatnią komórkę (a także wszystkie komórki pomiędzy nimi) bez potrzeby specjalnej obsługi.
źródło