Configure o totem tribal para o clima solicitado

11

Existe uma vila Sioux. Possui um totem:

             __
         ___|  |___
   \/    \        /    \/
   /\     ``|  |``     /\
  /^^\      |  |      /^^\
 / /\ \     |  |     / /\ \
''''''''''''''''''''''''''''

O totem permite que os Sioux dominem o clima para ajudar em suas diferentes tarefas. Ajude os aldeões a decorar adequadamente o totem para invocar o clima adequado. O totem possui várias partes:

             __
         ___|AA|___
   \/    \BBBBBBBB/    \/
   /\     ``|CC|``     /\
  /^^\      |DD|      /^^\
 / /\ \  13 |EE| 42  / /\ \
''''''''''''''''''''''''''''
  • Aé para sol () ou nuvens ww
  • Bé para chuva """""""" ou neve ::::::::
  • Cé para tempestade zz
  • Dé para vento ~~
  • Eé para nevoeiro ==

Mas isso não é tudo. O totem precisa de dançarinos do tempo. Quanto mais elementos forem chamados, maior será o número de dançarinos necessários. Se houver um elemento invocado, é necessário um dançarino. Dois elementos, dois dançarinos. Além de quatro elementos, sempre haverá no máximo quatro dançarinos. Se nenhum elemento for chamado, não serão necessários dançarinos. O totem precisa descansar.

Os dançarinos do clima devem aparecer na ordem 1234. Por exemplo, se houver dois dançarinos, os slots 1e 2devem ser ocupados. Além disso, cada dançarino apresenta uma figura diferente:

  • 1 é T
  • 2 é Y
  • 3 é K
  • 4 é X

Agora, os moradores expressarão seus desejos climáticos. Eles pronunciarão uma frase contendo o (s) elemento (s) climático (s) que gostariam de ter. Configure o totem e os dançarinos para realizar seus desejos.

Desafio

Escreva um programa que use uma string como entrada, combine os elementos da sentença ( sol , chuva ,…) e transmita a vila inteira com o totem definido corretamente e seus dançarinos. Seu programa não precisa verificar a exatidão da sequência de entrada (por exemplo, não conterá sol e nuvens ). Ele deve corresponder às palavras (no sentido literal):

  • A sequência de entrada X says: "I like the wind, it blows the worries away"corresponde ao vento , porque a vírgula não faz parte da palavra
  • A sequência de entrada Y says: "I hope the weather won't get too windy"não corresponde ao vento , porque vento e vento são duas palavras diferentes

As palavras a serem correspondidas são garantidas na parte entre aspas da sequência de entrada (a primeira parte que designa quem está falando nunca conterá uma palavra que possa corresponder).

Exemplos

The squaw says: "I want sun and wind for drying the clothes"
             __
         ___|()|___
   \/    \        /    \/
   /\     ``|  |``     /\
  /^^\      |~~|      /^^\
 / /\ \  T  |  |  Y  / /\ \
''''''''''''''''''''''''''''

The warrior thinks: "A good thunderstorm will afraid the invaders. Or a snow storm. Or an impenetrable fog. Or an oppressive sun."
             __
         ___|()|___
   \/    \::::::::/    \/
   /\     ``|zz|``     /\
  /^^\      |  |      /^^\
 / /\ \  TK |==| XY  / /\ \
''''''''''''''''''''''''''''

The papoose shouts: "I WANNA GO OUTSIDE PLAY UNDER THE SUN!"
             __
         ___|()|___
   \/    \        /    \/
   /\     ``|  |``     /\
  /^^\      |  |      /^^\
 / /\ \  T  |  |     / /\ \
''''''''''''''''''''''''''''

The wise grandma whispers: "The totem is an illusion"
             __
         ___|  |___
   \/    \        /    \/
   /\     ``|  |``     /\
  /^^\      |  |      /^^\
 / /\ \     |  |     / /\ \
''''''''''''''''''''''''''''

The shaman confides: "I perform my magic hidden in the fog, under the rain or at least under heavy clouds"
             __
         ___|ww|___
   \/    \""""""""/    \/
   /\     ``|  |``     /\
  /^^\      |  |      /^^\
 / /\ \  TK |==|  Y  / /\ \
''''''''''''''''''''''''''''

The village chief claims: "The meat of bison is better preserved in the snow, or dried under a burning sun. My Pa' used to say that heavy wind and a thunderstorm could help too, but I have no clue how. And despite everyone contradicting me, I am persuaded a good fog will do as well"
             __
         ___|()|___
   \/    \::::::::/    \/
   /\     ``|zz|``     /\
  /^^\      |~~|      /^^\
 / /\ \  TK |==| XY  / /\ \
''''''''''''''''''''''''''''

Isso é então a resposta mais curta em bytes vence. As explicações são incentivadas.

Jim
fonte
Podemos assumir que não obteremos os dois sune clouds, ou ambos raine snow?
HyperNeutrino
@HyperNeutrino Isso já está especificado no desafio.
21717 Jim
Ah Já fiz isso muitas vezes (faltando partes do desafio). Desculpe: P
HyperNeutrino
lol +1 para The papoose shouts: "I WANNA GO OUTSIDE PLAY UNDER THE SUN!". Além disso, este desafio foi muito menos doloroso e muito mais divertido do que eu pensava que seria tão graças para o desafio: P :)
HyperNeutrino
Sinto falta de desafios como este. Não é muito difícil, não muito FGITW, não muito golfe línguas e realmente exige que você código, em vez de encontrar uma pequena 4-Byter
Uriel

Respostas:

2

Python, 527 524 508 504 481 474 462 461 bytes

from re import*
a=r"""!!! __
!! ___|AA|___
   \/!\BBBBBBBB/!\/
   /\! ``|CC|``! /\
  /^^\!  |DD|!  /^^\
 / /\ \  02 |EE| 31  / /\ \
""";s={'sun':'A2()','clouds':'A2w','rain':'B2"','snow':'B2:','thunderstorm':'C2z','wind':'D2~','fog':'E2='};i=0
for y in[w for w in split('\W+',input().lower())if w in s]:i+=1;z=s[y];w=int(z[1]);a=sub(z[0]*w,(z[2:]*w)[:w],a)
for y in range(min(i,4)):a=sub(str(y),'TYKX'[y],a)
print(sub('!',' '*4,sub('[ABCDE0123]',' ',a))+"'"*28)

Experimente online!

Uriel
fonte
No meu último desafio, fiquei desapontado com o modo como todos usavam regex. Eu pensei que com este, eu não teria nenhum. Bem, estou meio surpreso…
Jim
@ Jim bem, eles definitivamente não são a parte principal da função
Uriel
Publiquei outra solução Python que usa um algoritmo bastante diferente; se você acha que seria melhor usá-lo como um golfe seu, excluirei o meu como Muito Similar ao seu.
HyperNeutrino
@HyperNeutrino Eu estava apenas jogando golfe e acho que acertei algumas das coisas que você usou entre as duas. Eu geralmente não me importo de outras soluções da mesma lang quanto o meu, embora eu geralmente preferem não publicar estes
Uriel
485 bytes
HyperNeutrino
2

Python 3 , 473 464 460 bytes

import re
x=re.split('\W+',input().lower())
L='sun clouds rain snow thunderstorm wind fog'.split()
q=sum(map(x.count,L))
print(r'''!    __
!___|#|___
" \/"  \$/" \/
" /\"   ``|%%|``"  /\
  /^^\""  |&&|"" /^^\
 / /\ \  13 |''| 42 / /\ \
'''.translate({33:' '*9,34:' '*2,35:' (w )w'[(L[0]in x)+2*(L[1]in x)::3],36:' ":'[(L[2]in x)+2*(L[3]in x)]*8,37:' z'[L[4]in x],38:' ~'[L[5]in x],39:' ='[L[6]in x],49:' T'[q>0],50:' Y'[q>1],51:' K'[q>2],52:' X'[q>3]})+"'"*28)

Experimente online!

-9 bytes
-4 bytes graças a ovs

HyperNeutrino
fonte
Não vejo por que você precisaria s. Basta mesclar suas duas últimas linhas print(r...28)para 460 bytes.
ovs 19/07/19
@ovs whoops esqueci disso. Obrigado!
21417 HyperNeutrino #
1

JavaScript (ES6), 417 bytes

(s,i=x=>s.toLowerCase()[q](/\W+/).includes(x[0]),g=x=>y=>i(x)?y[0]:(j--,"  "),j=4,t="||   \\/|   /\\|  /^^\\| / /\\ \\"[q="split"]`|`.map(x=>x[p="padEnd"](9)))=>`    __    n___|${i`sun`?"()":g`clouds``ww`}|___n${"\\"[p](9,i`rain`?'"':g`snow``:`)}/n \`\`|${g`thunderstorm``zz`}|\`\` n   |${g`wind``~~`}|   n02 |${g`fog``==`}| 31`.replace(/\d/g,m=>m>j?" ":"TYKX"[m])[q]`n`.map((v,k)=>t[k]+v+t[k]).join`
`+`
`[p](28,"'")

A idéia aqui era gerar o totem primeiro e depois adicionar os tikis espelhados nos dois lados.

Inclui duas funções auxiliares:, ique verifica se uma string é uma das palavras na entrada; e g, que executa ie retorna a sequência ou " ". gtambém conta quantos elementos estão faltando para serem usados ​​pelos dançarinos na parte inferior.

Snippet de teste

let f=
(s,i=x=>s.toLowerCase()[q](/\W+/).includes(x[0]),g=x=>y=>i(x)?y[0]:(j--,"  "),j=4,t="||   \\/|   /\\|  /^^\\| / /\\ \\"[q="split"]`|`.map(x=>x[p="padEnd"](9)))=>`    __    n___|${i`sun`?"()":g`clouds``ww`}|___n${"\\"[p](9,i`rain`?'"':g`snow``:`)}/n \`\`|${g`thunderstorm``zz`}|\`\` n   |${g`wind``~~`}|   n02 |${g`fog``==`}| 31`.replace(/\d/g,m=>m>j?" ":"TYKX"[m])[q]`n`.map((v,k)=>t[k]+v+t[k]).join`
`+`
`[p](28,"'")

let tests = [`The squaw says: "I want sun and wind for drying the clothes"`,`The warrior thinks: "A good thunderstorm will afraid the invaders. Or a snow storm. Or an impenetrable fog. Or an oppressive sun."`,`The papoose shouts: "I WANNA GO OUTSIDE PLAY UNDER THE SUN!"`,`The wise grandma whispers: "The totem is an illusion"`,`The shaman confides: "I perform my magic hidden in the fog, under the rain or at least under heavy clouds"`,`The village chief claims: "The meat of bison is better preserved in the snow, or dried under a burning sun. My Pa' used to say that heavy wind and a thunderstorm could help too, but I have no clue how. And despite everyone contradicting me, I am persuaded a good fog will do as well"`];I.innerHTML+=tests.map(t=>"<option>"+t).join``
<select id=I oninput="O.innerHTML=(idx=I.selectedIndex)?(t=tests[idx-1])+'\n\n'+f(t):''" style="width:90vw"><option>---Tests---</select>
<pre id=O></pre>

Justin Mariner
fonte