W związku z wieloma (dwoma?) Wyzwaniami związanymi z FizzBuzz opublikowanymi niedawno na PPCG, miałem ochotę wymyślić własne. Ujrzeć...
Fizz Buzz Astral
Napisz program lub funkcję, która pobiera liczbę całkowitą n
i drukuje FizzBuzz
dla dowolnej liczby podzielnej przez 15, Fizz
dla dowolnej liczby podzielnej przez 3, i Buzz
dla dowolnej liczby podzielnej przez 5, do (włącznie) n
. Po wyjściu dla wszystkich i
musi następować nowy wiersz. Ale jest zwrot akcji!
Za każdym razem, gdy drukujesz po raz trzeci Buzz
, Buzz Lightyear w końcu rozpoznaje twoje połączenie i zawiesza się w twoim programie. Następnie przedstawia się - ale od czasu katastrofy wylądował, niektóre z jego wypowiedzi mieszają się z wynikami twojego programu:
Buzz Lightyear, Space Ranger, Universe Protection Unit.
FizzBuzz Lightyear, Space Ranger, Universe Protection Unit.
(czyli tylko Dołącz Lightyear, Space Ranger, Universe Protection Unit.
do Buzz
lub FizzBuzz
- bez względu na to, że masz wyświetlane inaczej Uwaga wiodącej przestrzeni).
Jednak Buzz Lightyear, który jest Kosmicznym Łowcą, ma bardzo ostry słuch, więc drukowanie FizzBuzz
będzie się liczyło do twojej Buzz
liczby .
Następnie Buzz pozostaje w pobliżu, aby obronić komputer przed całym tym złym wynikiem, dopóki nie trafisz innej liczby, która jest podzielna przez 5 (lub 15, ponieważ one również są podzielne przez 5). Oznacza to, że dopóki nie będziesz musiał drukować Buzz
(lub FizzBuzz
) ponownie, nic nie drukujesz.
Gdy w końcu osiągniesz ten warunek, Buzz odchodzi:
To infinity and beyond!
Przykładowy wynik
Jest to oczekiwany wynik dla n = 25
: (zauważ, jak przeskakuje od 16 do 19)
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz Lightyear, Space Ranger, Universe Protection Unit.
To infinity and beyond!
Fizz
22
23
Fizz
Buzz
Zasady
Opcjonalny znak nowej linii jest dopuszczalny.
To jest kod golfowy; jako taki, najkrótszy kod w bajtach wygrywa.
Załóżmy, że podane n
jest prawidłowe i większe niż lub równe 15 (to jest, gdy wyzwanie najpierw odbiega od standardowego fizzbuzz)
Buzz wita się, gdy „Licznik buzzów” (który liczy oba Buzz
i FizzBuzz
) osiągnie 3; odchodzi, gdy drukowane jest następne Buzz
(w tym znowu oba Buzz
i FizzBuzz
).
Liczba, w której odchodzi, nie jest wliczana do następnego „licznika buzzów”; zamiast tego powinieneś zacząć odliczanie Buzz
es od 0. Na przykład program działający z n = 25
(przykładowym wyjściem) powinien kończyć się „licznikiem buzza” równym 1, ponieważ tyle razy Buzz
wydrukowano od ostatniego odejścia.
W przypadku n
upadku między jednym z przyjazdów Buzza a jednym z jego odlotów (tzn. Nadal tam jest - nic nie drukujesz), spodziewane jest pełne zakończenie. Dlatego ostatnim wierszem wyników byłoby jego wprowadzenie
Standardowe luki są zabronione.
n
znajdzie się on pomiędzy przybyciem Buzza Lightyeara a jego odejściem?Odpowiedzi:
JavaScript (ES6),
182175 bajtówźródło
Python 2 ,
185178172 bajtówWypróbuj online!
Wyjaśnienie
Uwaga: Buzz Lightyear pojawia się na trzecim „numerze buzz” i odjeżdża na czwartym. „Liczby Buzz” to wielokrotności pięciu. Tak więc ruchy Buzza następują w cyklu o długości 20.
Zapętlamy każdy
i
od 0 do input-1. (Oznacza to, żei
zawsze jest to o jeden mniej niż faktyczna liczba, którą rozważamy.)Używając
-~i
jako skrótu doi+1
,if-~i%20<16:
sprawdza, czyi+1
mod 20 ma 15 lub mniej. (Jeśli jest 16 do 19, Buzz Lightyear jest obecny i nie chcemy niczego wysyłać).Wewnątrz instrukcji if chcemy drukować
To infinity and beyond!
na każdej wielokrotności 20 - to znaczy za każdym razemi%20
jest 19. (Pamiętaj, żei
jest to o jeden mniej niż rzeczywista liczba). Ponieważi%20
nigdy nie będzie większa niż 19,i%20/19
będzie 1 w pożądanym przypadek, w przeciwnym razie <1. Python 2, dogodnie, obcina liczbę zmiennoprzecinkową przy pomnożeniu przez łańcuchy, więci%20/19*"..."
daje pełny łańcuch, jeślii%20
ma 19, w przeciwnym razie""
.Jeśli powyższa sprawa ma zastosowanie, nie drukujemy niczego innego. Ale jeśli pierwszym wyrażeniem jest
""
(co jest fałszem), używamy,or
aby kontynuować. Wyrażenia dlaFizz
,Buzz
oraz wprowadzenie oblicza się podobnie jak wyżej i dodano razem.Wreszcie, jeśli żaden z tych przypadków nie ma zastosowania, drukujemy sam numer za pomocą
-~i
.źródło
05AB1E ,
979390 bajtówWypróbuj online!
Wyjaśnienie, które nastąpi po dalszym golfie.
Alternatywna wersja 97-bajtowa
źródło