Napisz program lub funkcję, która przyjmuje dodatnią liczbę całkowitą N (za pomocą stdin / wiersza poleceń / funkcji arg) i wypisuje lub zwraca ciąg reprezentujący dwuwymiarowe losowe przejście o długości N kroków, narysowane ukośnikami: /
\
(plus spacje i nowe linie dla odstępów).
Spacer losowy 2D rozpoczyna się u źródła nieskończonej sieci całkowitej . Następnie kilkakrotnie N razy kierunek główny (w górę, w dół, w lewo, w prawo) jest losowo wybierany równomiernie, a piechur porusza się o jedną jednostkę w tym kierunku. Otrzymana ścieżka jest losowym spacerem.
Oto losowy spacer dla N = 6. Zwróć uwagę, że wraca on z powrotem po osiągnięciu (-1, 3).
Aby narysować to ukośnikami, musimy zasadniczo obrócić całość o 45 ° zgodnie z ruchem wskazówek zegara. Osie oraz punkty początkowy i końcowy nie są rysowane w wersji ukośnej.
/
\
\
/\
Bardziej złożony spacer taki jak ten (N = 20, choć nie ma sposobu, aby powiedzieć):
Byłby to:
/
/\/ /\
\/\/
/\/
\/
Twój program musi wygenerować tego typu ukośne wersje losowych spacerów. Ci muszą losowo wybrać każdy nowy kierunek Spacer trwa, więc każda prowadzenie programu dla pewnego N będzie prawie na pewno produkować inny spacer. (Pseudolosowość jest w porządku.)
Nigdy nie powinny być żadnych pustych linii powyżej lub poniżej najniższych i najwyższych ukośników (z wyjątkiem jednej opcjonalnej nowej linii końcowej), i nigdy nie powinny być puste kolumny odstępów przed lub po skrajnych lewych i skrajnych prawych ukośnikach.
Tak więc dla N = 1 wynik zawsze /
lub \
, ale nigdy coś takiego:
/
Końcowe spacje są dozwolone, o ile nie przechodzą obok kolumny skrajnego prawego ukośnika.
Zgłoszenie z najmniejszą liczbą bajtów wygrywa. Oto przydatny licznik bajtów.
Odpowiedzi:
Pyth, 74 bajty
Jeszcze bardziej zoptymalizowane tłumaczenie odpowiedzi Uri Zarfaty'ego.
źródło
"\
- oczywiście nie ma przypadkowości, ale za każdym razem jest to prawidłowy spacer!Python 2,
300285257246236 bajtówCoś na początek. Powinno być możliwe dalsze zmniejszenie tego. Dzięki @Maltysen za golenie 10 bajtów.
Generuje wyjście marszu do słownika G odwiedzonych krotek (x, y), aktualizując naszą lokalizację w miarę upływu czasu. Każdy losowy krok n jest zarówno u / d (u), jak i l / r (l).
źródło
"".join
wj in f(1)
pętli i drukowanie bezpośrednio.PHP 5.5 - 209 bajtów
Nie golfowany:
Rozpoczęłam pracę nad odpowiedzią PHP od zera, ale ostateczny kod zbyt bardzo przypominał pracę @Uri Zarfaty, więc naprawdę nie miałem odwagi go opublikować. Zamiast tego przeniesiono odpowiedź z kilkoma modyfikacjami. Wpycha wartości x / y do tablic
$X
i$Y
określa min / maks w pętli wyjściowej.Stosowanie:
źródło
Pyth - 89
Jest to w zasadzie tłumaczenie odpowiedzi Uri Zarfaty'ego, chociaż dokonałem pewnych optymalizacji.
Wyjaśnienie już wkrótce.
Wypróbuj tutaj .
źródło