Vielleicht kennen einige von Ihnen dieses Spiel bereits: Sie haben eine Sammlung von Gummibärchen in verschiedenen Farben. Für jede Farbe kann die Bohne unterschiedliche Geschmäcker haben, einige sind gut und einige sind schlecht, und man kann sie nicht unterscheiden. Sie müssen eine Bohne einer bestimmten Farbe auswählen und beten, dass Sie eine gute ausgewählt haben.
Schreiben Sie also das kürzeste Programm, das eine Farbe Ihrer Wahl (aus einer bestimmten Liste) erhält und den ausgewählten Geschmack zufällig zurückgibt. Der Geschmack muss aus einer eingebauten Liste ausgewählt werden. Die mögliche Liste der Ein- und Ausgänge ist:
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
Regeln:
- Sie können davon ausgehen, dass die Eingabe immer eine Farbe aus den Eingabemöglichkeiten sein wird.
- Groß- und Kleinschreibung und nachgestellte Leerzeichen und / oder Zeilenumbrüche spielen keine Rolle.
- Die Ausgabe muss einheitlich zufällig sein: Aufeinanderfolgende Programmausführungen müssen zu unterschiedlichen Ergebnissen führen, und die Chancen, einen bestimmten Geschmack zu erhalten, müssen für alle Geschmäcker in einer Liste gleich sein.
Dies ist Code-Golf , also kann das kürzeste Programm gewinnen!
code-golf
random
game
compression
Charlie
quelle
quelle
blueberry
nicht sein sollenblue berry
.Antworten:
C #,
418313305271 BytesSelbst für C # zu lang, aber ich kann nicht sehen, wie ich es kürzer machen kann.
Vollversion / Formatierte Version:
quelle
05AB1E , 126 Bytes
Erläuterung:
Wenn sich jemand wundert, hier ist die unkomprimierte Zeichenfolge:
Ich kann es wahrscheinlich mit ein paar cleveren Tricks und dem Wörterbuch mehr komprimieren.
Probieren Sie es online aus!
quelle
"eougwt"
um.•4Õ!Õ•
für -1.eougwt
und.•4Õ!Õ•
anstelle von"eougwt"
und.•4Õ!Õ•
. Hoppla.JavaScript (ES6), 235 Byte
Ich muss herausfinden, wie man Strings in JS komprimiert!
Wenn das für Ihren Geschmack nicht "zufällig genug" ist, fügen Sie 7 Bytes hinzu, die durch ersetzt
new Date
werdenMath.random()
.Versuch es
quelle
eluaoi
, ich habe selbst darüber nachgedacht und dachte: "Oh, schau, wie schlau ich bin", dann hast du gesehen, wie du mich geschlagen hast!new Date%a.length
ist nicht "einheitlich zufällig".eluaoi
ungefähr zur gleichen ZeitMath.random
stattdessen verwendet wird.Gelee ,
101100 BytesProbieren Sie es online aus!
quelle
Japt ,
148146 BytesProbieren Sie es online aus!
6 Bytes dank Shaggy und ETHproductions gespart
quelle
R
statt0
um ein Byte zu speichern. Möglicherweise können Sie auch komprimieren,eluaoi
indem Sie mit der Reihenfolge herumspielen.qR
welche gleich lang ist?®
.eaiou
die Zeichenfolge verwenden, können Sie sie auf drei Byte komprimieren (möglicherweise gibt es auch andere Drei-Byte-Kombinationen).Python 2 ,
301258 BytesProbieren Sie es online aus!
Es wurden sehr viele Bytes gespeichert, indem die Schlüssel gekürzt wurden, um den zweiten Index der Eingabe zu verwenden, wie von @TheLethalCoder vorgeschlagen, und durch Aufteilen von Kommas anstelle einer direkten Liste.
quelle
eluaoi
als Wörterbuchschlüssel und greifen Sie mit Index 2 der Zeichenfolge darauf zu, um Bytes zu sparen.Gelee ,
9594 BytesEin monadischer Link, der eine Liste von (Klein-) Zeichen akzeptiert und eine Liste von Zeichen zurückgibt.
Probieren Sie es online aus! oder essen Sie eine Packung mit 48 Stück .
Wie?
Neunundachtzig der vierundneunzig Bytes sind eine komprimierte Liste von acht Zeichenfolgen. Zwei davon sind leere Zeichenfolgen und die anderen sechs sind jeweils durch Zeilenumbrüche getrennte Geschmacksrichtungen für eine der Farben:
Der Rest des Programms analysiert die Eingabe, um zu entscheiden, welche Liste verwendet werden soll, teilt die ausgewählte Liste durch Zeilenumbrüche und wählt ein zufälliges Element aus:
quelle
Java, 288 Bytes
Testen Sie es selbst!
Könnte mit einem Golf gespielt werden
char[]
.Der zufällige Teil kann jedoch ohne die explizite Verwendung von nicht "gleichmäßig verteilt" werden
Random.nextInt(int)
. Auch(int)(Math.random()*a.length)
ist nicht gleichmäßig verteilt.quelle
new java.util.Random().nextInt(a.length)
statt ... verwenden müssen(int)(Math.random()*a.length)
.Math.random()
liefert eine Zahl mit einigen Besonderheiten (Potenz0
und Vorzeichen von0
und 52 Zufallsbits). Also eigentlich Sie verwenden eine Entropie von 52 ohne weitere Prüfung. Wenn3
zum Beispiel die Länge2^52
nicht durch 3 teilbar ist , wird sie nicht zufällig verteilt. Aus diesem Grund verfügt dieRandom.nextInt(int)
eigentliche Java-Datei, nicht Javadoc, in Zeile 394 über einen Schleifenmechanismus, um sicherzustellen, dass die Zahl unter den fairen Zahlen liegt. Wenn ich nicht sage "es ist gut genug", ist nurRandom.nextInt(n)
fair.Math.random()
kann nicht verwendet werden , wenn2^53
nicht gleichmäßig durch die Anzahl Sie mehrfach unterteilt werden sie mit? Wenn Sie also eine Zufallszahl von 0(int)(Math.random()*4)
bis 3 möchten, ist es akzeptabel, sie gleichmäßig zu teilen (viermal2251799813685248
), aber wenn Sie sie*3
stattdessen verwenden, ist dies nicht der Fall (dreimal3002399751580330.666...
), da sie auf int Etagen gegossen wird und einige Teile entstehen 1 kleiner als andere. Und da die Länge in Ihrem Fall variabel ist, ist sie auch nicht gleichmäßig verteilt (mit der Möglichkeit, Länge 3 zu sein).Math.random()
, wenn jemand etwas "einheitlich" oder "ziemlich" zufällig sagt, verwenden Siejava.util.Random
. Deshalb habe ich mich auch über Shaggys Antwort beschwert.> <> 311 Bytes
Probieren Sie es online aus oder schauen Sie es sich auf dem Fischspielplatz an
Mit SK kuscheligen Strickwaren und Doof God Dennac!
Erläuterung: Die erste Aufgabe des Fisches besteht darin, das eingegebene Wort durch Zick-Zack-Verfahren auf der linken Seite herauszufinden. Der Fisch kann jeweils nur einen Buchstaben lesen, und es werden weniger Bytes benötigt, um dies destruktiv zu tun. Zuerst liest der Fisch den ersten Buchstaben und fragt, ob es so ist
"y"
- wenn ja, ist das Wort "gelb", sonst geht es weiter. Es liest dann den zweiten Buchstaben - wenn ja"l"
, ist das Wort "blau", sonst geht es weiter; und so weiter. Wenn es liest fünf Buchstaben und sie stimmen nicht überein"y"
( Y ellow),"l"
(b L ue),"o"
(br O wn),"n"
(ora N ge) oder"n"
(Gree N ) , die jeweils, muss die Farbe gewesen sein "weiß".Als nächstes kommt das zufällige Bit. Für die Farben mit zwei möglichen Ausgaben ist dies ziemlich einfach - für Gelb gibt der Fisch beispielsweise den folgenden Code an
x
:Das
x
legt die Richtung zufällig fest: Wenn es oben oder links ist, wirbelt der Fisch um die Spiegel zurück zumx
, aber wenn es rechts oder unten ist, liest es "faule Eier" oder "gebuttertes Popcorn" (umgekehrt).Die Vier-Wege-Teilungen (für Weiß und Grün) sind unordentlicher, folgen jedoch demselben allgemeinen Prinzip - das erste ist:
Beachten Sie, dass der Fisch, wenn er von Anfang an nach oben schwimmt,
x
acht"
Sekunden durchläuft , wodurch der Saitenmodus viermal ein- und ausgeschaltet wird. Dann trifft er auf einen Spiegel und schwimmt wieder nach unten.Um zum letzten Vier-Wege-Split zu gelangen, muss der Fisch durch das
e
undr
von "Limette" und "Birne" schwimmen , diee = 14
dem Stapel hinzugefügt werden (und ihn umkehren), also müssen wir das zuerst mit löschen~
. In einem der vier Zweige schwimmt man auch durch eine Junk-Zeichenfolge,"> "
mit der wir löschen~~
.Schließlich erreicht der Fisch nach dem Hinzufügen eines der Bohnenaromen zum Stapel den Strom von
v
s in der Spalte ganz links, an den er gesendet wirdHiermit werden Zeichen gedruckt (mit einem der
o
s in "Kokosnuss"), bis keine mehr übrig sind.quelle
T-SQL,
432 423 375 367 336295 ByteEndlich eine satzbasierte Operation !!
(Zeilenumbrüche dienen zur Anzeige und werden insgesamt nicht gezählt.)
Die Eingabe erfolgt über Spalte c in benannte Tabelle t , gemäß unseren Richtlinien .
Ich füge unsere Eingabetabelle einfach einer Tabelle mit den gültigen Farb- / Geschmackskombinationen hinzu und wähle dann eine zufällige Zeile aus.
ORDER BY NEWID()
ist eine gängige Methode zum Randomisieren der Sortierreihenfolge in SQL . Abhängig davon, wie streng Sie sind, können Sie es möglicherweise nicht als vollkommen gleichmäßig zufällig betrachten, aber es sollte ausreichend zufällig für die Auswahl von Jelly Beans sein.BEARBEITEN 1: 9 Bytes wurden gespeichert, indem nur das 3. Zeichen der Farbe verwendet wurde, inspiriert von anderen Antworten.
BEARBEITEN 2: 48 Bytes wurden gespeichert, indem das Farbflag und der Geschmack in eine einzelne Spalte eingefügt wurden. Viele Zeichen im INSERT gespeichert.
3 EDIT: Gespeicherte 8 Bytes durch den Austausch
INSERT INTO b(o)
mitINSERT b
EDIT 4: Sparte 31 weitere Bytes, indem Sie sich direkt der virtuellen Tabelle von anschließen
VALUES
und daher dasCREATE TABLE
und eliminierenINSERT
.BEARBEITEN 5: Sparen Sie 41 Bytes, indem Sie auf die Nur-SQL 2016-
STRING_SPLIT
Funktion aktualisieren , wodurch ich die variable und dynamische SQL-Ausführung eliminieren kann.quelle
PHP , 242 Bytes
Probieren Sie es online aus!
quelle
Mathematica, 247 Bytes
Eingabeformular
quelle
eluaoi
Trick anwenden? Ich kenne Mathematica nicht, also nur eine Idee.Clojure, 231 Bytes
Dieselbe Idee wie die anderen, ich kann im Vergleich zu anderen Sprachen nur etwas Platz sparen. Das Komprimieren von Zeichenfolgen scheint eine verlorene Sache zu sein.
quelle