Wyzwanie
Zainspirowani tym wyzwaniem i nieprzyjemnym huraganem Matthew będziemy dynamicznie wytwarzać błyskawice.
n
= 15:
\
/\
/ \
/ /
/\ /\
/ \ \
/ / /\
/\ \
/ / \
/\ \ /\
/ \ \
/\ /
\
\
/\
Wkład
Dodatnia liczba całkowita n
określa głębokość rundy błyskawicy.
Zasady i ograniczenia
/
i\
należy go użyć- Prawdopodobieństwo kierowania pioruna jest następujące:
- 25% Dzieli się na 2 ścieżki
- 25% Ścieżka osiąga ślepy zaułek
- 25% idzie w lewo
- 25% idzie dobrze
- Istnieje kilka wyjątków dotyczących nakładania się i ślepej uliczki poniżej:
- Kod nie powinien być deterministyczny, nowa błyskawica powinna być generowana losowo za każdym razem
- Śruby nie powinny zachodzić na siebie: np. Jeśli jest już śruba po lewej stronie aktualnej śruby, bieżąca śruba powinna albo się zakończyć, albo pójść w prawo, ale nie iść w lewo lub podzielić (prawdopodobieństwo nadal obowiązuje, w tym przypadku staje się 50% końcem / 50% prawo)
- Jeśli nie istnieje inna dostępna ścieżka podziału, ścieżka nie powinna się kończyć: np. Na początku, gdy jest tylko 1 ścieżka, ścieżka nie powinna się kończyć, dopóki się nie podzieli, ma również zastosowanie, gdy istnieje wiele ścieżek, ale wszystkie oprócz jednej ścieżki są martwe , (prawdopodobieństwo zmienia się w 33% / 33% w lewo / 33% w prawo) Twoim celem jest osiągnięcie dolnej granicy
- Białe spacje można dodać po lewej stronie (wszystko, czego potrzebujesz, to tylko wysokość-1)
- Niezależnie od tego, czy chcesz wygenerować śrubę, zależy od Ciebie, możesz przejść od dołu do góry, od lewej do prawej itp. O ile wszystkie powyższe reguły są spełnione
Inny przykład
n
= 10
\
/
\
/\
/\
/ /
/\ \
/ /\
\ \
/
Bądź bezpieczny i baw się dobrze grając w golfa! Proszę grać w golfa odpowiedzialnie tylko w bezpiecznym miejscu !!
Stay safe and have fun golfing!
Może także sprecyzować, że jeśli EAS uderzy, porzuć wszystko i wykonuj rozkazy! W takiej sytuacji kod golfowy nie jest Twoim priorytetem.\/
w dowolnym momencie.Odpowiedzi:
Perl,
92908984 bajtówObejmuje +1 dla
-n
Podaj wysokość STDIN:
bolt.pl
:Wyjaśnienie
Jeśli wywołasz przesunięcie punktu początkowego 0 (punkt znajduje się na rogu pola znaków), to w następnym rzędzie możesz przejść w lewo lub w prawo (lub nie) i może skończyć się punktami na przesunięciach
-1,1
. Następny wiersz podaje-2,0,2
możliwe przesunięcia itp. Wszystkie różnią się o 2. Jeśli następnie wywołasz znak w dolnej lewej części punktu parzystej, a znak w dolnej prawej parze nieparzystej, możesz rozszerzyć tę funkcję o przypisanie parzystej lub nieparzystej pozycji każdej postaci w rzędzie takim, że parzysta i nieparzysta naprzemiennie (w rzeczywistości cała płaszczyzna jest wyłożona kafelkami). Pozycja parzysta może mieć/
lub, a pozycja nieparzysta może mieć
\
lub.
Postać tuż przed
/
jest w dziwnym położeniu więc to może być\
albo, ale
\/
zabronione jest więc tylkojest to możliwe. Podobnie znak po a
\
musi być a(zakładając, że wiersz jest wypełniony wystarczającą ilością miejsca po lewej i prawej stronie, więc granice wierszy nie stanowią problemu). Tak więc błyskawica kontynuuje w następnym rzędzie zawsze bezpośrednio pod a
\
lub poniżej a/
. W każdym przypadku, temperatura w dolnej połowie i następny rząd może mieć jeden,
/
,\
lub/\
bezpośrednio poniżej 2 górnych znaków. Aby wygenerować następny wiersz, mogę po prostu zastąpić dowolny\
lub/
przez dowolne z tych 4 rozszerzeń z jednakowym prawdopodobieństwem (możesz również niezależnie zastąpić pierwszy znak przezlub,
/
a drugi znak przezlub
\
). W Perlu możesz to zrobić za pomocą czegoś takiego:Jeśli wynikowy rząd zawiera jednak
\/
(zabronione łączenie) lub nie ma go wcale/
lub\
wcale (śruba umiera i nie dochodzi do dołu) wynik jest nieprawidłowy. W takim przypadku wyrzucam cały rząd i po prostu próbuję ponownie. Prawidłowa kontynuacja zawsze istnieje, a jeśli spróbujesz wystarczająco często, znajdziesz ją (np. Wszystko umiera oprócz 1 przepływu). Jest to nieco inny rozkład prawdopodobieństwa niż sugerowany algorytm zapobiegający nakładaniu się, ale myślę, że w rzeczywistości jest to lepsze, ponieważ nie ma ukierunkowania kierunkowego. Ważność może być testowana w golfowy sposób przy użyciuProblem polega na tym, że losowe podstawienie jest tak długie, a wszystkie te
\
ucieczki również jedzą bajty. Więc postanowiłem zbudować moje wiersze używając ciągi cyfr i wymienić odpowiednie cyfry,
/
a\
tuż przed drukowaniem. Podstawowym losowym zamiennikiem jestco daje jeden
53
,55
,61
lub63
z jednakowym prawdopodobieństwem. Następnie interpretuję5
i1
jako,
3
jako\
i6
jako/
. To wyjaśnia wydruk wiersza:W poważnych zawodach golfowych zacznę teraz systematycznie badać alternatywne formuły magiczne, ale powinno to być całkiem dobre (w granicach 3 bajtów od optymalnego)
Reszta składników programu:
Inicjuje się
$_
(patrz następna mapa) do wysokości pomieszczeń, po których następuje/
. Jest to niewidoczny rząd nad pierwszym drukowanym wierszem i upewnia się, że pole jest wystarczająco szerokie, aby śruba nigdy nie zabrakło miejsca po lewej stroniePrzetwarzam ten sam początkowy ciąg znaków razy drukując nowy wiersz za każdym razem
Zapisz bieżący wiersz w
$;
. Jeśli wymiana okaże się nieprawidłowa, przywróć$_
z$;
Dokonaj rzeczywistej zamiany. Nie muszę sprawdzać, co jest przed
/
ani po,\
ponieważ musi to być spacja. Jest to wygodne, ponieważ przestrzeń może być reprezentowana przez jeden1
lub5
. Ponieważ dopełniłem ciąg tylko w lewo, spacja po tym, jak\
nadal może być nieobecna, więc ustaw tę postać opcjonalnieSprawdź, czy nowy wiersz jest prawidłowy
źródło
perl -M5.010 main.pl <<< 25
, otrzymałem kilka dobrych wyników!-n
, ponieważ liczą się także spacja i myślnik. Ta sama zasada dotyczy argumentów wiersza poleceń. Zobacz „Specjalne wywołania”, drugi punkt: Liczę je jako różnicę liczby postaci do najkrótszego równoważnego wywołania bez nich.-nE
tylko 1 znaku więcej niż-E
(zobacz artykuł, do którego się odwołujesz. Pozbywa się również potrzeby-M5.010
) Zawsze prezentuję mój kod jako pliki, ponieważ jest wygodniejszy, ale zawsze liczę takie opcje: Jeśli można go uruchomić z wiersza poleceń, nie liczę spacji i myślnika. Jeśli musi być w pliku (np. Ponieważ używado$0
) , liczę miejsce i myślnik-E
. Jeśli tak, jesteś dobry.JavaScript (ES6), 154 bajty
Zmagałem się z implementacją, dopóki nie zobaczyłem odpowiedzi @ TonHospel. W tym momencie po prostu zdegenerowała się w port. Przykładowe dane wyjściowe:
źródło