Wprowadzenie
Dla tych, którzy nigdy wcześniej nie słyszeli o tej grze. Grasz piłką, która musi przetrwać tak długo, jak to możliwe. Odbywa się to poprzez przesunięcie w lewo lub w prawo, przejście do dziur. Ponieważ mapa porusza się w górę, musisz zejść w dół, aby przeżyć dłużej. Jeśli szukać dla obrazów, pewnie wiecie, który gra mi chodzi.
Zadanie
Biorąc pod uwagę dodatnią liczbę całkowitą n , wyprowadza spadającą mapę kuli n warstw. Pomiędzy warstwami znajdują się 4 nowe linie. Szerokość warstwy składa się z 25 znaków podkreślenia, z jednym otworem o długości 5. Oznacza to, że całkowita szerokość jest równa 30. Jest to losowo przesuwane po każdej warstwie. Przykład prawidłowej warstwy to:
_______________ __________
Otwór może znajdować się również na krawędziach, tak jakby warstwa była jak walec:
_________________________
Pamiętaj, że są 2 wiodące spacje i 3 końcowe spacje. Wykonanie pojedynczego otworu o szerokości 5.
Przypadki testowe
Dla n = 4 jest to poprawny wynik:
_______________ __________
______ ___________________
_______________________ __
_________________________
Uwaga: otwory muszą być równomiernie rozmieszczone. Dozwolone są końcowe i / lub wiodące znaki nowej linii.
To jest golf golfowy , więc wygrywanie z najmniejszą ilością bajtów wygrywa!
Odpowiedzi:
Pyth, 19 bajtów
Wypróbuj tutaj!
Wyjaśnienie
źródło
Ruby,
747159Podziękowania dla Alexa A. za przypomnienie mi, że bycie w zasadzie jedną linią oznacza, że mogę używać mocnej lambdy
źródło
puts
dodaje nowy wiersz na końcu (podczas gdy Rubyprint
nie), więc został zaktualizowany do5
nowego wiersza.times
funkcja oszczędzania mi 3 bajty nafor
pętli: D->n{n.times{puts (('_'*25+' '*5)*2)[rand(30),30]+"\n"*5}}
Spróbuj tutaj(->n{n.times{puts (('_'*25+' '*5)*2)[rand(30),30]+"\n"*5}})[input]
lub po prostu określić, że musisz go przypisać, aby go wywołać. Jest to dość powszechne na stronie.Julia, 72 bajty
Jest to anonimowa funkcja, która przyjmuje liczbę całkowitą i zwraca ciąg znaków. Aby go wywołać, przypisz go do zmiennej.
Tworzymy ciąg 25 znaków podkreślenia, po których następuje 5 spacji, a następnie rozpieszczamy to na tablicę znaków. Przesuwamy go cyklicznie losową liczbę razy (od 1 do 30), łączymy z powrotem w łańcuch i przyczepiamy do 5 nowych linii. Ten proces powtarza się n razy, gdzie n jest wejściem. Powstała tablica jest łączona i zwracana.
Wypróbuj tutaj
źródło
PowerShell 65 bajtów
Uruchom pętlę dla n iteracji. Zdobądź losową liczbę i utwórz ciąg podkreślenia z 5 spacjami na końcu. Indeksuj do łańcucha jako tablicę, aby wyciągnąć, zaczynając od losowej lokalizacji. Negatywne indeksowanie zawija od końca. Dołącz ponownie i dodaj 5 nowych linii.
Edycja: Nie wiem, dlaczego myślałem, że potrzebuję parametru,
-Maximum
ponieważ jest on pozycjonowany. Dzięki TimmyD ogoliłem trochę bajtów i zapomniałem uzyskać dane wejściowe, dzięki czemu wróciłem do 65.źródło
Pyth, 19 bajtów
Wypróbuj tutaj
Dzięki FryAmTheEggman za złapanie błędu.
źródło
SpecBAS - 93 bajty
Robi ciąg 25 znaków podkreślenia + 5 spacji, wybiera losowy punkt początkowy i dzieli ciąg w tym miejscu i odmienia początek łańcucha do końca.
Apostrof wymusza nową linię, więc 1 na końcu łańcucha i 4 puste linie.
źródło
MATL , 23 bajty
Wypróbuj online!
Wyjaśnienie
źródło
Java,
177140 bajtów-1 bajt na niebieski przenoszący i ++
-2 bajty do mnie, pozostawiając bez znaczenia białe znaki w oryginale
-34 bajtów do Blue za uświadomienie sobie, że wcale nie potrzebuję char []
Ponieważ, wiesz, Java.
Nieznacznie nie golfista:
Ponieważ Java nie ma „rotacji” napisów, musiałem zastosować inne podejście. Wygenerowałem losowy int 0-29, który reprezentuje indeks początkowy dołka (OBO, ponieważ
>
jest krótszy niż>=
). Każda indywidualna postać jest następnie ustalana przez logikęTo obsługuje „zawijanie” natury całości.
źródło
s = ""
). Oba są teraz naprawione.Python 3.5 -
109113 bajtów (+4 do drukowania 4 nowych wierszy między każdym wynikiem):Nieskluczona forma:
Zasadniczo chodzi o to, że ciąg „j”, składający się z 25 podkreślenia, po którym następuje 5 spacji, jest podawany jako argument funkcji „g”. Następnie moduł losowy jest importowany i tyle razy, ile określa użytkownik, w zakresie wybierana jest liczba losowa
0 => 29
, a ciąg „j” jest przesuwany w prawo tyle razy. Wynik jest następnie drukowany po każdej iteracji, z 4 nowymi wierszami między każdym wynikiem.źródło
'\r'
na'\r'*4
powinna prawdopodobnie działać. Także myślę, że można zmienićrange(a+1)
narange(a)
.range(a)
faktycznie drukujea-1
liczbę linii, więcrange(a+1)
jest to najlepszy sposób na wydrukowanie dokładnej liczby linii podanych przez użytkownika. Ponadto drukuje teraz 4 nowe linie między każdym wynikiem.g(5)
i drukuje 6 ciągów zamiast pięciu, więc zmianaa+1
naa
to prawdopodobnie to naprawi.Python,
119103 bajtówźródło
n
czasy wierszy