Introdução:
Como é quase o Halloween, eu estava pensando em alguns desafios aleatórios com o tema do Halloween. Eventualmente, eu estava lendo a página da Wikipedia de Frankenstein e me deparei com o seguinte texto:
A criatura
Parte da rejeição de Frankenstein à sua criação é o fato de ele não dar um nome a ela, o que causa falta de identidade. Em vez disso, é referido por palavras como "desgraçado", "monstro", "criatura", "demônio", "diabo", "demônio" e "ele". Quando Frankenstein conversa com a criatura no capítulo 10, ele a aborda como "inseto vil", "monstro detestável", "demônio", "demônio miserável" e "demônio detestável".
Desafio:
Dados dois números inteiros (ano e capítulo), produza uma string com base nas seguintes regras:
- Se o ano for menor que 1818: envie uma string vazia †
- Se o ano for exatamente 1818 e o capítulo for inferior a 10: faça uma saída aleatória sequência da lista
["wretch", "monster", "creature", "demon", "devil", "fiend", "it"]
- Se o ano for exatamente 1818 e o capítulo for 10 ou superior: faça uma saída aleatória sequência da lista
["vile insect", "abhorred monster", "fiend", "wretched devil", "abhorred devil"]
- É o ano acima de 1818 (e, portanto, o livro foi publicado), retorno
"Frankenstein's Monster"
.
Regras do desafio:
- Você pode optar por imprimir em minúsculas, maiúsculas ou uma combinação.
- O ano estará sempre na faixa
1500-2017
- O capítulo sempre estará no intervalo
1-24
(se eu pesquisar no Google corretamente, o livro terá 24 capítulos) - † Em vez de produzir uma cadeia vazia para a opção 1, você também estão autorizados a saída
null
,undefined
,false
,0
, ou qualquer outro valor de sua escolha não faz parte das outras três opções (especificar o que você usou em sua resposta). - A saída não pode conter espaços / guias à esquerda ou à direita, nem nenhuma nova linha à esquerda. Pode conter uma nova linha opcional à direita.
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados, programas completos. Sua chamada.
- As brechas padrão são proibidas (especialmente 'Números aleatórios falsos' ).
- Se possível, adicione um link com um teste para o seu código.
- Além disso, adicione uma explicação, se necessário.
Casos de teste:
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"
<...>
assume globs?Python 2 ,
227220214 bytesExperimente online!
fonte
'abhorred '
a lista na parte inferior também, pois ela foi usada duas vezes. ('wretch'
Também é possível, mas estadias byte-count o mesmo.)Perl 5 , 172 bytes
Código de 171 bytes + 1 para
-p
.Experimente online!
Explicação
Bastante padrão, apenas uma coisa pouco comum é usar o 'operador de nave espacial' (
<=>
) com1818
para retornar-1
,0
ou1
, se a entrada$_
for menor que, igual a ou maior que1818
para retornar o último, primeiro ou segundo índice dos dados de origem . Além disso, eu gosto do operador de peixe !fonte
$F=fiend
, mas depois de testar, acaba sendo do mesmo tamanho.$
sigilo :($}
o que é um nome de variável ...$W
eu teria que usar${W}
, pois é ao lado de outra carta.C # (Compilador Visual C #) ,
225209 bytesExperimente online!
-16 agradecimentos a Kevin Cruijssen
Não é particularmente conciso, mas eu esperaria que o C # ocupasse mais espaço para declarar e usar quaisquer strings repetidas da maneira que a resposta do Python faz do que apenas repeti-las. O executor de teste incluído possui uma
Thread.Sleep(1)
enumeração de casos de teste porque a propagação padrão paraRandom()
usa o tempo atual e a função real é executada com rapidez suficiente para terminar com a mesma semente nas execuções subseqüentes sem demora.As chamadas para a função usam a sintaxe de curry
f(year)(chapter)
(ou qualquer outro nome em que a função esteja armazenada em vez de f)fonte
fiend
no meio de uma única matriz de cadeias de caracteres, uma vez que está presente nas duas listas. Você pode salvar alguns bytes, substituindonew[]{"wretch","monster","creature","demon","devil","it","fiend","vile insect","abhorred monster","wretched devil","abhorred devil"}
com"wretch,monster,creature,demon,devil,it,fiend,vile insect,abhorred monster,wretched devil,abhorred devil".Split(',')
(-16 bytes)","
para apenas,
compensa o tempo mais longo.Split(',')
comparadonew[]{}
com mais do que alguns itens.Bash,
229,206,197, 179 bytesa explicação sobre expansões de chaves / variáveis
é primeiro expandido para
então a variável m é expandida
no entanto, o seguinte não funciona porque
$w
será o primeiro a ser associadoed
ewed
não está definido e será expandido para uma string vazia.isso pode ser feito adicionando chaves explícitas ao redor w, mas será mais longo
TIO
fonte
wretch
emonster
( 225 bytes ).APL (Dyalog Unicode) , 189 bytes
Experimente online!
Para testar, basta anexar o caso de teste ao último colchete da seguinte maneira:
Muito obrigado a @ngn por ajudar com a principal questão de espaço em branco.
Como funciona:
Vale a pena notar que o APL interpreta seqüências de caracteres como matrizes ( vetores ) de caracteres, portanto
'wretch' 'creature'
seria interpretado em outros idiomas como[[w,r,e,t,c,h],[c,r,e,a,t,u,r,e]]
Estas são funções auxiliares:
Esta é a função principal, que será dividida em 3 partes para melhor compreensão:
Parte 1:
Parte 2:
Parte 3:
fonte
Java (OpenJDK 8) ,
275269255207203 bytesExperimente online!
fonte
Object
vez de imprimir diretamente: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 em ambas as listas) no meio: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 em vez deFunction<Integer>
fazê-lo funcionar.PHP,
184176 bytesExecute
-n
e dê ano e capítulo como argumentos de linha de comando ou tente online .índice e, portanto, o resultado é avaliado para
NULL
para o ano <1818, levando à produção vazia.fonte
$argv[1]<=>1818
faz? Eu nunca vi isso.Javascript (ES6), 205 bytes
Retorna
0
se o ano for menor que 1818Mostrar snippet de código
fonte
Javascript 199 bytes
fonte
C, 380 BYTES
fonte
"Frankenstein's Monster"
diretamente em vez de fazer uma variável para ele. Além disso, de onde vemyear
echapter
agora? Não o vejo como parâmetros do método. Dicas para jogar golfe em <todos os idiomas> e Dicas para jogar golfe em C podem ser úteis. Aproveite sua estadia! :)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 Experimente aqui! (Removi todos os espaços desnecessários, renomeei o método / variáveis / parâmetros para uma única letra; removi alguns parênteses desnecessários no ternário-se; únicoprintf
; mudei<10
para>9
; etc.) Não sei por querand()
não está trabalhando no TIO ..: SMBASIC , 288 bytes
fonte
05AB1E ,
114110 bytesResultados
0
quando o ano está abaixo1818
.Experimente online ou verifique todos os casos de teste .
Explicação:
Veja esta minha dica do 05AB1E (seções Como usar o dicionário ?; Como compactar cadeias de caracteres que não fazem parte do dicionário ?; Como compactar números inteiros grandes ?; E Como compactar listas de números inteiros? ) Para entender por que:
…뢼–±¹
é"creature devil monster"
;.•ʒ¦Ë"ìËM₂G¶тá≠•
é"demon fiend it wretch "
;.•1ÏiT¥Ƶʒ“T¡Äg… 5ÀΘO¼™Ãí?ιË%4₄‡‡λYιi¾н•
é"abhorred devilabhorred monsterfiendvile insectwretched devil"
;•Jtm•
é1249548
e•Jtm•17в
é[14,16,5,11,14]
;'ì³
é"liechtenstein "
;’¡¬ÿÿ±¹’
é"frankÿÿmonster"
;Ž7X
é1818
.fonte
JavaScript, 194 bilhões
fonte