Być może niektórzy z was znają już tę grę: masz kolekcję żelków w różnych kolorach. Dla każdego koloru fasola może mieć różne smaki, niektóre są dobre, a niektóre złe i nie można ich rozróżnić. Musisz wybrać fasolę o danym kolorze i módl się, abyś wybrał dobrą.
Napisz najkrótszy program, który otrzyma wybrany kolor (z podanej listy) i losowo zwraca wybrany smak. Smak należy wybrać z wbudowanej listy. Możliwa lista wejść i wyjść to:
Input Output choices [only one from the list]
--------------------------------------------------
green lawn clippings, lime, mucus, pear
yellow rotten eggs, buttered popcorn
blue toothpaste, blue berry
orange vomit, peach
brown canned dog food, chocolate
white stinky socks, tutti-frutti, baby diapers, coconut
Zasady:
- Możesz założyć, że dane wejściowe będą zawsze miały kolor z wybranych opcji wejściowych.
- Wielkość liter i końcowe spacje i / lub znaki nowej linii nie mają znaczenia.
- Dane wyjściowe muszą być jednolicie losowe: kolejne wykonywanie programu musi dawać różne wyniki, a szanse na uzyskanie określonego smaku muszą być takie same dla wszystkich smaków na liście.
To jest golf golfowy , więc może wygrać najkrótszy program!
code-golf
random
game
compression
Charlie
źródło
źródło
blueberry
nieblue berry
.Odpowiedzi:
C #,
418313305271 bajtówZbyt długo, nawet dla C #, ale nie widzę, jak można go skrócić.
Wersja pełna / sformatowana:
źródło
05AB1E , 126 bajtów
Wyjaśnienie:
Jeśli ktoś się zastanawia, oto nieskompresowany ciąg:
Prawdopodobnie jednak mogę go bardziej skompresować za pomocą sprytnych sztuczek i słownika.
Wypróbuj online!
źródło
"eougwt"
do.•4Õ!Õ•
-1.eougwt
i.•4Õ!Õ•
zamiast"eougwt"
i.•4Õ!Õ•
. UpsJavaScript (ES6), 235 bajtów
Muszę wymyślić, jak kompresować ciągi w JS!
Jeśli to nie jest „losowy wystarczająco” dla swoich upodobań następnie dodać 7 bajtów wymianie
new Date
zMath.random()
.Spróbuj
źródło
eluaoi
, pomyślałem o tym sam i pomyślałem: „Oooh, spójrz, jaki jestem sprytny”, a potem zobaczyłem, że mnie pobiłaś!new Date%a.length
nie jest „jednolicie losowy”.eluaoi
mniej więcej w tym samym czasie: PMath.random
.Galaretka ,
101100 bajtówWypróbuj online!
źródło
Japt ,
148146 bajtówWypróbuj online!
Zaoszczędź 6 bajtów dzięki Shaggy i ETHproductions
źródło
R
zamiast0
zapisać bajt. Ponadto możesz kompresowaćeluaoi
, grając z rozkazem.qR
tej samej długości?®
.eaiou
jako ciągu, możesz go skompresować do trzech bajtów (mogą istnieć inne kombinacje trzech bajtów).Python 2 ,
301258 bajtówWypróbuj online!
Zaoszczędzono bardzo wiele bajtów, skracając klawisze, aby użyć drugiego indeksu danych wejściowych, jak sugeruje @TheLethalCoder, i dzieląc przecinki zamiast korzystania z bezpośredniej listy.
źródło
eluaoi
jako kluczy słownika i uzyskaj do nich dostęp z indeksem 2 ciągu, aby zaoszczędzić bajty.Galaretka ,
9594 bajtówMonadyczny link akceptujący listę (małych liter) znaków i zwracający listę znaków.
Wypróbuj online! lub zjedz paczkę 48 .
W jaki sposób?
Osiemdziesiąt dziewięć z dziewięćdziesięciu czterech bajtów to skompresowana lista ośmiu ciągów. Dwa z nich to puste ciągi znaków, a pozostałe sześć to smaki oddzielone nową linią dla jednego z kolorów:
Reszta programu analizuje dane wejściowe, aby zdecydować, której listy użyć, dzieli wybraną listę na nowe linie i wybiera losowy element:
źródło
Java, 288 bajtów
Sprawdź to sam!
Można grać w golfa za pomocą
char[]
.Jednak części losowej nie można „równomiernie rozłożyć” bez wyraźnego użycia
Random.nextInt(int)
. Nawet(int)(Math.random()*a.length)
nie jest równomiernie rozmieszczony.źródło
new java.util.Random().nextInt(a.length)
zamiast(int)(Math.random()*a.length)
...Math.random()
zapewnia liczbę, która ma pewne cechy szczególne (moc0
i znak0
i 52 losowe bity). Tak więc faktycznie używasz entropii 52 bez dalszej kontroli. Jeśli3
na przykład długość2^52
nie jest podzielna przez 3. Zatem nie jest losowo rozkładana. Właśnie dlategoRandom.nextInt(int)
(rzeczywisty plik java, nie javadoc, w linii 394) ma mechanizm pętli, aby upewnić się, że liczba ta należy do uczciwych liczb. O ile nie powiedziano mi, że „jest wystarczająco dobry”, tylkoRandom.nextInt(n)
jest sprawiedliwy.Math.random()
nie można go użyć, gdy2^53
nie można go równomiernie podzielić przez liczbę, z którą się pomnożymy? Więc jeśli chcesz losową liczbę od 0-3,(int)(Math.random()*4)
dopuszczalne jest równomierne podzielenie jej (czterokrotnie2251799813685248
), ale kiedy używasz*3
zamiast niej, nie jest (co jest trzykrotnie3002399751580330.666...
), ponieważ rzutowanie na int podłogi powoduje utworzenie niektórych części 1 mniejszy niż inne. A ponieważ długość jest zmienna w twoim przypadku, nie jest ona również równomiernie rozłożona (z możliwością uzyskania długości 3).Math.random()
, jeśli ktoś powie coś „jednolicie” lub „dość” losowo, użyjjava.util.Random
. Dlatego też narzekałem na odpowiedź Kudłaty.> <> , 311 bajtów
Wypróbuj online lub obejrzyj na placu zabaw dla ryb
Z przytulnymi dzianinami SK i Doof God Dennac!
Objaśnienie: Pierwszym zadaniem ryby jest ustalenie, jakie jest słowo wejściowe, zygzakiem w dół po lewej stronie. Ryba może czytać tylko jedną literę na raz i zajmuje to mniej bajtów, aby zrobić to destrukcyjnie. Najpierw ryba czyta pierwszą literę i pyta, czy to jest
"y"
- jeśli tak, to słowo jest „żółte”, w przeciwnym razie idzie dalej. Następnie odczytuje drugą literę - jeśli jest"l"
, słowo jest „niebieskie”, w przeciwnym razie przesuwa się; i tak dalej. Jeśli odczytuje pięć liter, a nie pasują one odpowiednio"y"
( Y ellow),"l"
(b L ue),"o"
(br O wn),"n"
(ora N ge) lub"n"
(gree N ), wówczas kolor musi być „biały”.Dalej jest bit losowy. W przypadku kolorów z dwoma możliwymi wyjściami jest to dość proste - na przykład dla żółtego ryba wprowadza następujący kod w
x
:Te
x
zestawy kierunku losowo: czy to w górę lub w lewo, gdy wiruje wokół ryby z powrotem do lustrax
, ale jeśli jest to prawo lub w dół, czyta „zgniłe jaja” lub „masłem popcorn” (w tył).Podziały czterokierunkowe (dla bieli i zieleni) są bardziej chaotyczne, ale mają tę samą ogólną zasadę - pierwsza to:
Zauważ, że jeśli ryba płynie w górę od pierwszego
x
, przechodzi przez osiem"
sekund, które cztery razy włączają i wyłączają tryb struny, następnie uderza w lustro i płynie z powrotem w dół.Aby dostać się do ostatniej four-way split ryby muszą pływać przez
e
ir
z „wapna” i „gruszki”, co dodaće = 14
do stosu (i odwrócić go), więc najpierw trzeba usunąć to z~
. Jedna z czterech gałęzi obejmuje również przepuszczanie niepotrzebnego ciągu"> "
, który usuwamy~~
.Wreszcie, po dodaniu jednego ze smaków fasoli do stosu, ryba dociera do strumienia
v
s w lewej kolumnie, która wysyła go doktóry drukuje znaki (używając jednego z
o
„kokosowego”), dopóki nie pozostanie żaden.źródło
T-SQL,
432 423 375 367 336295 bajtówWreszcie operacja oparta na zestawie !!
(Podziały wierszy są wyświetlane i nie są liczone łącznie).
Dane wejściowe są przez kolumnę c w nazwanej tabeli t , zgodnie z naszymi wytycznymi .
Po prostu łączę naszą tabelę wprowadzania z tabelą pełną prawidłowych kombinacji kolorów / smaków, a następnie wybieram losowy wiersz.
ORDER BY NEWID()
jest powszechnym sposobem losowego sortowania w SQL . W zależności od tego, jak jesteś surowy, możesz nie uznać go za całkowicie jednolicie losowy, ale powinien być wystarczająco losowy, aby wybrać żelki.EDYCJA 1: Zaoszczędź 9 bajtów, używając tylko 3. znaku koloru, zainspirowanego innymi odpowiedziami.
EDYCJA 2: Zaoszczędź 48 bajtów, umieszczając flagę koloru i smak w jednej kolumnie. Wiele znaków zapisanych w WSTAWIENIU.
EDYCJA 3: Zapisano 8 bajtów, zastępując
INSERT INTO b(o)
jeINSERT b
EDYCJA 4: Zaoszczędź 31 bajtów więcej, łącząc się bezpośrednio z wirtualną tabelą,
VALUES
a tym samym eliminującCREATE TABLE
iINSERT
.EDYCJA 5: Zaoszczędź 41 bajtów, aktualizując do
STRING_SPLIT
funkcji tylko SQL 2016 , co pozwala mi wyeliminować zmienne i dynamiczne wykonywanie SQL.źródło
PHP , 242 bajty
Wypróbuj online!
źródło
Mathematica, 247 bajtów
Formularz wejściowy
źródło
eluaoi
podstępu? Nie znam matematyki, to tylko pomysł.Clojure, 231 bajtów
Tak samo jak inne, mogę po prostu zaoszczędzić trochę miejsca w porównaniu do innych języków. Kompresowanie łańcuchów wydaje się straconą przyczyną.
źródło