Pamiętasz grę dla dzieci „Kaczka, Kaczka, Gęś” ? Nie? Ja też nie.
Wyzwanie
- Drukuj słowo „kaczka” na poszczególnych liniach w nieokreślonej liczbie razy.
- Wydrukuj słowo „gęś”.
- Twój program się kończy.
Zasady
- Spróbuj zagrać w jak najmniej bajtów.
- Musi być co najmniej jedna kaczka.
- Na końcu listy musi znajdować się dokładnie jedna gęś.
- W każdej linii musi znajdować się dokładnie jeden ptak. Brak pustych linii.
- Przypadek wyprowadzanych ciągów jest nieistotny.
- Białe znaki w linii są w porządku.
- Twój program musi się zakończyć.
- Twój program nie może konsekwentnie wytwarzać tej samej liczby kaczek.
Baw się dobrze!
Uwaga: To pytanie nie jest duplikatem najkrótszego kodu w celu uzyskania niedeterministycznych danych wyjściowych
Powody obejmują:
- Związek z grą dla dzieci
- Zdefiniowane wymagania początkowe i końcowe ciągu wynikowego. W innym wyzwaniu nie ma określonego wyniku.
- Odpowiedzi W przypadku drugiego niedopowielonego wyzwania jest to jednocyfrowa liczba bajtów. Średnia dla tego wynosi około 30 lub mniej więcej.
- Ze względu na stopień pokrywania się tego wyzwania z tym, każde pytanie w golfa kodu, w tym tag „losowy”, jest duplikatem. Czy powinniśmy je wszystkie usunąć?
- Odpowiedzi kodu dla tego wyzwania byłyby zgodne z innym wyzwaniem (w absurdalnie rozdęty sposób), ale odpowiedzi na to wyzwanie nie pasowałyby do tego.
Odpowiedzi:
Galaretka , 13 bajtów
Wypróbuj online!
Wyjaśnienie:
Bardziej czytelna wersja: Wypróbuj online!
Zawsze zwróci 1 lub 2 kaczki.
źródło
Operacyjny język skryptowy Flashpoint , 48 bajtów
Zawsze drukuje jedną lub dwie kaczki.
random 1
zwraca liczbę (zmiennoprzecinkową) z zakresu od 0 do 1. Liczba ta jest przekazywana jako argumentselect
wraz z tablicą[s,""]
. Liczba losowa jest następnie zaokrąglana do najbliższej liczby całkowitej (0 lub 1), a element tablicy o tym indeksie jest wybierany z tablicy.Zadzwoń z:
Wynik:
Alternatywna wersja 56 bajtów:
źródło
World of Warcraft 81 bajtów
Oto makro, które możesz uruchomić w World of Warcraft.
źródło
/run for x=1,random(1,9)do print("Duck")end print("Goose")
Minecraft <1,13,
7254 bajtówPrzepraszam, musiałem.
Instrukcje:
data/functions/minecraft/ddg.mcfunction
/function ddg
w konsoli do gierJak to działa:
Zwraca słowo „kaczka” dla każdego bytu na świecie, a następnie słowo „gęś”. Ponieważ istoty stale się odradzają i znikają, liczba „kaczek” nie będzie stała. Użyłem
tellraw
zamiast znacznie krótszego,say
ponieważsay
wypisuje nazwę bytu, atellraw
wypisuje dokładnie to, co mu powiedziano.Zrzut ekranu
Edycja: Zmieniono {„text”: „duck”} na po prostu „duck” (i to samo z „gęsią”)
źródło
JavaScript,
4544423937 bajtówMoże powodować błąd przepełnienia.
Sprawdź to
źródło
Oktawa ,
3833 bajtówTo nie jest najkrótszy (36 bajtów), ale jest moim ulubionym. Wyjaśnienie znajduje się na dole.
Wypróbuj online!
Kilka krótszych odmian:
Działa to w zasadzie (33 bajty), ale limit czasu dla tłumaczy internetowych:
Dodanie niektórych bajtów w celu skrócenia wyjścia powoduje, że ma on 35 lub 36 bajtów:
Wyjaśnienie:
Wyjaśnię tylko ostatnią przypadkową. Pozostałe są podobne, ale wykorzystują liczbę dni od 1 stycznia 0000 do dziś.
rand
zwraca losową liczbę z przedziału (0, 1) . W ten sposób1/rand
zwraca liczbę większą niż 1 . Ponieważ zakres1:f
, gdzief
losowa liczba zmienna większa niż 1 jest identyczna1:floor(f)
,1:1/rand
tworzy zakres 1 .. x , gdzie x> = 1 .Spróbuję wyjaśnić to tak, jakby Octave był językiem stosowym.
źródło
disp(['duck '+~pwd';'goose'])
? Nie jestem pewien, czy jest to wystarczająco „nieokreślone”Perl 5 , 20 bajtów
Najpierw praktyczne 26 bajtów:
Kaczki 1 do 9 razy przed gęsią skórką.
Wypróbuj online!
Ale jeśli masz dużo pamięci i czasu, ta 20-bajtowa wersja (jak sugeruje Chris ) również działa:
Zakłada to również, że problem roku 2038 zostanie rozwiązany dla Perla 5 , w przeciwnym razie będzie nieważny przez 1 sekundę 20 lat.
źródło
1+$^T%9
na just$^T
, nadal działa i oszczędzasz 4 bajty.Python 2 ,
3634 bajtówWypróbuj online!
Sugestia Kevina Cruijssena prowadzi do 34 bajtów:
źródło
((id(id)%5)+1)
na,-~(id(id)%5)
aby pozbyć się nawiasu. Wskazówki do gry w golfa w <wszystkich językach> i Wskazówki do gry w golfa w Pythonie mogą być interesujące do przeczytania. Miłego pobytu!id(id)
może być,id(0)
czy coś mi brakuje?id(0)
na kilka różnych komputerów, sugeruje, że jest to stałe.id([])
. Powinno to inicjować odrębną listę przy każdym uruchomieniu programu, co teoretycznie powinno konsekwentnie dawać różne adresy pamięci.Z Shell (+ wget i Netpbm),
168160150148145135120 bajtówNie jest to najkrótsze rozwiązanie, ale miałem ochotę nadać temu wyzwaniu trochę innego rodzaju (zainspirowane rozwiązaniem @ AlexG innego problemu ).
Ten skrypt generuje obraz PPM zawierający od 1 do 8 zdjęć kaczek i zdjęcie gęsi u dołu na standardowym wyjściu. Pobiera dwa zdjęcia źródłowe z Wikipedii, więc dostęp do Internetu jest niezbędny do działania.
Przykładowe dane wyjściowe przekonwertowane na JPEG przez pnmtojpeg :
źródło
R , 35 bajtów
Wypróbuj online!
rexp()
tworzy losową liczbę z wykładniczej funkcji rozpadu.+1
aby zapewnić co najmniej jedną kaczkę. Wszystkie wiersze po pierwszej zawierają spację wiodącą (która jest domyślnym separatorem dlacat
), ale jest to dozwolone.źródło
exp(-1)
około 36,8%.\n
ponieważ jest on o jeden bajt krótszy. Jeśli odwiedzisz „Wypróbuj online!” link widać, że efekt jest taki sam.Bash ,
393837 bajtówWypróbuj online!
Drukuje liczbę kaczek równą liczbie cyfr w liczbie całkowitej równomiernie rozłożonej na [0,32767] (czyli częściej pięć kaczek (duża liczba kaczek)).
-1 bajt każdy dzięki @Chris i @sch wskazując pary cytatów, które nie pociągały za sobą.
źródło
\n
je na\\n
.sed s/[0-9]/duck\\n/g<<<$RANDOM\goose
może ogolić jeden bajtsed
nie jest całkowicie przenośne. Na niektórych platformach możesz uciec z jednym ukośnikiem odwrotnym\n
. W innych nie otrzymasz nowej linii bez względu na to, co robisz.Pure Bash (bez narzędzi zewnętrznych), 25
Na podstawie odpowiedzi @ SophiaLechner drukuje również dużą liczbę kaczek .
@ Pomysł OlivieraDulaca na użycie PID powłoki skryptu zapisanej w
$
parametrze pozwala zaoszczędzić 5 bajtów.Wypróbuj online .
źródło
RANDOM
na$
golenie 5 bajtów? I można też zrobić bardzo długi ciąg kaczek:yes duck|head -n $$;echo goose
$$
jest dopuszczalne - dzięki!yes duck | head -n $$;echo goose
Alternatywnie opublikowałem moją inną wersję ( ) (dłuższą niż twoja, ale dostaniesz DUŻO kaczek za 5 dodatkowych znaków ^^)Rubinowy , 30 bajtów
Wypróbuj online!
Uwaga: naprawdę 31 bajtów bez
\n
oszukiwania.źródło
Bash + Coreutils,
3627 bajtówDrukuje zbyt wiele kaczek (między 2 a
cat /proc/sys/kernel/pid_max
), a następnie jedną gęś.Zaoszczędzono dziewięć bajtów dzięki Digital Trauma i Olivier Dulac.
Wypróbuj online! (ale pamiętaj, że czasami może zostać obcięty)
Ta sama długość, ale bez
echo
:Wypróbuj online!
a
to komenda append wsed
iq
kończy działanie. Oba działają tylko na linii$$
, która odpowiada PID.źródło
head -n $((1+(RANDOM % 5)))
$$
zamiast$RANDOM
na moją odpowiedź . Myślę, że możesz użyć tego samego, aby zaoszczędzić 5 bajtów. Aha i spróbujsed
też:yes duck|sed 1$$q;echo goose
yes duck|sed $$q;echo goose
jest w porządku - nie sądzę, aby twój skrypt kiedykolwiek dostał PID <1.PowerShell ,
353028 bajtówWypróbuj online! (zmodyfikowana wersja)
Generuje tablicę
Get-Random
liczby elementów. To może chwilę potrwać. Dodaje to,+1
aby upewnić się, że otrzymamy co najmniej jedenduck
. Zmodyfikowana wersja zawiera również-ma
flagę ximum,5
dzięki czemu można zobaczyć, że program działa zgodnie z oczekiwaniami (zmodyfikowana wersja wydrukuje 1, 2, 3 lub 4duck
s przedgoose
).Tablica i samotny
goose
ciąg są pozostawione w potoku, a domniemaneWrite-Output
daje nam wartości rozdzielone znakiem nowej linii za darmo.Nie wiesz, jak trudno mi było nie zmienić ostatniej linii na „szara kaczka” ...
źródło
0..(random)|%{'duck'};'goose'
wygląda jak 29, a także wygeneruje gdzieś do [int] :: MaxValue (2,1 miliarda) kaczek przed gęsią. (I0..0
drukuje kaczkę)Python 2 , 54 bajty
Wypróbuj online!
źródło
C # (interaktywny kompilator Visual C #) , 55 bajtów
Wypróbuj online!
źródło
Brachylog ,
2421 bajtów-3 bajty dzięki Erikowi Outgolferowi
Wypróbuj online!
Z okazji Języka miesiąca , mój pierwszy post brachylog. Kontrola w tym języku jest fajna.
Jak to działa:
źródło
Geometry Dash World 2.2 Editor - 4 obiekty
Wyjaśnienie:
Wyzwalacz BG jest losowym wyzwalaczem obecnego 2.2, więc albo przełącza identyfikator grupy 1 lub 2.
Pierwszy „KACZKA” ma identyfikator grupy wynoszący 1, co sprawia, że ma 50% szans na usunięcie lub nie (przełączenie).
Na tym poziomie nie ma obiektu o identyfikatorze grupy 2, więc istnieje 50% szans na wyświetlenie 2 „KACZEK”.
Jak to odtworzyć:
Pierwszy „KACZKA” ma identyfikator grupy 1.
Gęś i druga kaczka nie mają identyfikatora grupy
Wewnątrz losowego wyzwalacza.
źródło
05AB1E ,
1514 bajtówWypróbuj online!
Wydrukuje 2, 5 lub 6 kaczek, a następnie gęś.
-1 bajt dzięki @Emigna używającej 'dla pojedynczego skompresowanego słowa (kaczka)
źródło
'М
ponieważ kaczka jest pojedynczym słowem.['ÐœTΩ#].•zíΘ•»
'Ðœ₁Ω.D.•zíΘ•»
APL (Dyalog) , 22 bajty
1 bajt zapisany dzięki @EriktheOutgolfer
Wypróbuj online!
źródło
'Goose'⊣⎕←⍣(?9)⊢'Duck'
Siatkówka , 17 bajtów
Wypróbuj online!
Wypróbuj online!
Drukuje 1 lub 2 kaczki, z jednakowym prawdopodobieństwem.
Wyjaśnienie
Ustaw ciąg roboczy
duck
i wydrukuj go za pomocą końcowego wiersza linefeed (\
). Następnie jest to pakowane w inny stopień wyjściowy, ale ten ma na sobie losową flagę (?
), więc drukuje tylko z prawdopodobieństwem 50%.Wymień
duck
sięgoose
, który jest drukowany domyślnie na końcu programu.Oto zabawna alternatywa, która drukuje 1 kaczkę z 50% prawdopodobieństwem, 2 kaczki z 25%, 3 kaczki z 12,5% ...:
źródło
Vim (skrypt) w systemie Linux,
4643 bajty (4946 z:
na początku linii)Wykonany jako
vim -S filename
lub wklejone do prowadzeniavim
z:
przed każdym wierszu.źródło
\d
ponad[0-9]
. Wygląda też na to, że vim nie wymaga końca nowej linii, więc może to być 45 bajtów :)> <> ,
3122 bajtówWypróbuj online!
-9 bajtów na podstawie wersji innej niż drzewo
źródło
l?!;
i wyjść z błędem.Befunge 98 ,
383025 bajtówWypróbuj online!
Duck
mieści się w jednym ciąguźródło
#
drugiej liniiwhitespace within a line is fine
więc możesz wyciąć kilka cytatów (nawet jeśli wyniki wyglądają dziwnie)T-SQL ,
70 4443 bajty (wiele kaczek)Dzięki @Zac Faragher!
Wersja poprawiona,
54 4340 bajtów (1 lub 2 kaczki)Dzięki @BradC!
Nie wydaje mi się, aby działał poprawnie w SQL Fiddle , ale działa dobrze w LINQPad i SSMS.
Nie jestem pewien, czy jest to znane ograniczenie SQL Fiddle, czy po prostu robię coś złego
źródło
select
sięprint
i wymienić końcowy'duck'select'goose'
z'duck(linebreak)goose'
(z dosłownym LINEBREAK, oczywiście)while rand()<.5print'duck'print'duck(linebreak)goose'
za 43.while
naif
. Drukuje (losowo) jedną lub dwie kaczki, które (jak sądzę) nadal spełniają wyzwanie.PowerShell -
3130 bajtówOstrzeżenie : najprawdopodobniej skończysz z dużą ilością kaczek.
Random
zawiera wartości 0,Int32.MaxValue
więc w zależności od tego, jak losowa jest twoja liczba, może to być kwakanie.źródło
$
przodu(Random)
. Wypróbuj online!Rozszczepienie ,
2419 bajtówWypróbuj online!
-5 bajtów dzięki Martinowi Enderowi
źródło
Brachylog , 21 bajtów
Wypróbuj online!
Hej, język miesiąca staje się nieaktywny, zacznijmy trochę!
źródło
Befunge
5735 bajtów (obwód całego pola to19x317x2 charachters) Dzięki karhell za ulepszenie.Druga linia umieszcza kaczkę i nową linię na stosie (do tyłu) i wyprowadza ją jako ciąg. Po tym 75% szansy na powrót do początku i wydrukowanie kaczki ponownie, 25% (gdy znak zapytania decyduje się zejść), aby wydrukować gęś i zatrzymać.
źródło
55+"kcud",,,,,#v?(linebreak here) @,,,,,"goose"<
zmniejszyłby twój kod do 35 bajtów