Wollten Sie schon immer den Compiler fragen "Warum?" Die meisten von uns waren frustriert, als der Code nicht so funktionierte, wie er sollte. Mathworks hat daher eine nette kleine Funktion implementiert why
, die die Frage beantwortet. Um einige Beispiele aus MATLAB zu nennen:
why
The programmer suggested it.
why
To fool the tall good and smart system manager.
why(2)
You insisted on it.
why(46)
Bill insisted on it.
Ihre Aufgabe ist es, die why
Funktion in Ihrer Sprache zu implementieren . Die Funktion sollte mit und ohne Eingabeargument funktionieren (alternativ kann auch input 0
oder verwendet werden -1
). Die Funktion muss benannt werden why
(oder why(n)
wenn Sie in STDIN schreiben, wird die entsprechende Zeichenfolge gedruckt).
Wenn kein Argument angegeben wird oder das Argument null oder negativ ist, sollte die Ausgabezeichenfolge eine zufällige, gültige Phrase sein. So soll es eine Funktion sein why
, why()
, why(0)
oder why(-1)
dass die Rendite eines zufälliger Satz.
Wenn ein Eingabeargument n
angegeben wird (Funktionsargument, nicht STDIN), sollte die Ausgabe die n-te Zeichenfolge sein (unten definiert). Soll also why(1)
immer das gleiche Ergebnis ausgeben (drucken / anzeigen).
Die Sätze setzen sich wie folgt zusammen (Typ 1, Typ 2 und Spezial). Alle Sätze enden mit !
.
"Person" "ending" !
"Verb" "adjective" "Person" !
A list of special cases
Die Liste der Personen:
Stewie
Peter
Homer
The programmer
The system manager
You
Die Liste der Endungen:
suggested it
insisted on it
did it
Die Liste der Verben ist:
To fool
To satisfy
To please
Die Liste der Adjektive:
the smart
the bald
the tall
the rich
the stupid
Die Liste der Sonderfälle:
How should I know?
Stop asking!
Don't ask!
Die Art, eine Nummer auszuwählen, ist:
Art der Sätze:
Odd number => Type 1
Even number => Type 2
n % 7 = 0 => Type 3 (% is the modulus operator)
Namen: Der n-te Name wird mit dem Modul (%) definiert.
n = 1: 1 % 7 => Stewie
n = 2: 2 % 7 => Peter
...
n = 6: 6 % 7 => You
n = 7: 7 % 7 => How should I know?
n = 11: 11 % 7 => The programmer
n = 14: 14 % 7 => Stop asking!
n = 21: 21 % 7 => Don't ask!
Endungen: Die n-te Endung wird ebenfalls mit dem Modul definiert. Angenommen, die Endungen (1, 2 und 3) sind wie folgt aufgeführt (1 2 2 3)
. Verwenden Sie, da die Zahlen immer ungerade sind((n+1)/2 % 4)
n = 1: ((1+1)/2 % 4) => suggested it
n = 3: ((3+1)/2 % 4) => insisted on it
n = 13: ((13+1)/2 % 4) => did it
Adjektive: Das n-te Adjektiv wird über den Modul definiert. Da die Zahlen immer gerade sind, verwenden Sie:(n % 10)/2
n = 2: (2 % 10)/2 => Smart
n = 6: (6 % 10)/2 => The tall
...
Verben: Das n-te Verb wird ebenfalls mit dem Modul definiert. Angenommen, die Verben (1, 2 und 3) sind wie (1 2 2 3)
folgt aufgeführt: Verwenden Sie, da die Zahlen für Verben immer gerade sind(n % 8) / 2
n = 2: (2 % 8)/2 => To fool
n = 4: (4 % 8)/2 => To satisfy
n = 6: (6 % 8)/2 => To satisfy
n = 8: (8 % 8)/2 => To please
Nun sollte der Weg zum Erstellen eines Zufalls ziemlich einfach sein. Wählen Sie einfach einen Zufallsgenerator aus n
.
Einige Beispiele:
why
You suggested it!
why
To fool the tall Homer!
why
Don't ask!
why(1)
Stewie suggested it!
why(14)
Stop asking!
why(8)
To please the rich Stewie!
Es gelten die Standard-Code-Golfregeln. Ein Gewinner wird eine Woche nach dem Tag ausgewählt, an dem die Herausforderung veröffentlicht wurde.
why
oder wäreWHY
es akzeptabel?/2
funktionieren müssen. Das ergibt gebrochene Werte.13
sollte auch seininsisted
(14/2 = 7% 4 = 3 = 2nd of beharrt).the rich The programmer
aufgrund der angegebenen endenthe
?The
undTo
in Ihren Listen sollten wahrscheinlich Kleinbuchstaben sein, um Ihren Beispielen zu entsprechen ...Antworten:
JavaScript (ES6) 345
Ich bin mir nicht sicher über die Zahlen, aber hier ist mein Versuch.
Testen Sie das folgende Snippet in einem EcmaScript-kompatiblen Browser.
quelle
0
als Trennzeichen anstelle von,
!split(0)
ist die gleiche Länge vonsplit','
(so tun, als ob dies Backticks sind)C #, 502 Bytes
Für dieses Projekt muss AssemblyName auf why gesetzt sein, wodurch eine ausführbare Datei mit dem richtigen Namen erstellt wird.
Völlig Golf gespielt:
Einrückung und neue Zeilen für Klarheit:
Beispiel Ein- / Ausgabe:
quelle
Powershell
437461453 BytesBearbeiten: Verpasste die duplizierten Verben
Aufteilung zwischen dem Korpus und den Berechnungen für die Byteanzahl
to
,the
,it
und!
da sie feste Plätze haben).Setzt das Standardargument auf 0, wenn nichts angegeben ist. Wenn argument gleich ist
<1
, wird eine Zufallszahl<99
fn:1
abgerufen und erneut ausgeführt. Technisch-50
funktioniert dies auch, da es sich um einen zufälligen Fall handelt.Erläuterung:
fn:1
99 Wurde ausgewählt, um ein Byte zu speichern. Wenn es mehr als 99 mögliche Sätze oben gibt (nicht berechnet), erhöhen Sie sich auf 999 bzw. 9999 (+1/2 Byte).quelle
MUMPS, 379 Bytes
Wenn keine Eingabe erfolgt, wird eine Zufallszahl in 0..839 generiert.
Verwendung:
Durch die von links nach rechts verlaufende Bewertungsstrategie von MUMPS werden hier einige Bytes in Klammern gespart.
Randnotiz: Sehen Sie die Saiten, die aussehen
"foo^bar^baz^qux"
? Dies sind sogenannte "begrenzte Zeichenfolgen" und die Standardmethode zum Speichern von Listen, die innerhalb der maximalen Zeichenfolgengrößenbeschränkung liegen, da MUMPS tatsächlich keine Listen / Arrays (oder sogar keine Datenstrukturen außer Bäumen) hat. Für Listen, die zu groß sind, um in eine einzelne Zeichenfolge zu passen, verwenden wir stattdessen Bäume der Tiefe 1 und setzen die Werte auf die Blätter des Baums. Spaß!quelle
why
Funktion. ;)Emacs Lisp 473 Bytes
Größte ‚Abfall‘ ist wahrscheinlich die
format
,%s
... Abschnitte. Wenn Variablen ohne die Angabe in die Zeichenfolgen eingefügt werden könnten, würden 10 Byte%s
und weitere 12 Byte eingespartformat
quelle
Ruby
396378372 BytesIch bin sicher, dass dies nicht bis zum Äußersten golfen wird.
Bearbeiten: Ich habe gerade festgestellt, dass ich die Rangfolge der Operatoren nicht kenne. Naja..
quelle
CJam, 281 Bytes
Permalink
Ich habe CJam noch nie benutzt, daher nehme ich alle Tipps an. Ich bin mir sicher, dass es viele Tricks gibt, die ich nicht kenne!
(Ich konnte nicht herausfinden, wie ich diese Funktion als "warum" bezeichnen soll - es scheint, dass es in CJam keine Funktionen gibt - ich bin mir also nicht sicher, ob eine CJam-Antwort in Ordnung ist oder nicht ...)
quelle
Lua 5.3.0,
452460446 BytesDies ist mein erster Versuch, einen Code Golf zu spielen. Bitte korrigieren Sie mich, wenn ich etwas falsch gemacht habe!
Ungolfed:
quelle
Python (2), 692 Bytes
Ich lerne noch, also sei bitte sanft! :)
Funktioniert mit oder ohne int als Befehlszeilenargument.
Ich habe versucht, die Code-Korrektheit so weit wie möglich zu betonen, wie beim Erzeugen von Zufallszahlen von
-sys.maxint - 1
bissys.maxint
und im richtigen Fall Sätze anzeigte.Der Code basiert sehr stark auf if-Anweisungen, von denen ich sicher bin, dass sie durch etwas effizienteres ersetzt werden könnten.
Feedback ist sehr willkommen!
Ungolfed (1341 Bytes)
quelle
argument%8/2-1
und entfernen Sie das zweite. Sie können auch ersetzen==0
mit<1
.