Einführung:
Da es fast Halloween ist, dachte ich nur an zufällige Halloween-Herausforderungen. Schließlich las ich Frankensteins Wikipedia-Seite durch und fand folgenden Text:
Die Kreatur
Ein Teil von Frankensteins Ablehnung seiner Schöpfung ist die Tatsache, dass er ihr keinen Namen gibt, was zu einem Mangel an Identität führt. Stattdessen wird es mit Worten wie "elend", "Monster", "Kreatur", "Dämon", "Teufel", "Unhold" und "es" bezeichnet. Wenn Frankenstein mit der Kreatur in Kapitel 10 spricht, spricht er sie als "abscheuliches Insekt", "abscheuliches Monster", "Unhold", "elender Teufel" und "abscheulicher Teufel" an.
Herausforderung:
Bei zwei Ganzzahlen (Jahr und Kapitel) wird eine Zeichenfolge ausgegeben, die auf den folgenden Regeln basiert:
- Wenn das Jahr kürzer als 1818 ist: Geben Sie eine leere Zeichenfolge aus †
- Wenn das Jahr genau 1818 ist und das Kapitel unter 10 liegt, geben Sie eine zufällige Zeichenfolge aus der Liste aus
["wretch", "monster", "creature", "demon", "devil", "fiend", "it"]
- Wenn das Jahr genau 1818 und das Kapitel 10 oder höher ist, geben Sie eine zufällige Zeichenfolge aus der Liste aus
["vile insect", "abhorred monster", "fiend", "wretched devil", "abhorred devil"]
- Ist das Jahr über 1818 (und somit wurde das Buch veröffentlicht), kehren Sie zurück
"Frankenstein's Monster"
.
Herausforderungsregeln:
- Sie können wählen, ob die Ausgabe in Kleinbuchstaben, in Großbuchstaben oder in einer Kombination erfolgen soll.
- Das Jahr wird immer im Bereich liegen
1500-2017
- Das Kapitel wird immer im Bereich sein
1-24
(wenn ich richtig gegoogelt habe, hat das Buch 24 Kapitel) - † Statt eine leere Zeichenfolge für die Option 1 der Ausgabe, sind Sie auch zur Ausgabe erlaubt
null
,undefined
,false
,0
, oder jeder andere Wert Ihrer Wahl nicht Teil der drei anderen Optionen (bitte angeben , was Sie in Ihrer Antwort verwendet haben). - Die Ausgabe darf weder führende oder nachfolgende Leerzeichen / Tabulatoren noch führende Zeilenumbrüche enthalten. Es kann eine optionale nachgestellte neue Zeile enthalten.
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methode mit den richtigen Parametern und vollständige Programme verwenden. Ihr Anruf.
- Standard-Regelungslücken sind verboten (insbesondere 'Falsche Zufallszahlen' ).
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie ggf. auch eine Erklärung hinzu.
Testfälle:
year,chapter possible outputs:
1700,1 ""; null; undefined; false; 0; etc.
1700,12 ""; null; undefined; false; 0; etc.
1817,10 ""; null; undefined; false; 0; etc.
1818,1 "wretch"; "monster"; "creature"; "demon"; "devil"; "fiend"; "it"
1818,9 "wretch"; "monster"; "creature"; "demon"; "devil"; "fiend"; "it"
1818,10 "vile insect"; "abhorred monster"; "fiend"; "wretched devil"; "abhorred devil"
1818,11 "vile insect"; "abhorred monster"; "fiend"; "wretched devil"; "abhorred devil"
1818,18 "vile insect"; "abhorred monster"; "fiend"; "wretched devil"; "abhorred devil"
1819,1 "Frankenstein's Monster"; "frankenstein's monster"; "FRANKENSTEIN'S MONSTER"
1819,18 "Frankenstein's Monster"; "frankenstein's monster"; "FRANKENSTEIN'S MONSTER"
2017,24 "Frankenstein's Monster"; "frankenstein's monster"; "FRANKENSTEIN'S MONSTER"
<...>
erinnern.Python 2 ,
227220214 BytesProbieren Sie es online!
quelle
'abhorred '
in die Liste unten eintragen, da sie zweimal verwendet wurde. ('wretch'
ist auch möglich, aber die Anzahl der Bytes bleibt gleich.)Perl 5 , 172 Bytes
171 Byte Code + 1 für
-p
.Probieren Sie es online!
Erläuterung
Ziemlich normal ist es, den 'Spaceship Operator' (
<=>
)1818
zu verwenden-1
, um den letzten, ersten oder zweiten Index der Quelldaten zurückzugeben ,0
oder1
, wenn die Eingabe$_
kleiner, gleich oder größer ist1818
. Auch ich mag den Fischoperator !quelle
$F=fiend
, aber nach dem Testen endet es mit der gleichen Länge, um dies zu tun.$
alt sein :($}
Was für ein Variablenname ...$W
gebraucht,${W}
da es neben einem anderen Brief steht.C # (Visual C # Compiler) ,
225209 BytesProbieren Sie es online!
-16 danke an Kevin Cruijssen
Nicht besonders präzise, aber ich würde erwarten, dass C # mehr Platz benötigt, um wiederholte Zeichenfolgen zu deklarieren und zu verwenden, als nur zu wiederholen. Der mitgelieferte Testrunner hat eine
Thread.Sleep(1)
interne Aufzählung der Testfälle, da Default Seeding fürRandom()
die aktuelle Zeit verwendet wird und die eigentliche Funktion schnell genug ausgeführt wird, um bei nachfolgenden Läufen ohne Verzögerung denselben Startwert zu erhalten.Aufrufe an die Funk verwenden die Currying-Syntax
f(year)(chapter)
(oder den Namen, in dem die Funktion anstelle von f gespeichert ist).quelle
fiend
in die Mitte eines einzelnen String-Arrays gestellt habe, da sie in beiden Listen vorhanden ist. Sie können einige Bytes sparen, indem Sienew[]{"wretch","monster","creature","demon","devil","it","fiend","vile insect","abhorred monster","wretched devil","abhorred devil"}
durch"wretch,monster,creature,demon,devil,it,fiend,vile insect,abhorred monster,wretched devil,abhorred devil".Split(',')
(-16 Bytes) ersetzen","
in,
macht das im.Split(',')
Vergleich zunew[]{}
mehr als ein paar Elementen länger wett .Bash,
229,206,197, 179 Bytesdie Erklärung zu geschweiften / variablen Erweiterungen
wird zuerst erweitert um
dann wird die Variable m erweitert
Das Folgende funktioniert jedoch nicht, da
$w
es zuerst mit verknüpfted
undwed
nicht definiert wird und zu einer leeren Zeichenfolge erweitert wird.Es kann getan werden, explizite Klammern um w hinzuzufügen, wird aber länger sein
TIO
quelle
wretch
undmonster
( 225 Bytes ) erstellen .APL (Dyalog Unicode) , 189 Byte
Probieren Sie es online!
Zum Testen hängen Sie den Testfall einfach wie folgt an die letzte geschweifte Klammer an:
Ein großes Dankeschön an @ngn für die Unterstützung bei der Lösung der führenden Whitespace-Probleme.
Wie es funktioniert:
Es ist erwähnenswert, dass APL Zeichenfolgen als Arrays ( Vektoren ) von Zeichen
'wretch' 'creature'
interpretiert und in anderen Sprachen als interpretiert[[w,r,e,t,c,h],[c,r,e,a,t,u,r,e]]
Dies sind Hilfsfunktionen:
Dies ist die Hauptfunktion, die zum besseren Verständnis in drei Teile unterteilt wird:
Teil 1:
Teil 2:
Teil 3:
quelle
Java (OpenJDK 8) ,
275269255207203 BytesProbieren Sie es online!
quelle
Object
anstatt direkt zu drucken:y->c->y<1818?0:y>1818?"Frankenstein's monster":"wretch,monster,creature,demon,devil,fiend,it,vile insect,abhorred monster,fiend,wretched devil,abhorred devil".split(",")[(int)(Math.random()*(c<9?7:5))+(c<9?0:7)]
fiend
(was in beiden Listen vorhanden ist) in die Mitte setzen:y->c->y<1818?0:y>1818?"Frankenstein's monster":"wretch;monster;creature;demon;devil;it;fiend;vile insect;abhorred monster;wretched devil;abhorred devil".split(";")[(int)(Math.random()*(c<10?7:5))+(c<10?0:6)]
( 207 Bytes )IntFunction
s anstatt esFunction<Integer>
zum Laufen zu bringen.PHP,
184176 BytesFühren Sie mit
-n
und geben Sie Jahr und Kapitel als Befehlszeilenargumente an oder probieren Sie es online aus .Index und damit Ergebnis
NULL
für Jahr <1818 auswerten , was zu leerer Ausgabe führt.quelle
$argv[1]<=>1818
das? Das habe ich noch nie gesehen.Javascript (ES6), 205 Byte
Gibt zurück,
0
wenn das Jahr kürzer als 1818 istCode-Snippet anzeigen
quelle
Javascript 199 Bytes
quelle
C 380 Byte
quelle
"Frankenstein's Monster"
direkt verwenden, anstatt eine Variable dafür zu erstellen. Auch wo ist dasyear
undchapter
kommt es von jetzt? Ich sehe es nicht als Parameter der Methode. Tipps zum Golfen in <allen Sprachen> und Tipps zum Golfen in C können hilfreich sein. Genieße deinen Aufenthalt! :)void o(int y,int c){char*b[]={"wretch","monster","creature","demon","devil","fiend","it"},*a[]={"vile insect","abhorred monster","fiend","wretched devil","abhorred devil"};printf("%s",y<1818?0:y==1818?c>9?a[rand()%6]:b[rand()%7]:"Frankenstein's Monster");}
256 Bytes Probieren Sie es hier aus! (Ich habe alle unnötigen Leerzeichen entfernt, Methode / Variablen / Parameter in Einzelbuchstaben umbenannt; einige unnötige Klammern bei ternary-if entfernt; singleprintf
; geändert<10
zu>9
; usw.) Ich bin mir nicht sicher, warum ichrand()
nicht in TIO arbeite.: SMBASIC , 288 Bytes
quelle
05AB1E ,
114110 BytesWird ausgegeben,
0
wenn das Jahr darunter liegt1818
.Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
Sehen Sie sich meinen Tipp 05AB1E an (Abschnitte Verwendung des Wörterbuchs ; Komprimieren von Zeichenfolgen, die nicht Teil des Wörterbuchs sind ; Komprimieren großer Ganzzahlen ; und Komprimieren von Ganzzahllisten ), um zu verstehen, warum:
…뢼–±¹
ist"creature devil monster"
;.•ʒ¦Ë"ìËM₂G¶тá≠•
ist"demon fiend it wretch "
;.•1ÏiT¥Ƶʒ“T¡Äg… 5ÀΘO¼™Ãí?ιË%4₄‡‡λYιi¾н•
ist"abhorred devilabhorred monsterfiendvile insectwretched devil"
;•Jtm•
ist1249548
und•Jtm•17в
ist[14,16,5,11,14]
;'ì³
ist"liechtenstein "
;’¡¬ÿÿ±¹’
ist"frankÿÿmonster"
;Ž7X
ist1818
.quelle
JavaScript, 194 B
quelle