Zainspirowany przez Cyfry na swoich liniach oraz 1, 2, Fizz, 4, Buzz
Wprowadzenie
Twoim zadaniem jest wygenerowanie dokładnie następujących danych wyjściowych:
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
31
32
Fizz
34
Buzz
Fizz
37
38
Fizz
Buzz
41
Fizz
43
44
FizzBuzz
46
47
Fizz
49
Buzz
Wyzwanie
To wyzwanie opiera się na wyzwaniu Fizz Buzz, a oto podsumowanie: wypisz liczby od 1 do 100 włącznie, każdy numer w osobnej linii, ale jeśli liczba jest wielokrotnością 3, powinieneś wypisać „Fizz” zamiast oryginalny numer, jeśli liczba jest wielokrotnością 5, powinieneś wypisać „Buzz” zamiast oryginalnego numeru. Jeśli liczba jest wielokrotnością 15, powinieneś wypisać „FizzBuzz” zamiast oryginalnego numeru.
Jednak oprócz powyższego wymagania należy również wciąć każdą linię za pomocą spacji, aby każda kolumna zawierała tylko unikalne znaki (z wyjątkiem spacji i nowych linii). Spacje poprzedzające każdą linię to minimum wymagane do tego, aby wszystkie linie pojawiły się, zanim (włącznie) będzie miała unikalne znaki w każdej kolumnie.
Na przykład, 1,2,Fizz,4
nie potrzeba żadnego wcięcia bo oni już mają unikalne znaki w każdej kolumnie (kolumna 1: 12F4
, column2: i
, kolumna3: z
, column4: z
), ale podczas dodawania Buzz
musimy tiret dwóch przestrzeniach, ponieważ w przeciwnym razie mamy dwa z
„s zarówno w trzeciej, jak i czwartej kolumnie. Ponieważ do osiągnięcia celu wystarczą dwa pola, nie należy wcinać go o trzy pola. 7
i 8
nie potrzebuje żadnego wcięcia, ale podczas wypisywania 11
musimy wcięcia o jedną spację, ponieważ pierwsza kolumna ma już znak 1
. 13
następnie muszą być wcięte o trzy spacje, ponieważ teraz pierwsza, druga i trzecia kolumna mają znak 1
. Wcięcia dla pozostałych linii są zgodne z tą samą zasadą.
Aby uprościć wyzwanie, górny limit został zmieniony na 50.
Okular
Możesz napisać program lub funkcję. Żadne z nich nie powinno przyjmować żadnych niepustych danych wejściowych. Przyjmowanie pustych danych jest w porządku.
Ponieważ jest to wyzwanie KC, musisz wygenerować dane wyjściowe zgodnie z opisem we wstępie. Pojedynczy znak nowej linii jest w porządku. Brak nowych linii nagłówka lub dodatkowych spacji nagłówka. Brak dodatkowych spacji dla każdej linii.
Twój program może wyjść z błędem lub mieć niepuste wyjście STDERR, o ile STDOUT jest zgodny ze specyfikacją.
Jest to międzyjęzykowy golf-golf , program z najmniejszą liczbą bajtów wygrywa w swoim języku.
źródło
Odpowiedzi:
Python 2 , 127 bajtów
Wypróbuj online!
Pięćdziesięciobajtowa tabela odnośników wydaje się boleć wielkości kodu mniejszej niż logika niezbędna do śledzenia, które znaki wystąpiły w każdej kolumnie.
źródło
Python 2 ,
167166163161157 bajtówWypróbuj online!
Edycje:
while
jest krótszy niżfor..range()
o 1 bajt.exec
...i%3/2
sztuczka z odpowiedzi Lynn (-2 bajty).a=map(set,[[]]*99)
, ale okazało się, za pomocą innego sposobueval
irepr
z tych samych bajtów (-4 bajtów).Użyj listy zestawów, aby śledzić znaki używane w każdej kolumnie, i ustaw nierówność członkostwa. Reszta jest zgodna z podaną dokładną specyfikacją.
źródło
C (gcc) ,
145144 bajtów (143 dla heksadecymalnego)Wypróbuj online!
źródło
Ruby , 129 bajtów
Wypróbuj online!
Podwójne uznanie dla Lynna za podejście do tabeli odnośników i algorytm fizzbuzz .
Algorytm FizzBuzz jest bardzo interesujący i opiera się na niezwykłym zbiegu okoliczności, że wszystkie dodatnie, niepodzielne liczby mniejsze niż 15 (inne niż 3 i 5), po podniesieniu do 4. potęgi, są o 1 większe niż wielokrotność 15. W fakt:
Wartości
3**4%15
i5**4%15
są dokładnie 4 osobno: długość ciągu „Fizz”. Możemy to wykorzystać, używając ich do indeksowania od końca łańcucha o długości co najmniej 9 znaków. Wielokrotności 3 będą indeksowane od początku ciągu, a wielokrotności 5 będą indeksować od 5 znaków od końca. Każda inna liczba spróbuje zaindeksować od początku łańcucha i zakończy się niepowodzeniem, powracającnil
. Następnie 15, oczywiście, indeksuje od 0 znaku. Fakt, że „FizzBuzz” ma tylko 8 znaków, stanowi niewielką przeszkodę; używamy znaku nowej linii, aby go wstawić, który później zostanie zignorowany przezputs
.Możliwe jest, że stół przeglądowy może zostać pokonany przez podejście bardziej proceduralne, ale moja próba była w okolicach 190 bajtów.
źródło
[JavaScript (Node.js) REPL], 144 bajty
`
Wypróbuj online!
Sam program ostrzegawczy działa w niedopuszczalnym czasie
JavaScript (Node.js) , 132 bajty Arnauld
Wypróbuj online!
źródło
Java (JDK 10) , 185 bajtów
Wypróbuj online!
Kredyty
źródło
Haskell ,
190 187 186 178176 bajtówWypróbuj online!
Nieco bardziej czytelna (i opatrzona komentarzem) wersja:
Edycja: W końcu wprowadziłem niektóre funkcje w wersji golfowej, aby zaoszczędzić więcej bajtów.
źródło
Jstx , 122 bajty
Wypróbuj online!
źródło