Introducción:
Como es casi Halloween, solo estaba pensando en algunos desafíos aleatorios con temas de Halloween. Finalmente, estaba leyendo la página de Wikipedia de Frankenstein y encontré el siguiente texto:
La criatura
Parte del rechazo de Frankenstein de su creación es el hecho de que no le da un nombre, lo que provoca una falta de identidad. En su lugar, se le conoce con palabras como "miserable", "monstruo", "criatura", "demonio", "demonio", "demonio" y "eso". Cuando Frankenstein conversa con la criatura en el Capítulo 10, la aborda como "insecto vil", "monstruo aborrecido", "demonio", "demonio miserable" y "demonio aborrecido".
Desafío:
Dados dos enteros (año y capítulo), genera una cadena basada en las siguientes reglas:
- Si el año es inferior a 1818: envíe una cadena vacía †
- Si el año es exactamente 1818 y el capítulo está por debajo de 10: genera una cadena aleatoria de la lista
["wretch", "monster", "creature", "demon", "devil", "fiend", "it"]
- Si el año es exactamente 1818 y el capítulo es 10 o superior: genera una cadena aleatoria de la lista
["vile insect", "abhorred monster", "fiend", "wretched devil", "abhorred devil"]
- Es el año anterior a 1818 (y así se publicó el libro), regreso
"Frankenstein's Monster"
.
Reglas de desafío:
- Puede elegir si desea generar en minúsculas, mayúsculas o una combinación.
- El año siempre estará en el rango
1500-2017
- El capítulo siempre estará en el rango
1-24
(si busqué en Google correctamente, el libro tiene 24 capítulos) - † En lugar de dar salida a una cadena vacía para la opción 1, que también están autorizados para emitir
null
,undefined
,false
,0
, o cualquier otro valor de su elección no es parte de las otras tres opciones (especifique lo que usted ha utilizado en su respuesta). - La salida no puede contener espacios / pestañas iniciales o finales, ni líneas nuevas nuevas. Puede contener una nueva línea final opcional.
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de code-golf lo desanimen a publicar respuestas con lenguajes que no sean codegolf. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Se aplican reglas estándar para su respuesta, por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados, programas completos. Tu llamada.
- Las lagunas predeterminadas están prohibidas (especialmente 'Números aleatorios falsos' ).
- Si es posible, agregue un enlace con una prueba para su código.
- Además, agregue una explicación si es necesario.
Casos de prueba:
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"
<...>
asume globos.Python 2 ,
227220214 bytesPruébalo en línea!
fuente
'abhorred '
en la lista al final, ya que se ha usado dos veces. ('wretch'
también es posible, pero el recuento de bytes permanece igual.)Perl 5 , 172 bytes
Código de 171 bytes + 1 para
-p
.Pruébalo en línea!
Explicación
Bastante estándar, solo algo poco usual es usar el 'operador de nave espacial' (
<=>
) con1818
para devolver-1
,0
o1
, si la entrada$_
es menor, igual o mayor que1818
para devolver el último, primer o segundo índice de los datos de origen . Además, me gusta el operador de pescado !fuente
$F=fiend
, pero después de probarlo termina teniendo la misma longitud para hacerlo.$
sigilo :($}
qué nombre de variable ...$W
, habría necesitado usarlo${W}
ya que está al lado de otra letra.C # (compilador de Visual C #) ,
225209 bytesPruébalo en línea!
-16 gracias a Kevin Cruijssen
No es particularmente conciso, pero esperaría que C # ocupara más espacio para declarar y usar cualquier cadena repetida de la forma en que lo hace la respuesta de Python que simplemente repetirla. El corredor de prueba incluido tiene una
Thread.Sleep(1)
enumeración interna de casos de prueba porque la inicialización predeterminadaRandom()
utiliza la hora actual y la función real se ejecuta lo suficientemente rápido como para terminar con la misma semilla en ejecuciones posteriores sin demora.Las llamadas al func usan la sintaxis de curry
f(year)(chapter)
(o cualquier nombre en el que esté almacenada la función en lugar de f)fuente
fiend
en el medio de un único conjunto de cadenas, ya que está presente en ambas listas. Puede guardar algunos bytes reemplazándolosnew[]{"wretch","monster","creature","demon","devil","it","fiend","vile insect","abhorred monster","wretched devil","abhorred devil"}
con"wretch,monster,creature,demon,devil,it,fiend,vile insect,abhorred monster,wretched devil,abhorred devil".Split(',')
(-16 bytes)","
a solo,
compensa por más tiempo en.Split(',')
comparaciónnew[]{}
con más de unos pocos elementos.Bash,
229,206,197, 179 bytesla explicación sobre las llaves / expansiones variables
primero se expande a
entonces la variable m se expande
sin embargo, el siguiente no funciona porque se
$w
unirá por primera vezed
ywed
no está definido y se expandirá a una cadena vacía.se puede hacer agregando llaves explícitas alrededor de w pero será más largo
TIO
fuente
wretch
ymonster
( 225 bytes ).APL (Dyalog Unicode) , 189 bytes
Pruébalo en línea!
Para probar, simplemente agregue el caso de prueba al último corchete así:
Muchas gracias a @ngn por ayudarnos con el problema principal de espacios en blanco.
Cómo funciona:
Vale la pena señalar que APL interpreta las cadenas como matrices ( vectores ) de caracteres, por
'wretch' 'creature'
lo que se interpretaría en otros idiomas como[[w,r,e,t,c,h],[c,r,e,a,t,u,r,e]]
Estas son funciones auxiliares:
Esta es la función principal, que se dividirá en 3 partes para una mejor comprensión:
Parte 1:
Parte 2:
Parte 3:
fuente
Java (OpenJDK 8) ,
275269255207203 bytesPruébalo en línea!
fuente
Object
lugar de imprimir directamente: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
(que está presente en ambas listas) en el medio: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 en lugar deFunction<Integer>
hacerlo funcionar.PHP,
184176 bytesEjecutar con
-n
y dar año y capítulo como argumentos de línea de comando o probarlo en línea .índice y, por lo tanto, resultado evaluado
NULL
para el año <1818, lo que lleva a una producción vacía.fuente
$argv[1]<=>1818
hacer? Nunca he visto eso.Javascript (ES6), 205 bytes
Devuelve
0
si el año es menor a 1818Mostrar fragmento de código
fuente
Javascript 199 bytes
fuente
C, 380 BYTES
fuente
"Frankenstein's Monster"
directamente en lugar de crear una variable para ello. Además, ¿de dónde esyear
y de dóndechapter
viene ahora? No lo veo como parámetros del método. Las sugerencias para jugar golf en <todos los idiomas> y las sugerencias para jugar golf en C pueden ser útiles. ¡Disfruta tu estancia! :)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. ¡ Pruébalo aquí! (Eliminé todos los espacios innecesarios,printf
cambié el nombre del método / variables / parámetros a una sola letra; eliminé algunos paréntesis innecesarios en el ternario si; único ; cambió<10
a>9
; etc.) No estoy seguro de por quérand()
no funciona en TIO ..: SMBASIC , 288 bytes
fuente
05AB1E ,
114110 bytesSalidas
0
cuando el año está por debajo1818
.Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
Ver este consejo 05AB1E mío (secciones cómo utilizar el diccionario? ; ¿Cómo comprimir cadenas no forma parte del diccionario? ; Cómo comprimir grandes números enteros? ; Y Cómo comprimir listas de números enteros? ) Para entender por qué:
…뢼–±¹
es"creature devil monster"
;.•ʒ¦Ë"ìËM₂G¶тá≠•
es"demon fiend it wretch "
;.•1ÏiT¥Ƶʒ“T¡Äg… 5ÀΘO¼™Ãí?ιË%4₄‡‡λYιi¾н•
es"abhorred devilabhorred monsterfiendvile insectwretched devil"
;•Jtm•
es1249548
y•Jtm•17в
es[14,16,5,11,14]
;'ì³
es"liechtenstein "
;’¡¬ÿÿ±¹’
es"frankÿÿmonster"
;Ž7X
es1818
.fuente
JavaScript, 194 B
fuente