Cel
Napisz program lub funkcję, która przyjmuje dodatnią liczbę całkowitą n
i losowo generuje prawidłową serię podziałek (odtąd zwaną łańcuchem podziałki) o długości n
.
Wejście
Niezerowa, dodatnia liczba całkowita n
<= 100
Wynik
Zwraca losowy ciąg znaków lub listę znaków, które reprezentują możliwy, prawidłowy ciąg długości tonu n
. Użyte postacie to:
- B - Piłka. Jeśli zgromadzisz 4 z nich, pałkarz idzie i kończy mrugnięcie.
- S - Uderzenie. Jeśli zgromadzisz 3 z nich, ciasto się skończy i zakończy mruganie.
- F - Faul. Zwiększy również liczbę uderzeń, ale nie może wydobyć pałkarza. To znaczy, że faul nie może być ostatnim rzutem w prawidłowym ciągu. Jakiekolwiek faule po dwóch uderzeniach / faulach nie zwiększą liczby uderzeń (pałkarz ma już w tym momencie 2 uderzenia, a 3 go wydostanie).
- H - Hit. Pałkarz uderzył piłkę w grę i zakończył mrugnięcie.
(Jest to nieco uproszczone, ale nie martw się o to)
Prawidłowe ciągi znaków to te, które kończą się przekreśleniem, spacerem lub trafieniem.
Tzn. Niepoprawny ciąg znaków ma albo
- dodatkowe boiska po 4. piłce, 3. uderzeniu lub trafieniu
- zakończone przed wygenerowaniem czwartej piłki, trzeciego strajku lub trafienia.
Zasady
- Twój program musi być w stanie wygenerować wszystkie możliwe wyniki dla danych wejściowych.
- Twój program nie musi być jednakowo losowy, ale nadal musi być zgodny z poprzednią regułą.
- To jest golf golfowy .
Przykłady
Input => Possible Outputs
1 => [H] #Can only end with a hit
2 => [S,H], [B,H], [F,H] #Can only end with a hit
3 => [S,S,S], [F,F,S], [B,B,H], ... #Can now strike-out, otherwise must end with a hit
4 => [B,B,B,B], [S,B,S,S], [B,F,S,S], [B,B,B,H], ... #Can now be walked, struck-out, or get a hit
6 => [S,B,S,B,B,H], [F,F,F,F,F,S], ... #Can now have a full-count (3 balls, 2 strikes) before finishing
Input => Invalid Outputs
1 => [S], [B] #Not enough for a strike-out/walk
2 => [S,S] #Not enough for a strike-out/walk
2 => [H,H] #Batter has already scored a hit
3 => [S,S,F] #Fouls will not cause a strike-out
4 => [S,S,S,H] #Batter has already struck out
5 => [B,B,B,B,B] #Batter has already walked
F
S
Odpowiedzi:
Python 2 , 128 bajtów
Wypróbuj online!
Losowo generuj łańcuch pitch, aż ciasto się skończy, wyślij go, jeśli okaże się, że ma odpowiednią długość, a w przeciwnym razie spróbuj ponownie od początku.
Python 2 , 136 bajtów
Wypróbuj online!
źródło
n=8
może wygenerować łańcuchF
s na końcuS/3
żeby(S>2)
to naprawić.05AB1E ,
445044 bajtówPrzekreślony nie
44
jest już 44 :)Port odpowiedzi @xnor na Python 2 , więc upewnij się, że go również głosujesz, jeśli podoba ci się ta odpowiedź!
+6 bajtów z powodu poprawki błędu, a potem -6 bajtów ponownie dzięki @xnor , przenosząc jego znacznie bardziej wydajną poprawkę w porównaniu do mojej tymczasowej obejścia, jak się spodziewałem. ;)
Wypróbuj online lub sprawdź więcej losowych wyników .
Wyjaśnienie:
źródło
X/3
naX>2
.R , 148 bajtów
Wypróbuj online!
Generuje ciąg przy użyciu warunkowego włączenia do zbiorów danych próbkowania, aby upewnić się, że wynikiem jest możliwa sekwencja skoku.
Możliwe, że próbkowanie przy odrzucaniu (jak robi odpowiedź python xnora ) jest krótsze.
Losowe odniesienie „F i S”, które grało mi w głowie za każdym razem, gdy wpisałem jedną z tych liter ...
źródło
JavaScript (SpiderMonkey) , 137 bajtów
Wypróbuj online!
źródło
Pyth, 53 bajty
Wypróbuj online tutaj .
To wydaje się zbyt długie, myślę, że może być konieczne inne podejście.
źródło
JavaScript (ES6),
107 10699 bajtówWypróbuj online!
Skomentował
źródło
Atrament ,
120119116117 bajtówWypróbuj online!
Prawdopodobnie nadal gra w golfa.
Niegolfowany (lekko sformatowany)
Edycje
->->
zamiast zamiast->END
.n
wcześniej.źródło
APL (Dyalog Unicode) , 77 bajtów SBCS
Wypróbuj online!
źródło
Węgiel drzewny , 57 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Zacznij od 0 piłek i 0 uderzeń.
Pętla nad wszystkimi dostawami oprócz ostatniej.
Jeśli były mniej niż trzy kulki, wygeneruj losową liczbę od 0 do 2, w przeciwnym razie po prostu wykonaj rzut monetą od 0 do 1.
Losowa wartość 2 jest piłką, w przeciwnym razie zwiększa liczbę uderzeń.
Wartości od 0 do 2 wskazują na strajk, faul i piłkę, z tym wyjątkiem, że jeśli miałyby być trzy uderzenia, zamiast tego drukowany jest faul. (Cztery kule są wyłączone powyżej.)
Ustal, czy uderzenie lub piłka wydostałoby się z pałkarza, i wybierz odpowiednio jeden lub jeden trafienie.
źródło
Perl 5 , 122 bajtów
Wypróbuj online!
źródło
C (GCC)
164145142 bajtów-3 bajty pułap cat
Wypróbuj online
źródło
&n
zamiasttime(0)