Introduction:
Comme c'est presque Halloween, je pensais juste à des défis aléatoires sur le thème d'Halloween. Finalement, je lisais la page wikipedia de Frankenstein et suis tombé sur le texte suivant:
La créature
Une partie du rejet de Frankenstein de sa création est le fait qu'il ne lui donne pas de nom, ce qui provoque un manque d'identité. Au lieu de cela, il est fait référence à des mots tels que "misérable", "monstre", "créature", "démon", "diable", "démon" et "il". Lorsque Frankenstein s'entretient avec la créature dans le chapitre 10, il l'appelle «insecte vil», «monstre abhorré», «démon», «diable misérable» et «diable abhorré».
Défi:
Étant donné deux nombres entiers (année et chapitre), sortez une chaîne basée sur les règles suivantes:
- Si l'année est inférieure à 1818: sortez une chaîne vide †
- Si l'année est exactement 1818 et que le chapitre est inférieur à 10: sortez une chaîne aléatoire de la liste
["wretch", "monster", "creature", "demon", "devil", "fiend", "it"]
- Si l'année est exactement 1818 et que le chapitre est supérieur ou égal à 10: sortez une chaîne aléatoire de la liste
["vile insect", "abhorred monster", "fiend", "wretched devil", "abhorred devil"]
- Est l'année au-dessus de 1818 (et donc le livre a été publié), retour
"Frankenstein's Monster"
.
Règles du défi:
- Vous pouvez choisir de sortir en minuscules, en majuscules ou une combinaison.
- L'année sera toujours dans la fourchette
1500-2017
- Le chapitre sera toujours dans la plage
1-24
(si je googlé correctement, le livre a 24 chapitres) - † Au lieu de produire une chaîne vide pour l' option 1, vous êtes également autorisé à la sortie
null
,undefined
,false
,0
ou toute autre valeur de votre choix ne fait pas partie des trois autres options (s'il vous plaît préciser ce que vous avez utilisé dans votre réponse). - La sortie ne doit pas contenir d'espaces / tabulations de début ou de fin, ni de nouvelles lignes de début. Il peut contenir une nouvelle ligne de fin facultative.
Règles générales:
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues non-golfeur de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation. - Des règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés, des programmes complets. Ton appel.
- Les failles par défaut sont interdites (en particulier les «faux nombres aléatoires» ).
- Si possible, veuillez ajouter un lien avec un test pour votre code.
- Veuillez également ajouter une explication si nécessaire.
Cas de test:
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"
<...>
suppose des globes?Python 2 ,
227220214 octetsEssayez-le en ligne!
la source
'abhorred '
dans la liste en bas, car il a été utilisé deux fois. ('wretch'
est également possible, mais le nombre d'octets reste le même.)Perl 5 , 172 octets
171 octets de code + 1 pour
-p
.Essayez-le en ligne!
Explication
Assez standard, seule une chose peu inhabituelle utilise `` l'opérateur du vaisseau spatial '' (
<=>
) avec1818
pour retourner-1
,0
ou1
, si l'entrée$_
est inférieure, égale ou supérieure à1818
pour renvoyer le dernier, le premier ou le deuxième index des données source . Aussi, j'aime l' opérateur de poisson !la source
$F=fiend
, mais après avoir testé, cela finit par être de la même longueur pour le faire.$
sceau :($}
quel nom de variable ...$W
j'aurais dû l'utiliser${W}
car il est à côté d'une autre lettre.C # (Visual C # Compiler) ,
225209 octetsEssayez-le en ligne!
-16 grâce à Kevin Cruijssen
Pas particulièrement concis, mais je m'attendrais à ce que C # prenne plus d'espace pour déclarer et utiliser des chaînes répétées comme le fait la réponse Python que de simplement les répéter. Le lanceur de test inclus contient une
Thread.Sleep(1)
énumération des cas de test car l'amorçage par défaut pourRandom()
utilise l'heure actuelle et la fonction réelle s'exécute assez rapidement pour se retrouver avec la même graine lors des exécutions suivantes sans délai.Les appels à la fonction utilisent la syntaxe de curry
f(year)(chapter)
(ou quel que soit le nom dans lequel la fonction est stockée au lieu de f)la source
fiend
au milieu d'un seul tableau de chaînes, car il est présent dans les deux listes. Vous pouvez économiser quelques octets en remplaçantnew[]{"wretch","monster","creature","demon","devil","it","fiend","vile insect","abhorred monster","wretched devil","abhorred devil"}
par"wretch,monster,creature,demon,devil,it,fiend,vile insect,abhorred monster,wretched devil,abhorred devil".Split(',')
(-16 octets)","
juste,
fait pour le plus par.Split(',')
rapport ànew[]{}
plus de quelques articles.Bash,
229,206,197, 179 octetsl'explication sur les extensions d'accolades / variables
est d'abord étendu à
alors la variable m est développée
cependant, ce qui suit ne fonctionne pas car
$w
sera d'abord joint àed
etwed
n'est pas défini et sera développé en chaîne vide.cela peut être fait en ajoutant des accolades explicites autour de w mais sera plus long
TIO
la source
wretch
etmonster
( 225 octets ).APL (Dyalog Unicode) , 189 octets
Essayez-le en ligne!
Pour tester, ajoutez simplement le cas de test à la dernière parenthèse bouclée comme suit:
Un grand merci à @ngn pour sa contribution au problème majeur des espaces blancs.
Comment ça fonctionne:
Il convient de noter que APL interprète les chaînes comme des tableaux ( vecteurs ) de caractères, donc
'wretch' 'creature'
serait interprété dans d'autres langues comme[[w,r,e,t,c,h],[c,r,e,a,t,u,r,e]]
Ce sont des fonctions d'assistance:
Il s'agit de la fonction principale, qui sera divisée en 3 parties pour une meilleure compréhension:
Partie 1:
Partie 2:
Partie 3:
la source
Java (OpenJDK 8) ,
275269255207203 octetsEssayez-le en ligne!
la source
Object
au lieu d'imprimer directement: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
(qui est présent dans les deux listes) au milieu: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 octets )IntFunction
s au lieu deFunction<Integer>
pour le faire fonctionner.PHP,
184176 octetsExécutez avec
-n
et donnez l'année et le chapitre comme arguments de ligne de commande ou essayez-les en ligne .l'indice et donc le résultat s'évaluent à
NULL
pour l'année <1818, conduisant à une sortie vide.la source
$argv[1]<=>1818
-il? Je n'ai jamais vu ça.Javascript (ES6), 205 octets
Renvoie
0
si l'année est inférieure à 1818Afficher l'extrait de code
la source
Javascript 199 octets
la source
C, 380 octets
la source
"Frankenstein's Monster"
directement au lieu de créer une variable pour celui-ci. Aussi, d'où vientyear
etchapter
vient maintenant? Je ne le vois pas comme des paramètres de la méthode. Des conseils pour jouer au golf dans <toutes les langues> et des conseils pour jouer au golf en C pourraient être utiles. Profitez de votre séjour! :)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 octets Essayez-le ici! (J'ai supprimé tous les espaces inutiles, renommé méthode / variables / paramètres en lettre unique; supprimé certaines parenthèses inutiles au ternaire-si; uniqueprintf
; changé<10
en>9
; etc.) Je ne sais pas pourquoirand()
ne fonctionne pas dans TIO ..: SMBASIC , 288 octets
la source
05AB1E ,
114110 octetsSorties
0
lorsque l'année est inférieure1818
.Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
Voir cette astuce 05AB1E de mes (sections Comment utiliser le dictionnaire? ; Comment les chaînes Compresser ne font pas partie du dictionnaire? ; Comment compresser les grands entiers? Et Comment les listes entières Compresser? ) Pour comprendre pourquoi:
…뢼–±¹
est"creature devil monster"
;.•ʒ¦Ë"ìËM₂G¶тá≠•
est"demon fiend it wretch "
;.•1ÏiT¥Ƶʒ“T¡Äg… 5ÀΘO¼™Ãí?ιË%4₄‡‡λYιi¾н•
est"abhorred devilabhorred monsterfiendvile insectwretched devil"
;•Jtm•
est1249548
et•Jtm•17в
est[14,16,5,11,14]
;'ì³
est"liechtenstein "
;’¡¬ÿÿ±¹’
est"frankÿÿmonster"
;Ž7X
est1818
.la source
JavaScript, 194 B
la source