Als Kind hatte mein Freund eine magische Kugel , bei der wir Fragen stellten und das Schicksal dieser Frage erkannten.
Herausforderung
Ihre Herausforderung besteht darin, ein Programm (oder eine Funktion) zu schreiben, das beim Ausführen (oder Aufrufen) eine zufällige Antwort aus den folgenden möglichen Antworten ausgibt (oder zurückgibt). (Random sein: each output should have a nonzero chance of occurring but they do not need to meet any other criteria
)
Die möglichen Antworten vom Magic 8-Ball sind (ohne Berücksichtigung der Groß- und Kleinschreibung):
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
Eingang
Keine Eingabe.
Ausgabe
Eine zufällige Auswahl von oben. Fall spielt keine Rolle.
Regeln
Standardlücken sind nicht erlaubt.
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes für jede Sprache!
code-golf
kolmogorov-complexity
random
Entwicklungsentwickler
quelle
quelle
Signs point to yes
Antworten:
SOGL V0.12 , 166 Bytes
Probieren Sie es hier aus!
\ o / jedes Wort war im SOGL-Wörterbuch!
quelle
> <> 438 Bytes
Probieren Sie es online!
Nicht so interessant, aber ich denke, es ist die erste Antwort, bei der die Zufälligkeit nicht einheitlich ist. Ich habe alle negativen Nachrichten als unwahrscheinlich eingestuft :)
Einige Erklärungen:
Der Zeiger beginnt in der ersten Zeile nach rechts zu gehen.
x
ändert den Zeiger in eine zufällige Himmelsrichtung. Wenn es rauf oder runter geht, trifft es einfach auf ein anderesx
. Wenn es richtig läuft, prallt es ab|
und trifft dasselbex
. Wenn es nach links geht, wird es umgebrochen und der Text dieser Zeile wird auf den Stapel verschoben. Die meisten Linien treffen dann dieselbe Spur,^
deren Richtung sich nach oben ändert. Dies durchläufto
die erste Zeile, die den Stapel ausgibt, bis er leer ist. Der Sonderfall ist dieYep
Linie, die|o<
stattdessen die horizontale Schleife hat .quelle
Python 2,
369368 BytesPython 3, 371 Bytes
Ich habe zuvor das
hash
Built-In für index (hash(id)%20
) verwendet, das einen zufälligen Wert pro Start des Python-Interpreters seit https://bugs.python.org/issue13703 zurückgibt . Es ist jedoch kein Zufall für die leere Zeichenfolge (immer 0), Sie müssen also etwas anderes verwenden, dasid
eingebaute!Auf den zweiten Blick könnte ich
id
direkt verwenden, aber es scheint immer gerade Zahlen zu produzieren. IIRC gibtid(object)
in CPython nur den Speicherort von zurückobject
, dies ist also sinnvoll. Wenn ich Jython oder IronPython verwenden würde, könnte ich die Division durch 7 überspringen. Trotzdem isthash(id)
vsid(0)//7
in Python 3 gleich, kann aber den/
Operator zum Abschneiden der Ganzzahldivision in Python 2 verwenden und ein Byte speichern.quelle
PowerShell , 354 Byte
Probieren Sie es online!
Ho-hum. Nimmt alle Ergebnisse zusammen mit
0
s und setzt sie dann-split
fort0
, um ein Array von Zeichenfolgen zu erstellen. Übergibt das Array, anGet-Random
das zufällig eines ausgewählt wird. Das bleibt in der Pipeline und die Ausgabe ist implizit.quelle
Python 2 , 385 Bytes
-1 Byte dank ovs.
Probieren Sie es online!
quelle
Applescript, 391
Ich finde es toll, wie AppleScript-Listen eine
some item
Methode haben:quelle
Bash + GNU-Dienstprogramme, 230
Die binäre zopfli-Ausgabe ist hier nicht gut dargestellt; Stattdessen können Sie das Skript aus Base64-codierten Daten rekonstruieren:
Beachten Sie, dass die komprimierten Daten, wie in der Frage angegeben, in Kleinbuchstaben dekomprimiert werden. Dies macht die Zopfli-Komprimierung ein bisschen effizienter und spart 16 Bytes.
quelle
tail +2
funktioniert bei mir nicht,sed 1d $0
speichert aber trotzdem ein byte. Da die Ausgabe nach STDERR standardmäßig zulässig ist, brauchen Sie das nichtexit
. Auch die letzten zehn Bytes des Programms können entfernt werden.R , 360 Bytes
Probieren Sie es online!
Nicht gerade die eleganteste Lösung. R hat eine nette Funktion
stdin
, mit der Sie in die Quelldatei umleiten können, sodass Sie (kleine) Datensätze in den Quellcode einfügen, Bytes für die Aufteilung von Zeichenfolgen oder schlimmer noch speichern und den Vektor selbst konstruieren können (all diese Anführungszeichen summieren sich in Eile). Zusammen mit den integrierten Funktionen für die Zufallsstichprobe ist dies eine kurze Antwort.quelle
Kohle ,
203184 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Bearbeiten: 19 Bytes gespart, indem alles gesenkt wird. Erläuterung:
quelle
Retina ,
333331321 BytesProbieren Sie es online! Bearbeiten: 1 Byte durch Komprimieren
doubt
und 1 Byte durch Reduzieren von allem gespeichert, damit ich komprimieren kannreply
. Dann speicherte ich 10 Bytes, indem ich @ Leos Retina Kolmogorov-Golfer für den Kleinbuchstaben verwendete (das ist zufällig die Anzahl der Bytes, die in meiner 333-Byte-Antwort gespeichert wurden).quelle
Kokosnuss , 380 Bytes
Coconut Hafen von totallyhuman ‚s Antwort
Probieren Sie es online!
quelle
T-SQL, 393 Bytes
Die Funktion
STRING_SPLIT
ist nur in SQL 2016 und höher verfügbar.Das Beste, was ich für frühere Versionen mit
VALUES('It is certain'),('It is decidedly so'),...
464 Zeichen bekommen konnte.Formatiert, damit Sie den Arbeitsteil sehen können:
NEWID()
generiert eine neue, pseudozufällige GUID, so dass eine pseudozufällige Sortierung möglich ist.quelle
Jelly , 201 Bytes
-2 Bytes dank Mr. Xcoder. -1 Byte dank user202729.
Probieren Sie es online!
Verdammt , die Komprimierung von SOGL ist gut.
quelle
ỴX
an das Ende des Codes anhängen , damit er zufällig aus einem davon auswählt)05AB1E , 171 Bytes
Probieren Sie es online!
Erläuterung
“ ... “
Drückt eine Zeichenfolge aller erforderlichen Wörter.Einige Wörter stammen direkt aus dem 05ab1e-Wörterbuch.
Einige sind in einfachen ASCII (wie
haze
) geschrieben.Einige sind kombiniertes Wörterbuch und ASCII (wie
do
+n't
).Dann lautet der Verarbeitungscode:
quelle
,
und'
fügte hinzu.ye
, wenn neue Wörterbuchwörter (,,don
undha
) verwendet werden, und zweimal -2, wenn die Liste nach Wortanzahl sortiert wird und Delta-Komprimierung verwendet wird.Ruby,
362361 BytesProbieren Sie es online!
quelle
?.
statt'.'
.?
einzelne Zeichenfolgen-LiteralPython 3, 386 Bytes
quelle
Perl, 366
quelle
As I see it, yes
.split
.print
und 1 weiteres Byte speichern. Setzen Sie einfach ein unäres Pluszeichen vor die Liste:print((0..9)[5])
würde werdenprint+(0..9)[5]
.05AB1E ,
208217 BytesProbieren Sie es online!
Ziemlich einfache Lösung. Die möglichen Antworten werden mit dem Zeichen x verkettet (da es in den Antworten nicht vorhanden ist) und dann komprimiert (innerhalb von • ). 'X¡Ω wird auf x aufgeteilt und eine zufällige Auswahl getroffen.
Vielen Dank an @Emigna für den Hinweis, dass die Alphabet-Komprimierung 'oder' nicht gut gefällt. Behoben durch Umgeben der komprimierten Zeichenkette mit don ' und , yes .
quelle
,
und'
ist mit Leerzeichen, so dass der Ausgang für die 2 Zeilen falsch.PHP ,
412385337384 BytesProbieren Sie es online!
Ziemlich einfache Lösung. Teilen Sie den String durch ein Trennzeichen (in diesem Fall
1
) und wählen Sie ein zufälliges Element aus dem Array aus.quelle
php
, damit der Code kompiliert werden kann. 2, Sie können'|'
mit1
und alle|
mit1
für -2 Bytes ersetzen ; 3 sollte in Betracht ziehen, Ihren Link für "Online-Test" auf TIO.run zu ändern, wie dies von der Community bevorzugt wird.PHP 7.2.3-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Mar 6 2018 11:18:25) ( NTS )
. Ich bin mir nicht sicher, ob es in früheren Versionen darauf ankommt oder nicht. In jedem Fall habe ich die Frage bearbeitet.<?=
die Explosion auch direkt verwenden und wiedergeben,[rand(0, 19)]
anstatt sie zuerst zu einer Variablen hinzuzufügen<?= explode("1", "str1str1str")[rand(0, 19)]
Javascript, 372 Bytes
-10 Bytes dank Shaggy
Probieren Sie es online!
quelle
OR
stattMath.floor()
7 Byte zu speichern:Math.random()*20|0
.Befunge
1221870 Bytes (Umfang des gesamten Feldes ist33x3630 * 29 Zeichen) Vielen Dank an Jo King, der mir geholfen hat, die nachgestellten Nullen zu entfernen, und mich aufgefordert hat, den Zufallsgenerator zu ändern.In der obersten Zeile werden das Zeichen "<" und die x-Position (28) dort platziert, wo sie auf dem Stapel abgelegt werden sollen. Dann geben wir die Art des Zufallsgenerators ein. Dies könnte verbessert werden, aber das ist, was ich kurzfristig liefern könnte ... Die "Zufalls" -Zahl wird versetzt, um die tatsächliche "Zufalls" -Zeile zum Lesen zu bringen.
Nachdem die Zufallszahl generiert wurde, setzen wir das Zeichen '<' in diese Zeile und drücken die Buchstaben auf dem Stapel und geben sie in der untersten Zeile erneut aus.
Hinweis; Wenn Sie den Interpreter verwenden, den ich in diesem Beitragstitel verlinkt habe, müssen Sie nach jedem Lauf erneut auf "Anzeigen" klicken, da das Hinzufügen des Zeichens "<" nach der Ausführung erhalten bleibt.
quelle
>:#,_@
, dass keine Nullbytes gedruckt werden. Oh, und fügen Sie einen TIO-Link hinzu.Java 8 ,
433,392,380, 379 BytesProbieren Sie es online!
quelle
String#split
. Sie können auch zusätzliche 11 Bytes mit(int)(Math.random()*20)
anstelle von speichernnew java.util.Random().nextInt(20)
. Und das Semikolon wird bei Lambdas nicht mitgezählt. Also insgesamt: 380 Bytes .Don't
anstelle vonDon' t
.Rot , 367 Bytes
Probieren Sie es online!
Es scheint in TIO nicht wirklich zufällig zu sein (obwohl es in der roten Konsole gut funktioniert), deshalb habe ich dem Header einen Zufallsgenerator hinzugefügt.
quelle
Excel, 399 Bytes
Da
CHOOSE(X.Y,<>)
ist das gleiche wieCHOOSE(X,<>)
, keine Notwendigkeit für eineINT
Hier kann man allerdings nicht viel Golf spielen ...
quelle
Aceto , 345 + 1 = 346 Bytes (+1 für
-l
Flag)Probieren Sie es online!
Nicht sonderlich interessant, aber ich kann mir nichts kürzeres in dieser Sprache vorstellen, keine komprimierten Strings oder so.
quelle
C - 426 Bytes
Verwendet eine nicht initialisierte Variable mod 20, um ein Array von Zeichenfolgen zu indizieren, das alle möglichen Ausgaben enthält. Compiler beschweren sich, dass stdio.h nicht enthalten ist, aber es funktioniert. Wahrscheinlich, weil es einfach so ist , dass die Standardbibliothek sowieso verlinkt ist. Ich Glückspilz.
quelle
Los, 530 Bytes
Bitte beachten Sie, dass auf dem Go-Spielplatz aufgrund der Funktionsweise von Seeding immer das gleiche Ergebnis erzielt wird. Wenn auf einem normalen Computer ausgeführt wird, funktioniert alles so, wie es sollte.
Ich denke, es ist möglich, ein bisschen mehr zu sparen, aber mein Wissen in Go hört dort auf :)
Formatierte und testbare Version
quelle
Excel-VBA,
362341339 BytesWobei
A1:T1
die verschiedenen Optionen enthalten sind. Liest die gesamte erste Blattreihe in ein Arrayv
und indiziert einen zufälligen Punkt entlang der ersten 19 Werte.Überrascht, dass für die Indizierung eines Arrays keine ganzzahligen Werte erforderlich sind
quelle
VBA, 358 Bytes
Eine anonyme VBE-Direktfensterfunktion, die keine Ein- und Ausgaben für STDOUT akzeptiert.
quelle
Java 8, 379 Bytes
Probieren Sie es online aus
quelle