W zeszłym tygodniu opublikowałem wyzwanie, aby zagrać w Duck, Duck, Goose . Doprowadziło to do tego, że wielu minnesotańczyków komentowało swoją regionalną odmianę „szarej kaczki” .
Oto zasady:
Korzystanie z tej listy kolorów:
Red
Orange
Yellow
Green
Blue
Indigo
Violet
Gray
Napisz program, który będzie przestrzegał następujących zasad:
- Wybierz jeden z tych kolorów i dodaj go do słowa „kaczka” i wydrukuj wynik w nowej linii.
- Jeśli kolor nie był „Szary”, powtórz krok 1.
- Jeśli kolor był szary, zakończ swój program.
Zasady, których należy przestrzegać:
- Program nie powinien konsekwentnie drukować tej samej liczby linii.
- Może zaczynać się od „szarej kaczki”, ale nie powinien robić konsekwentnie.
- W każdym wierszu powinna znajdować się dokładnie jedna kaczka i nie są generowane żadne puste wiersze.
- Między kolorem a kaczką powinna znajdować się przynajmniej jedna spacja.
- Biała przestrzeń przed i po znaczącym wyniku nie ma znaczenia.
- Przypadek wyjścia nie ma znaczenia.
- Kolory można powtarzać.
- Dane wyjściowe nie muszą zawierać każdego koloru za każdym razem, ale musi być możliwe, że Twój kod wyświetli każdy kolor.
- Nie można uwzględnić kolorów spoza powyższej tablicy.
- W odpowiedzi można zaakceptować szary lub szary.
- Kolory nie powinny być konsekwentnie w tej samej kolejności.
- Cel najkrótszego programu. Najmniejsza liczba bajtów wygrywa.
Przykładowe dane wyjściowe:
Green duck
Orange duck
Yellow duck
Indigo duck
Yellow duck
Gray duck
Dzięki @Mike Hill za pierwsze powiadomienie mnie o tej odmianie.
Grey
jeden raz (więc nie musiałbym wybierać spośród wszystkich i sprawdzać, czy wybrałemGrey
).Odpowiedzi:
05AB1E ,
4240 bajtówZaoszczędzono 2 bajty dzięki Erikowi Outgolfer
Wypróbuj online!
źródło
ind
jestëß
!LuaLaTeX,
220211 znakówKomenda:
Nie najkrótszy, ale najbardziej wymyślny. Na podstawie rozwiązania @ skillmon
źródło
tikzducks
tam użyć :):)
Kod maszynowy 6502 (C64), 124 bajty
Online demo - Zastosowanie:
SYS49152
.Objaśnienie (skomentowany demontaż):
źródło
sys 49152
.Perl 5 , 79 bajtów
Wypróbuj online!
źródło
Taxi , 1995 bajtów
Wypróbuj online!
Myślę, że warto zauważyć, że 47% tego kodu po prostu wybiera losową liczbę całkowitą od 1 do 8.
Poza tym Taxi jest tak gadatliwa, że kodowanie
duck\n
po każdym kolorze jest znacznie krótsze niż konkatenacja go później.Oto wersja bez gry w golfa:
źródło
Java (OpenJDK 9) , 133 bajty
Wypróbuj online!
Objaśnienia
źródło
Rubinowy ,
93 91 90 89 87 8685 bajtówDzięki Dom Hastings za zapisanie 2 bajtów, Kirill L. 1 bajt i Asone Tuhid 1 bajt!
Wypróbuj online!
źródło
()
cały kod, a jeśli użyjesz$.
zamiasts
do przechowywania indeksu, możeszs
całkowicie uniknąć tworzenia (ponieważ$.
jest on wstępnie zainicjowany na numer linii!) Musisz przejśćGrey
na koniec listy i$.<7
zamiast tego sprawdzić chociaż. Mam nadzieję, że to pomaga!s=1
i$.
byłem idealny!while s...
i miejsce było potrzebne. Nie widziałem tej możliwości po zmianies
na$.
.Color+" duck"
zapisuje 1 bajtOperacyjny język skryptowy Flashpoint , 133 bajty
Zadzwoń z:
Przykładowe dane wyjściowe:
Na początku jakoś źle odczytałem wyzwanie, tak jakby celem było po prostu wyprowadzenie różnej liczby linii, niekoniecznie kończących się na linii „Grey duck”. W wyniku tej niepoprawnej interpretacji powstał nieco bardziej interesujący fragment kodu:
źródło
pdfTeX,
231220219209207 bajtówLuaTeX,
216206204 bajtówźródło
Brachylog , 68 bajtów
Wypróbuj online!
źródło
Rubinowy ,
8481 bajtówDzięki Dom Hastings za -3 bajty.
Wypróbuj online!
źródło
$_
, możesz po prostu miećuntil/y/
na końcu -3!PHP, 89 bajtów
Uruchom
-nr
lub wypróbuj online .źródło
> <> , 107 bajtów
Wypróbuj online!
źródło
Oktawa ,
114112 bajtówWypróbuj online!
Istnieje wiele różnych opcji, które zawierają od 112 do 118 bajtów ... Niektóre inicjują indeks na początku i zmniejszają go o losową liczbę dla każdej pętli i czekają, aż wyniesie 0 . Inni używają
printf
zamiastdisp
unikać nawiasów i tak dalej.źródło
cat
ihorzcat
. Dzięki jednak :)PHP ,
1331251111089792 bajtówWypróbuj online!
-8 bajtów dzięki @Olivier Grégoire
-3 bajty dzięki @manatwork
-11 bajtów dzięki @Dom Hastings
źródło
Grey
naX
, ponieważ nie jest używany. Zyskasz 6 bajtów.for
„s warunek nie potrzebują nawias:x!=$b=$a[array_rand($a)]
. BTW,?>
kończy wypowiedź, nie ma potrzeby;
przed nią.x
wcale i nie wykorzystując$b=$a..
jako warunku i używającrand(0,7)
zamiastarray_rand
. Możesz usunąć nową linię między?>
iGrey duck
. Również twój link TIO nadal miał pełne tagi, możesz dodać-d short_open_tag=on
do flag, aby to działało! :)Narzędzia Bash + GNU, 72
Wypróbuj online .
źródło
bash, 96 bajtów
Dzięki @DigitalTrauma.
źródło
>0
jednak,${#a}
zamiast tego wyszedłem8
.${#a}
zamiast8
? To jest golf golfowy - nie ma potrzeby, aby kod był uogólniony, aby można go było modyfikować dla innej liczby kolorów. Wszystko, co musisz zrobić, to spełnić specyfikację w najmniejszej liczbie bajtów.JavaScript, 104 bajty
Wypróbuj online
źródło
new Date
RNG.AWK , 114 bajtów
Wypróbuj online!
Wyjaśnienie
Zauważ, że wymaga to „trochę” danych wejściowych. Dane wejściowe mogą być puste. Aby uniknąć konieczności wprowadzania danych, wstaw pierwszy wiersz za pomocą
BEGIN
źródło
PowerShell , 94 bajty
Wypróbuj online!
Pętle, aż
$r
będzie równaGrey
. Wewnątrz pętli-split
s jest dosłowny ciąg znaków nowej linii, wybieraRandom
jeden z nich, a następnie drukuje kolor plusDuck
(technicznie rzecz biorąc, pozostaje on w potoku, a czyszczenie potoku w następnej iteracji następnej pętli powodujeWrite-Output
). Zauważ, że teoretycznie możliwe jest,Grey
że nigdy nie zostanie wybrany, a pętla będzie kontynuowana w nieskończoność, ale to prawie nigdy (w sensie prawdopodobieństwa) nastąpi.źródło
R , 101 bajtów
Wypróbuj online!
Mocno zainspirowany odpowiedzią @ user2390246 na powiązane wyzwanie. Potrzebujemy dwóch źródeł losowości: zmiany kolejności kolorów i próbkowania kolorów innych niż szara kaczka.
sample
Zajmie losowej próbie losowej wielkości podanej przez wykładniczy z parametrem szybkości1
, z dokładnością do całkowitej. Korzystanie z wykładniczej rozrzutności niestety oznacza, że istnieje prawdopodobieństwo, że próbka będzie wexp(-8)
okolicy lub w jej pobliżu , więc musimy próbować .0.0003354
8
replace=T
źródło
\n
rzeczywistą nową linią dla 1colors()[c(26,254,498,552,640,652)]
zamiast tegoscan(..)
itp. powinno sprowadzić się do około 83colors()
! To są fajne gry w golfa, które moim zdaniem powinieneś opublikować jako własną odpowiedź, ponieważ jest to mniej elegancki sposób uzyskiwania kolorów.Python 2 ,
138133120117116 bajtówWypróbuj online!
Znacznie lepiej z kilkoma pomysłami @EriktheOutgolfer. Dzięki!
-3 więcej dzięki dzięki @ovs
-1 z podziękowaniami dla @Rod za nową sztuczkę nauczył się :-)
źródło
Retina ,
6968 bajtówDzięki Leo za oszczędność 1 bajtu.
Wypróbuj online!
Wyjaśnienie
.
tłumi niejawne dane wyjściowe na końcu programu (w przeciwnym razie otrzymalibyśmy dwie szare kaczki)./y/^{
opakowuje cały program w pętlę, która trwa tak długo, jak długo łańcuch roboczy nie zawieray
. Reszta tej linii ustawia łańcuch roboczy na listę wszystkich kolorów oddzieloną od linii.Przeciągamy losową linię z działającego ciągu (a zatem losowy kolor). I drukujemy wynik za pomocą trailing
duck
i linefeed.źródło
MATL ,
6864 bajtówWypróbuj online!
Wyjaśnienie
źródło
Python 3,
130,128,127,126, 125 bajtów-1 autor: @ElPedro!
-1 przeze mnie
-1 przez @Bubbler!
Wypróbuj online!
źródło
d!=c[0]
zapisać bajt?print(d,'duck')
aby zapisać bajt. Domyślnym ogranicznikiem jest spacja.Java (JDK 10) , 287 bajtów
Wypróbuj online!
Mój pierwszy codegolf! Oczywiście nie konkuruje, po prostu cieszę się, że nauczyłem się wystarczająco dużo Java (obecnie w CS200), aby móc wziąć udział.
źródło
Kotlin , 122 bajty
Wypróbuj online!
źródło
MS-SQL, 158 bajtów
Oparty w dużej mierze na doskonałej odpowiedzi Razvana , ale przy użyciu
STRING_SPLIT
funkcji specyficznej dla MS-SQL 2016 i późniejszych. Używa równieżGOTO
zamiastWHILE
pętli.Sformatowany:
źródło
T-SQL ,
195185184 bajtówźródło
BEGIN
.Python 2 , 98 bajtów
Spójrz, nie ma importu!
(Drukuje dodatkowe spacje między kolorami i
duck
dozwolone w pytaniu)Wypróbuj online!
Dość słaby generator liczb pseudolosowych obsadzony identyfikatorem obiektu 0 (ale wydaje się pasować do specyfikacji), który wielokrotnie zwraca liczbę całkowitą
x
, w [0,7], która jest używana do wycinania listy znaków z tego indeksu w kroki 8, aby uzyskać nazwę koloru, która jest drukowana wraz zduck
krotką, wymuszając odstęp między nimi. Kiedyx
staje się zero,Grey
drukowane jest oszacowanie następnego wejścia do błędów generatora liczb losowych opartych na modulo, które próbują podzielić przez zero (v=1/x,v
próbuje zrobić nową krotkę z pierwszym elementem1/x
=1/0
)Ten sam sposób to 100 w Pythonie 3 z
źródło