Installa il totem tribale per il tempo richiesto


11

C'è un villaggio di Sioux. Ha un totem:

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

Il totem consente ai Sioux di padroneggiare il tempo per aiutare nelle loro diverse attività. Aiuta gli abitanti del villaggio a decorare correttamente il totem per invocare il tempo adeguato. Il totem ha diverse parti:

             __
         ___|AA|___
   \/    \BBBBBBBB/    \/
   /\     ``|CC|``     /\
  /^^\      |DD|      /^^\
 / /\ \  13 |EE| 42  / /\ \
''''''''''''''''''''''''''''
  • Aè per sole () o nuvole ww
  • Bè per pioggia """""""" o neve ::::::::
  • Cè per il temporale zz
  • Dè per il vento ~~
  • Eè per la nebbia ==

Ma non è tutto. Il totem ha bisogno di ballerini meteorologici. Più elementi vengono invocati, maggiore è il numero di ballerini richiesti. Se viene richiamato un elemento, è necessario un ballerino. Due elementi, due ballerini. Oltre quattro elementi, ci saranno sempre al massimo quattro ballerini. Se non viene richiamato alcun elemento, non sono necessari ballerini. Il totem deve riposare.

I ballerini del tempo devono apparire nell'ordine 1234. Ad esempio, se ci sono due ballerini, gli slot 1e 2devono essere occupati. Inoltre, ogni ballerino esegue una figura diversa:

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

Ora, gli abitanti del villaggio esprimeranno i loro desideri meteorologici. Pronunciano una frase contenente gli elementi meteorologici che vorrebbero avere. Installa il totem e i ballerini per soddisfare i loro desideri.

Sfida

Scrivi un programma che accetta una stringa come input, abbina gli elementi nella frase ( sole , pioggia , ...) e produce l'intero villaggio con il totem correttamente impostato e i suoi ballerini. Il tuo programma non deve verificare la correttezza della stringa di input (ad es. Non conterrà sole e nuvole ). Deve corrispondere alle parole (in senso letterale):

  • La stringa di input X says: "I like the wind, it blows the worries away"corrisponde a wind , poiché la virgola non fa parte della parola
  • La stringa di input Y says: "I hope the weather won't get too windy"non corrisponde a wind , perché windy e wind sono due parole diverse

Le parole da abbinare sono garantite nella parte citata della stringa di input (la prima parte che designa chi sta parlando non conterrà mai una parola che potrebbe essere abbinata).

Esempi

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  / /\ \
''''''''''''''''''''''''''''

Questo è quindi vince la risposta più breve in byte. Le spiegazioni sono incoraggiate.


Possiamo presumere che non otterremo entrambi sune clouds, o entrambi raine snow?
HyperNeutrino,

@HyperNeutrino Questo è già stato specificato nella sfida.
Jim,

Ah. L'ho fatto molte volte (parti mancanti della sfida).
Ci

lol +1 per The papoose shouts: "I WANNA GO OUTSIDE PLAY UNDER THE SUN!". Anche questa sfida è stata molto meno dolorosa e molto più divertente di quanto pensassi sarebbe stata così grazie per la sfida: P :)
HyperNeutrino,

Mi mancano sfide come questa. Non troppo difficile, non troppo FGITW, non troppo lingue da golf e in realtà richiede di programmare piuttosto che trovare un piccolo 4-byte
Uriel,

Risposte:


2

Python, 527 524 508 504 481 474 462 461 byte

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)

Provalo online!


Nella mia ultima sfida sono rimasto deluso dal modo in cui tutti hanno usato regex. Ho pensato che con questo non avrei avuto nessuno. Beh, sono un po 'sorpreso ...
Jim

@Jim bene, non sono sicuramente la parte principale della funzione
Uriel,

Ho pubblicato un'altra soluzione Python che utilizza un algoritmo abbastanza diverso; se pensi che sarebbe meglio usarlo solo come un tuo golf, eliminerò il mio come troppo simile al tuo.
HyperNeutrino,

@HyperNeutrino Stavo solo giocando a golf e penso di aver colpito alcune delle cose che hai usato tra l'altro. In genere non mi dispiace che le altre soluzioni siano le stesse della mia, anche se di solito preferisco non pubblicarle
Uriel,


2

Python 3 , 473 464 460 byte

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)

Provalo online!

-9 byte
-4 byte grazie agli ovs


Non vedo perché ne avresti bisogno s. Unisci le ultime due righe a print(r...28)per 460 byte.
Ovs

@ovs whoops se ne è dimenticato. Grazie!
HyperNeutrino,

1

JavaScript (ES6), 417 byte

(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,"'")

L'idea qui era di generare prima il totem, quindi aggiungere i tiki a specchio su entrambi i lati.

Include due funzioni di supporto: iche verifica se una stringa è una delle parole nell'input; e g, che fa ie restituisce la stringa data o " ". gconta anche quanti elementi mancano per essere usati per i ballerini in fondo.

Test snippet

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>

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.