Diese Herausforderung ist inspiriert von einer Reihe von Kinderbüchern von Fiona Watt und Rachel Wells, die ich kürzlich mit meiner Tochter genossen habe.
In jedem Buch beklagt sich eine Maus (illustriert, aber nicht Teil des Textes), dass eine Abfolge von 5 Dingen desselben Typs nicht ihre Sache ist. Es sichert dies dann, indem es erklärt, dass eine Komponente der Sache nicht die Eigenschaft hat, die sie erwartet.
Beim sechsten Mal findet die Maus ihr Ding und freut sich, weil sie die erwartete Eigenschaft hat.
Hier ist der Text eines typischen Beispiels:
That's not my bunny, its tail is too fluffy.
That's not my bunny, its paws are too rough.
That's not my bunny, its tail is too woolly.
That's not my bunny, its eyes are too shiny.
That's not my bunny, its nose is too wrinkled.
That's my bunny! Its ears are so soft.
Jetzt würden die meisten Programmierer erkennen, dass dies eine sehr algorithmische Methode zur Erzeugung von Text ist. Da es sich um einen so klaren Prozess handelt, sollten wir dies reproduzieren können, indem wir Code schreiben.
Beginnen wir mit drei Wortsammlungen:
things = ["dinosaur", "lamb", "princess", "reindeer", "train"]
parts = ["back", "bells", "body", "bows", "crown", "dress", "ears",
"engine", "fan", "flippers", "funnel", "hooves", "horns", "neck",
"nose", "roof", "sash", "side", "spines", "spots", "tail", "teeth",
"tiara", "wheels", "windows"]
properties = ["bumpy", "fluffy", "furry", "fuzzy", "glittery", "glossy",
"hairy", "red", "rough", "rusty", "shiny", "silky", "slippery",
"soft", "sparkly", "squashy", "thick", "velvety", "woolly"]
- Zuerst entscheiden wir, welche Art von Dingen wir beschreiben werden.
- Dann erzeugen wir 5 Mal die Zeile "Das ist nicht mein Ding, sein Teil ist auch Eigentum.
- Schließlich erzeugen wir die Zeile "Das ist mein [Ding]! Sein [Teil] ist so [Eigentum]!
Die Herausforderung
- Generieren Sie den Text einer "Das ist nicht meine ..." Geschichte.
- Es darf nicht immer derselbe Text wiedergegeben werden.
- Es ist Codegolf, also versuchen Sie es mit der kleinsten Anzahl von Bytes.
- Verwenden Sie eine beliebige Sprache.
- Leerzeichen spielen keine Rolle, aber zwischen den Zeilen muss ein Zeilenumbruch stehen.
- Die Listen der Quellwörter sind nicht Teil Ihrer Antwort (in TIO können sie der Kopfzeile hinzugefügt werden).
- Sie können die Listen der Quellwörter umbenennen.
- Die Ausgabe kann an ein Terminal erfolgen oder in ein Objekt generierter Text.
- Bitte fügen Sie einen Link zu einem Online-Dolmetscher bei.
- Plurale ignorieren, "seine Hörner sind" ist in Ordnung.
- Es muss keinen Sinn ergeben. Wenn Trichter Ihrer Prinzessin zu flauschig ist, sagen Sie einfach so.
Beispielausgabe:
That's not my train, its engine is too rusty.
That's not my train, its hooves is too thick.
That's not my train, its sash is too fuzzy.
That's not my train, its tail is too velvety.
That's not my train, its horns is too glittery.
That's my train! Its hooves is so hairy.
Viel Spaß beim Golfen!
Antworten:
05AB1E , 63 Bytes
Probieren Sie es online aus.
68- Byte- Version, die keine duplizierten Teile oder Eigenschaften ausgibt:
Probieren Sie es online aus.
Beide Programme nimmt die Liste der Dinge, ist der erste Eingang und eine Liste, die Liste der Teile und die Liste der Eigenschaften enthält, ist der zweite Eingang.
Erläuterung:
Sehen Sie sich meinen Tipp 05AB1E (Abschnitt Wie verwende ich das Wörterbuch? ) An, um zu verstehen, warum es
“€Š's€¯ ÿ!€ç ÿ€ˆ€Ê ÿ.“
ist"that's my ÿ! its ÿ is so ÿ."
und“€Š's€–€¯ ÿ,€ç ÿ€ˆ…« ÿ.“
ist"that's not my ÿ, its ÿ is too ÿ."
.quelle
Python 3 , 149 Bytes
Probieren Sie es online!
-9 bytes dank movatica
quelle
Kohle , 72 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erwartet , dass die Anordnungen von Dingen, Teilen und Eigenschaften in den Variablen zu sein
θ
,η
undζ
, was am einfachsten , indem sie in dem Eingang anstelle dem Kopf angeordnet ist. Erläuterung:Wähle eine zufällige Sache.
Drucken Sie fünf negative Sätze.
Drucken Sie den positiven Satz aus.
quelle
Japt v2.0a0
-R
, 73 BytesNimmt die drei Listen als
U
,V
undW
. Das sind die Eingabestandardvariablen sowieso, so dass nur die drei Listen in dem Eingabebereich setzen.Versuch es
quelle
Power Shell , 147 Byte
Das Hauptprogramm wird kein Teil oder Eigenschaft in einem Lauf wiederholen, und hat angemessene Randomisierung.
Probieren Sie es online!
Schreiben
get-random
So oft zu kostet so viele Zeichen! Wenn Sie jedoch nicht bereit sind, Teile und Eigenschaften wiederholen zu lassen, kann ich keinen Weg finden, dies in PowerShell weiter zu reduzieren. Es sei denn, Sie verschieben die ersten 3 Zeilenpipes an das Ende der 3 Zuweisungszeilen im Header. So etwas zu habenAber das scheint zu schummeln und schlägt Neils Antwort immer noch nicht.
Bearbeiten: Vielen Dank für die Tipps Matt, und danke AdmBorkBork für die Ausarbeitung, Entfernen der 3 Sätze von
get-
Text reduziert es auf 159 Bytes, dann etwas mehr Golf von Adm bekam es auf 147. Der Code, an den ich dachte, erlaubt Duplikate und widersprüchliche Angaben waren 144 Zeichen nach Anwenden der gleichen Golftipps.Probieren Sie es online!
Es besteht jedoch nicht nur die Tendenz, dasselbe mehrmals auszusprechen, sondern es ist auch so ziemlich erforderlich, dass Ihre Eingaben dieselbe Anzahl von Elementen aufweisen. Ich glaube, der verwendete Pseudozufallszahlengenerator ist stark von der Uhr abhängig, und schnelle wiederholte Aufrufe können oft zu demselben Ergebnis führen. Dann hat es die Bedingung, dass es nur die ganze Liste verwendet, wenn alle Listen die gleiche Länge haben. Mit nur 3 ~ 5 Zeichen und so vielen Vorbehalten bevorzuge ich den Code am Anfang dieses Beitrags.
quelle
Get-
von fallen lassenGet-Random
. Dies ist das Standardverb, das beim Auswerten von Befehlen getestet wird.Jelly , 72 Bytes
Probieren Sie es online!
quelle
JavaScript, 129
Die Eingabe besteht aus drei Arrays und gibt einen String zurück
quelle
Ruby , 128 Bytes
Probieren Sie es online!
quelle
C # ,
204203 BytesEs ist meine erste Antwort auf dieser Seite, also hoffe ich, dass es gut funktioniert. Es braucht auch diese drei Dinge, aber laut Frage zählen diese nicht:
Probieren Sie es online!
Ein Byte weniger dank Sok.
quelle
\r
ist nicht erforderlich, was Ihnen 2 Bytes erspart.APL (Dyalog Unicode) , 117 Byte SBCS
Probieren Sie es online!
?N
erzeugt einen Zufallsindex unter den ersten N Indizes.M?N
erzeugt M zufällige Indizes (ohne Ersatz) unter den ersten N Indizes.,
ist Verkettungt←T⊃⍨
… Wählt eine zufällige Sache und nennt siet
in der letzten Zeile zur Wiederverwendung auf.∘,¨
Verkettet die Zeichenfolge links mit jeder Zeichenfolge rechts.,¨
verkettet jede Zeichenfolge auf der linken Seite mit jeder Zeichenfolge auf der rechten Seite.↑
Ändert die Liste der Zeichenfolgen in eine Zeichenmatrix, sodass sie richtig gedruckt wird.quelle
Pyth ,
887876 BytesProbieren Sie es online!
Der oben dargestellte Code erfordert den folgenden Header:
Es gibt ein kleines Problem bei der Verwendung der 'Header'-Funktion in TIO mit Pyth, da es so aussieht, als ob TIO die Codeblöcke in Zeilenumbrüchen zusammenfügt und Zeilenumbrüche in Pyth von Bedeutung sind. Hier ist ein Link zu demselben Code, der den 'Header'-Block mit einer Junk-Zeile in der Ausgabe verwendet.
Edit: Umschreiben auf Golf 10 Bytes, Vorgängerversion:
J+" my "ONV5%"That's not%s, its %s is too %s."[JOGOH;%"That's%s! Its %s is so %s."[JOGOH
quelle
Perl 5.10, 127 Bytes
Laufen Sie mit
perl -M5.010 -f filename.pl
.quelle
JavaScript ES6, 149 (+15?) Bytes
quelle
Batch-Datei,
434424 + 7 BytesAusgeführt über
cmd/q/c
.Code nicht gezählt
Code gezählt
Ich gehe einige Herausforderungen durch, denen du dich stellen musst, und erkläre / begründe, was ich getan habe, damit andere sich verbessern können.
Wählen Sie ein zufälliges Element aus einem Array aus.
Dazu haben Sie eine Zufallszahl zwischen
1
undn
won
befindet sich die Anzahl der Elemente in diesem Array? Ich habe dann diese Zufallszahl als Token verwendet, um in jederfor
Schleife zu greifen (tokens=%r%
). Weil ich es so gemacht habe, konnte ich diesefor
Schleifen nicht mehr verschachtelntokens=!r!
es bei mir nicht funktionierte (mit verzögerter Erweiterung). Dies hätte einige Bytes gespart, da die Token nicht mehr als Variablen gespeichert werden müssten (set x=%%x
) .Zufallszahlengenerierung
m
ist mein Zufallszahlengenerierungsmakro. Wenn Sie dies so tun, sparen Sie 32 Bytes mehr als beiset/ar=%random%%%n+1
jeder anderen Zeile. Sie könnten halb betrügen und dass Token entscheideny
undz
sind das gleiche Element sein:Dies würde unter Beibehaltung einer gewissen Zufälligkeit die letzten 6 Elemente von ausschließen
c
. Dies würde ein Minimum von 20 Bytes einsparen, aber ich denke nicht, dass dies den Anforderungen der Operation entspricht.Theoretische Verbesserungen
Ich habe eine ganze Weile versucht, diesen "Pseudo-Code" zum Laufen zu bringen und dabei immer noch Bytes zu sparen:
Leider nimmt das Setup dafür viel zu viele Bytes in Anspruch, um rentabel zu sein (muss in <144 Bytes implementiert werden), aber ich kann das Gefühl nicht loswerden, dass das Hinzufügen der letzten 4 Codezeilen überflüssig und ruckelig ist.
quelle
The lists of source words are not part of your answer (in TIO they can be added to the header).
set a=%~1
usw. hinzufügen .Tinte , 119 Bytes
Mit den Listen definiert als
Probieren Sie es online!
Abhängig davon, was als Liste zählt, gibt es andere Ansätze. Wenn eine Liste eine Funktion sein kann, die ein Listenelement zufällig zurückgibt, beträgt der folgende Ansatz nur 91 Byte:
(mit den "Listen" wie folgt definiert)
Probieren Sie es online!
Es gibt auch den folgenden Ansatz.
Probieren Sie es online!
Diese Lösung hat 389 Bytes, aber wenn die Shuffle-Literale (die in diesem Szenario nicht wirklich verschoben werden können) als Listendefinitionen gelten und von der Byteanzahl ausgeschlossen werden können, sinkt diese auf 80 Bytes.
quelle
Bash + awk, 209 Bytes
Probieren Sie es online!
Akzeptiert Eingaben als
things parts properties
eine Datei mit einem Element pro Zeile des gewünschten Typs.Dies ist ein dateizentrierter Ansatz. Möglicherweise versuchen Sie später einen Array-zentrierten Ansatz, um festzustellen, ob er verbessert werden kann.
quelle
Python 3, 130 Bytes
Nehmen Sie Ihre Anforderungen wörtlich und setzen Sie die Zeilenumbrüche auf jeweils ein Byte:
quelle