Letzte Woche habe ich eine Challenge gepostet, um Duck, Duck, Goose zu spielen . Dies führte zu einer Reihe von Minnesotanern, die sich zu ihrer regionalen 'Grey Duck'-Variante äußerten .
Also hier sind die Regeln:
Mit dieser Liste von Farben:
Red
Orange
Yellow
Green
Blue
Indigo
Violet
Gray
Schreiben Sie ein Programm, um diese Regeln zu befolgen:
- Wählen Sie eine dieser Farben aus, stellen Sie sie vor das Wort "Ente" und drucken Sie das Ergebnis in eine neue Zeile.
- Wenn die Farbe nicht "Grau" war, wiederholen Sie Schritt 1.
- Wenn die Farbe 'Grau' war, beenden Sie Ihr Programm.
Regeln, die befolgt werden müssen:
- Das Programm sollte nicht konsistent die gleiche Anzahl von Zeilen drucken.
- Es kann auf "Grey Duck" beginnen, sollte aber nicht konsequent tun.
- Es sollte genau eine Ente auf jeder Zeile sein und es werden keine Leerzeilen ausgegeben.
- Es sollte mindestens ein Leerzeichen zwischen einer Farbe und einer Ente sein.
- Leerraum vor und nach der signifikanten Ausgabe spielt keine Rolle.
- Der Fall der Ausgabe spielt keine Rolle.
- Farben können wiederholt werden.
- Die Ausgabe muss nicht jedes Mal jede Farbe enthalten, aber es muss möglich sein, dass Ihr Code jede Farbe ausgibt.
- Es können keine Farben außerhalb des obigen Arrays enthalten sein.
- Entweder grau oder grau sind in Ihrer Antwort akzeptabel.
- Farben sollten nicht konsistent in derselben Reihenfolge sein.
- Streben Sie das kürzeste Programm an. Die kleinste Anzahl von Bytes gewinnt.
Beispielausgabe:
Green duck
Orange duck
Yellow duck
Indigo duck
Yellow duck
Gray duck
Vielen Dank an @Mike Hill, der mich zum ersten Mal auf diese Variante aufmerksam gemacht hat.
Grey
einmal druckte (damit ich nicht aus allen Farben auswählen und prüfen musste, ob ich ausgewählt hatteGrey
).Antworten:
05AB1E ,
4240 BytesDank Erik the Outgolfer 2 Bytes gespart
Probieren Sie es online!
quelle
ind
istëß
!LuaLaTeX,
220211 ZeichenBefehl:
Nicht die kürzeste, aber die ausgefallenste. Basierend auf der @ skillmon-Lösung
quelle
tikzducks
dort zu verwenden :):)
6502 Maschinencode (C64), 124 Bytes
Online - Demo - Verbrauch:
SYS49152
.Erklärung (kommentierte Demontage):
quelle
sys 49152
.Perl 5 , 79 Bytes
Probieren Sie es online!
quelle
Taxi , 1995 Bytes
Probieren Sie es online!
Ich denke, es ist erwähnenswert, dass 47% dieses Codes nur eine zufällige Ganzzahl von 1 bis 8
auswählen . Außerdem ist Taxi so ausführlich, dass es viel kürzer ist, das
duck\n
Nach jeder Farbe hart zu codieren, als es später zu verketten.Hier ist die Version ohne Golf:
quelle
Java (OpenJDK 9) , 133 Byte
Probieren Sie es online!
Erklärungen
quelle
Ruby ,
93 91 90 89 87 8685 BytesDank an Dom Hastings für das Speichern von 2 Bytes, Kirill L. 1 Byte und Asone Tuhid 1 Byte!
Probieren Sie es online!
quelle
()
den Code entfernen , und wenn Sie$.
anstelle dess
Speicherns den Index verwenden, können Sie vermeiden, einen Index zu erstellens
(da er$.
auf die Zeilennummer vorinitialisiert ist!). Sie müssen zumGrey
Ende der Liste gehen und$.<7
stattdessen nachsehen obwohl. Ich hoffe, das hilft!s=1
und$.
war perfekt!while s...
und der Raum wurde benötigt. Ich habe diese Gelegenheit nach dem Wechsels
zu nicht gesehen$.
.Color+" duck"
speichert 1 ByteOperation Flashpoint- Skriptsprache, 133 Byte
Rufen Sie an mit:
Beispielausgabe:
Zuerst habe ich die Herausforderung irgendwie falsch verstanden, als ob das Ziel darin bestand, nur eine unterschiedliche Anzahl von Zeilen auszugeben, die nicht unbedingt an der "Gray duck" -Linie enden müssen. Nach dieser falschen Interpretation entstand ein etwas interessanteres Stück Code:
quelle
pdfTeX,
231220219209207 BytesLuaTeX,
216206204 Bytesquelle
Brachylog , 68 Bytes
Probieren Sie es online!
quelle
Ruby ,
8481 BytesDanke an Dom Hastings für -3 Bytes.
Probieren Sie es online!
quelle
$_
, können Sie nuruntil/y/
am Ende für -3 haben!PHP, 89 Bytes
Laufen Sie mit
-nr
oder versuchen Sie es online .quelle
> <> 107 Bytes
Probieren Sie es online!
quelle
Oktave ,
114112 BytesProbieren Sie es online!
Es gibt eine Reihe verschiedener Optionen, die alle zwischen 112 und 118 Byte liegen ... Einige initialisieren einen Index am Anfang und dekrementieren ihn für jede Schleife um eine Zufallszahl und warten, bis er 0 ist . Andere verwenden
printf
stattdessendisp
einige Klammern und so weiter zu vermeiden.quelle
cat
undhorzcat
. Trotzdem danke :)PHP ,
1331251111089792 BytesProbieren Sie es online!
-8 Bytes dank @Olivier Grégoire
-3 Bytes dank @manatwork
-11 Bytes dank @Dom Hastings
quelle
Grey
in der Farbfolge und im Test zuX
, da sie nicht verwendet wird. Sie erhalten 6 Bytes.for
‚s Zustand keine Klammer müssen:x!=$b=$a[array_rand($a)]
. Übrigens,?>
beendet eine Aussage, die nicht;
davor stehen muss.x
und$b=$a..
als Bedingung undrand(0,7)
anstelle von verwendenarray_rand
. Sie können den Zeilenumbruch zwischen?>
undGrey duck
auch entfernen . Auch Ihr TIO-Link hatte noch volle Tags. Sie können-d short_open_tag=on
Flags hinzufügen , damit das funktioniert! :)Bash + GNU-Dienstprogramme, 72
Probieren Sie es online aus .
quelle
Bash, 96 Bytes
Vielen Dank an @DigitalTrauma.
quelle
>0
zog mich jedoch aus und ging${#a}
stattdessen8
.${#a}
statt behalten8
? Dies ist Code-Golf - Sie müssen Ihren Code nicht verallgemeinern, um ihn für eine andere Anzahl von Farben zu modifizieren. Alles, was Sie tun müssen, ist die Spezifikation in der kleinsten Anzahl von Bytes zu erfüllen.JavaScript, 104 Byte
Probieren Sie es online aus
quelle
new Date
für das RNG verwenden können.AWK , 114 Bytes
Probieren Sie es online!
Erläuterung
Beachten Sie, dass hierfür einige Eingaben erforderlich sind. Die Eingabe kann leer sein. Um unnötige Eingaben zu vermeiden, muss die erste Zeile mit vorangestellt werden
BEGIN
quelle
PowerShell , 94 Byte
Probieren Sie es online!
Schleifen bis
$r
ist gleichGrey
.-split
Wenn sich innerhalb der Schleife die Literalzeichenfolge in Zeilenumbrüchen befindet, wirdRandom
eine davon ausgewählt und dann das Farbplus ausgedrucktDuck
(technisch gesehen verbleibt sie in der Pipeline, und die Pipeline-Bereinigung bei der nächsten Schleifeniteration bewirkt, dass einWrite-Output
passiert). Es ist zu beachten, dass es theoretisch möglich istGrey
, niemals ausgewählt zu werden und die Schleife unendlich fortzusetzen, aber dies wird (im Sinne der Wahrscheinlichkeit) so gut wie nie passieren.quelle
R 101 Bytes
Probieren Sie es online!
Stark inspiriert von der Antwort von @ user2390246 auf die damit verbundene Herausforderung. Wir brauchen zwei Zufallsquellen: Ändern der Reihenfolge der Farben und Abtasten der nichtgrauen Entenfarben. Es
sample
wird eine Zufallsstichprobe mit einer Zufallsgröße genommen, die durch eine Exponentialverteilung mit einem Ratenparameter angegeben wird1
, der auf eine ganze Zahl gekürzt wird. Unglücklicherweise eine exponentielle distrubtion Verwendung bedeutet , dass es eine Wahrscheinlichkeitexp(-8)
oder rund ,0.0003354
dass die Probe zumindest sein wird8
, so dass wir , um Probe haben mitreplace=T
.quelle
\n
mit einem tatsächlichen Newline für 1colors()[c(26,254,498,552,640,652)]
anstelle vonscan(..)
etc. auf ca. 83 kommen solltecolors()
! Das sind ein paar nette Golfer, die Sie meiner Meinung nach als Ihre eigene Antwort posten sollten, da dies die weniger elegante Art ist, die Farben zu erhalten.Python 2 ,
138133120117116 BytesProbieren Sie es online!
Viel besser mit ein paar Ideen von @EriktheOutgolfer. Vielen Dank!
-3 mehr dank @ovs
-1 danke an @Rod für einen coolen neuen Trick gelernt :-)
quelle
Retina ,
6968 BytesDanke an Leo für das Speichern von 1 Byte.
Probieren Sie es online!
Erläuterung
.
Unterdrückt die implizite Ausgabe am Ende des Programms (sonst würden wir zwei graue Enten bekommen)./y/^{
Umschließt das gesamte Programm in einer Schleife, die fortgesetzt wird, solange der Arbeitsstring kein a enthälty
. Der Rest dieser Zeile setzt die Arbeitszeichenfolge auf eine durch Zeilenvorschub getrennte Liste aller Farben.Wir sehen eine zufällige Zeile von der Arbeitszeichenfolge (und daher eine zufällige Farbe). Und wir drucken das Ergebnis mit einem Trailing
duck
und einem Linefeed.quelle
MATL ,
6864 BytesProbieren Sie es online!
Erläuterung
quelle
Python 3,
130,128,127,126, 125 Bytes-1 von @ElPedro!
-1 von mir
-1 von @Bubbler!
Probieren Sie es online!
quelle
d!=c[0]
ein Byte speichern?print(d,'duck')
ein Byte speichern. Das Standardtrennzeichen ist ein Leerzeichen.Java (JDK 10) , 287 Byte
Probieren Sie es online!
Mein allererster Codegolf! Offensichtlich nicht wettbewerbsfähig, nur froh genug Java gelernt zu haben (derzeit in CS200), um teilnehmen zu können.
quelle
Kotlin , 122 Bytes
Probieren Sie es online!
quelle
MS-SQL, 158 Bytes
Basiert größtenteils auf Razvans hervorragender Antwort , verwendet jedoch die
STRING_SPLIT
Funktion, die für MS-SQL 2016 und höher spezifisch ist. Verwendet auch eineGOTO
anstelle einerWHILE
Schleife.Formatiert:
quelle
T-SQL ,
195185184 Bytesquelle
BEGIN
.Python 2 , 98 Bytes
Schau ma keine Importe!
(Druckt zusätzliche Leerzeichen zwischen den Farben und
duck
wie in der Frage erlaubt)Probieren Sie es online!
Ein ziemlich schlechter Pseudozufallszahlengenerator, der mit der Objekt-ID 0 ausgesät ist (aber zur Spezifikation zu passen scheint) und wiederholt eine Ganzzahl
x
in [0,7] liefert, mit der eine Liste von Zeichen aus diesem Index in Scheiben geschnitten wird Schritte von 8 , um den Farbnamen zu erhalten, der zusammen mitduck
als Tupel gedruckt wird, wobei ein Leerzeichen dazwischen erzwungen wird. Wennx
NullGrey
wird gedruckt und die Auswertung der nächsten Eingabe in den Modulo-basierten Zufallszahlengenerator versucht, durch Null zu teilen (v=1/x,v
versucht, ein neues Tupel mit dem ersten Element zu erstellen1/x
=1/0
)Genauso ist 100 in Python 3 mit
quelle