Jako dziecko mój przyjaciel miał magiczną kulkę , na którą zadawaliśmy pytania i sprawdzaliśmy, jaki był los tego pytania.
Wyzwanie
Twoim wyzwaniem jest napisanie programu (lub funkcji), który po uruchomieniu (lub wywołaniu) generuje (lub zwraca) losową odpowiedź z możliwych odpowiedzi poniżej. (Random bycia: each output should have a nonzero chance of occurring but they do not need to meet any other criteria
)
Możliwe odpowiedzi z Magic 8-ball to (bez uwzględniania wielkości liter):
It is certain
It is decidedly so
Without a doubt
Yes definitely
You may rely on it
As I see it, yes
Most likely
Outlook good
Yep
Signs point to yes
Reply hazy try again
Ask again later
Better not tell you now
Cannot predict now
Concentrate and ask again
Don't count on it
My reply is no
My sources say no
Outlook not so good
Very doubtful
Wkład
Brak wejścia.
Wydajność
Losowy wybór z góry. Sprawa nie ma znaczenia.
Zasady
Standardowe luki są niedozwolone.
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach dla każdego języka!
code-golf
kolmogorov-complexity
random
DevelopingDeveloper
źródło
źródło
Signs point to yes
Odpowiedzi:
SOGL V0.12 , 166 bajtów
Wypróbuj tutaj!
\ o / każde słowo było w słowniku SOGL!
źródło
> <> , 438 bajtów
Wypróbuj online!
Nie jest to interesujące, ale myślę, że to pierwsza odpowiedź, w której losowość nie jest jednolita. Wszystkie negatywne wiadomości umieszczam jako najmniej prawdopodobne :)
Niektóre wyjaśnienia:
Wskaźnik zacznie iść w prawo od pierwszej linii.
x
zmienia wskaźnik na losowy kierunek główny. Jeśli idzie w górę lub w dół, po prostu napotyka innąx
. Jeśli pójdzie dobrze, odbija się|
i uderza w to samox
. Jeśli idzie w lewo, zawija się i wypycha tekst tej linii na stos. Większość linii następnie uderza w tę samą ścieżkę,^
której kierunek zmienia się w górę. Powoduje to zapętlenieo
pierwszego wiersza, który wysyła stos aż do opróżnienia. Szczególnym przypadkiem jestYep
linia, która|o<
zamiast tego ma poziomą pętlę .źródło
Python 2,
369368 bajtówPython 3, 371 bajtów
Wcześniej
hash
używałem wbudowanej funkcji index (hash(id)%20
), która zwraca losową wartość na początek interpretera Pythona od czasu https://bugs.python.org/issue13703 . To nie jest losowe dla pustego ciągu (zawsze 0), więc musisz użyć czegoś innego,id
wbudowanego!Przy drugim spojrzeniu mogę użyć
id
bezpośrednio, ale wydaje się, że zawsze produkuje parzyste liczby. IIRCid(object)
w CPython po prostu zwraca lokalizację pamięciobject
, więc ma to sens. Może gdybym użył Jython lub IronPython, mógłbym pominąć podział przez 7. W każdym raziehash(id)
vsid(0)//7
jest w Pythonie 3 równe, ale może używać/
operatora do obcinania dzielenia liczb całkowitych w Pythonie 2, oszczędzając bajt.źródło
PowerShell , 354 bajty
Wypróbuj online!
Ho-hum. Pobiera wszystkie wyniki, łączone razem z
0
s, a następnie-split
s,0
aby utworzyć tablicę ciągów. Przechodzi do tej tablicy, doGet-Random
której losowo wybierze jedną z nich. Pozostaje to w potoku, a dane wyjściowe są niejawne.źródło
Python 2 , 385 bajtów
-1 bajt dzięki ovs.
Wypróbuj online!
źródło
Jabłkowy, 391
Uwielbiam sposób, w jaki listy AppleScript mają
some item
metodę:źródło
Narzędzia Bash + GNU, 230
Binarne wyjście zopfli nie jest tutaj dobrze reprezentowane; zamiast tego możesz zrekonstruować skrypt z danych zakodowanych w base64:
Uwaga: zgodnie z pytaniem skompresowane dane są dekompresowane na wszystkie małe litery. To sprawia, że kompresja zopfli jest nieco bardziej wydajna i oszczędza 16 bajtów.
źródło
tail +2
nie działa dla mnie, alesed 1d $0
i tak oszczędza bajt. Ponadto, ponieważ wyjście do STDERR jest domyślnie dozwolone, nie sądzę, że potrzebujeszexit
. Ponadto można usunąć ostatnie dziesięć bajtów programu.R , 360 bajtów
Wypróbuj online!
Niezupełnie najbardziej eleganckie rozwiązanie. R ma ciekawą funkcję, w której
stdin
przekierowuje do pliku źródłowego, dzięki czemu można wstawiać (małe) zestawy danych do kodu źródłowego, oszczędzając bajty na dzielenie łańcuchów lub gorzej, konstruując sam wektor (wszystkie te cudzysłowy sumują się w pośpiechu). Wraz z wbudowanymi funkcjami losowego próbkowania jest to krótka odpowiedź.źródło
Węgiel drzewny ,
203184 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Edycja: Zapisano 19 bajtów, zmniejszając wszystko. Wyjaśnienie:
źródło
Retina ,
333331321 bajtówWypróbuj online! Edycja: Zapisano 1 bajt przez kompresję
doubt
i 1 bajt przez obniżenie wszystkiego, abym mógł kompresowaćreply
. Następnie zapisałem 10 bajtów, używając golfisty Retina Kołmogorowa @ Leo na tekście pisanym małymi literami (który przypadkowo jest liczbą bajtów zapisanych na mojej odpowiedzi 333 bajtów).źródło
Kokos , 380 bajtów
Coconut portowym totallyhuman „s odpowiedź
Wypróbuj online!
źródło
T-SQL, 393 bajty
Funkcja
STRING_SPLIT
jest dostępna tylko w SQL 2016 i nowszych wersjach.Najlepsze, co mogłem uzyskać za wcześniejsze wersje za pomocą
VALUES('It is certain'),('It is decidedly so'),...
to 464 znaków.Sformatowany, abyś mógł zobaczyć część roboczą:
NEWID()
generuje nowy, pseudolosowy identyfikator GUID, więc jest to sposób na sortowanie pseudolosowe.źródło
Galareta , 201 bajtów
-2 bajty dzięki Mr. Xcoder. -1 bajt dzięki użytkownikowi 202729.
Wypróbuj online!
Cholera , kompresja SOGL jest dobra.
źródło
ỴX
na końcu kodu, aby05AB1E , 171 bajtów
Wypróbuj online!
Wyjaśnienie
“ ... “
wypycha ciąg wszystkich wymaganych słów.Niektóre słowa pochodzą bezpośrednio ze słownika 05ab1e.
Niektóre są napisane zwykłym ascii (jak
haze
).Niektóre są połączone słownikiem i ascii (jak
do
+n't
).Następnie kod przetwarzania to:
źródło
,
i'
dodał.ye
,don
iha
) oraz -2 od sortowania listy według liczby słów i użycia kompresji delta.Rubinowy,
362361 bajtówWypróbuj online!
źródło
?.
zamiast'.'
.?
dosłownego ciągu znakówPython 3, 386 bajtów
źródło
Perl, 366
źródło
As I see it, yes
.split
.print
i zapisać jeszcze 1 bajt. Wystarczy umieścić jednoznaczny znak plus przed listą:print((0..9)[5])
stałby sięprint+(0..9)[5]
.05AB1E ,
208217 bajtówWypróbuj online!
Dość podstawowe rozwiązanie. Możliwe odpowiedzi są łączone ze znakiem x (ponieważ nie ma go w odpowiedziach), a następnie są kompresowane (wewnątrz • ), „x¡Ω dzieli się na x i wybiera losowy wybór.
Podziękowania dla @Emigna za zwrócenie uwagi, że kompresja alfabetu nie lubi „lub”. Naprawiono, otaczając skompresowaną strunę don ' i , tak .
źródło
,
i'
ze spacjami, więc wyjście dla tych 2 linii są błędne.PHP ,
412385337384 bajtówWypróbuj online!
Fairly straight forward solution. Split the string by a delimiter(in this case
1
) and choose a random element from the array.źródło
php
aby skompilować kod; 2, można wymienić'|'
z1
a wszystko|
ze1
dla -2 bajtów; 3 powinien rozważyć zmianę linku do wypróbowania go online na TIO.run, zgodnie z zaleceniami społeczności.PHP 7.2.3-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Mar 6 2018 11:18:25) ( NTS )
. Not sure if in previous versions that matters or not. Either way, I've edited the question.<?=
and echo the explode directly using[rand(0, 19)]
instead of first adding to to a variable<?= explode("1", "str1str1str")[rand(0, 19)]
Javascript, 372 bytes
-10 bytes thanks to Shaggy
Try it online!
źródło
OR
zamiastMath.floor()
to save 7 bytes:Math.random()*20|0
.Befunge
1221870 bytes (perimeter of the entire field is33x3630*29 charachters) Thanks to Jo King for helping me to remove the trailing nulls and urging me to change the randomizer.The top line puts the '<' character and the x-position (28) where it should go on the stack. Then we enter the sort of random number generator. This could be improved, but this is what I could deliver on short notice... The "random" number is offset to get the actual "random" line to read.
After the random number is generated, we put the '<' character at that line and push the letters on the stack and on the bottom line output them again.
Uwaga; jeśli użyjesz interpretera, do którego podłączyłem w tytule tego posta, musisz ponownie zaznaczyć „Pokaż” po każdym uruchomieniu, ponieważ dodanie znaku „<” pozostaje po wykonaniu.
źródło
>:#,_@
aby uniknąć drukowania pustych bajtów. Aha, i dodaj link TIO.Java 8 ,
433,392,380, 379 bytesTry it online!
źródło
String#split
. Also, you can save an additional 11 bytes using(int)(Math.random()*20)
instead ofnew java.util.Random().nextInt(20)
. And the semi-colon isn't counted towards the byte-count for lambdas. So in total: 380 bytes.Don't
instead ofDon' t
.Red, 367 bytes
Try it online!
It doesn't seem really random in TIO (although it works just fine in the Red Console), that's why I added a random/seed to the header.
źródło
Excel, 399 Bytes
Since
CHOOSE(X.Y,<>)
is the same asCHOOSE(X,<>)
, no need for anINT
Not much golfing you can do here though...
źródło
Aceto, 345 + 1 = 346 bytes (+1 for
-l
flag)Try it online!
Not overly interesting, but I can't think of anything shorter in this language, no compressed strings or anything.
źródło
C - 426 bytes
Uses an uninitialized variable mod 20 to index into an array of strings containing all possible outputs. Compilers complain that stdio.h isn't included, but it works OK. Probably because it just so happens to have the standard library linked in anyways. Lucky me.
źródło
Go, 530 Bytes
Please note that, on the Go Playground, because of how seeding works, it always gives the same result. When running on a regular computer, everything works as it should.
I think it is possible to save a bit more but my knowledge in Go stops there :)
Formatted and testable version
źródło
Excel-VBA,
362341339 BytesWhere
A1:T1
contain the different options. Reads entire first row of sheet into arrayv
and indexes a random point along the first 19 values.Surprised to find that indexing an array doesn't require integer values
źródło
VBA, 358 bytes
An anonymous VBE immediate window function that takes no input and outputs to STDOUT.
źródło
Java 8, 379 Bytes
Try it online
źródło