Richten Sie das Stammestotem für das gewünschte Wetter ein

11

Es gibt ein Sioux-Dorf. Es hat ein Totem:

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

Mit dem Totem können die Sioux das Wetter meistern, um bei ihren verschiedenen Aufgaben zu helfen. Helfen Sie den Dorfbewohnern, das Totem richtig zu dekorieren, um das angemessene Wetter hervorzurufen. Das Totem besteht aus mehreren Teilen:

             __
         ___|AA|___
   \/    \BBBBBBBB/    \/
   /\     ``|CC|``     /\
  /^^\      |DD|      /^^\
 / /\ \  13 |EE| 42  / /\ \
''''''''''''''''''''''''''''
  • Aist für Sonne () oder Wolken ww
  • Bist für Regen """""""" oder Schnee ::::::::
  • Cist für Gewitter zz
  • Dist für Wind ~~
  • Eist für Nebel ==

Aber das ist nicht alles. Das Totem braucht Wettertänzer. Je mehr Elemente aufgerufen werden, desto höher ist die Anzahl der erforderlichen Tänzer. Wenn ein Element aufgerufen wird, wird ein Tänzer benötigt. Zwei Elemente, zwei Tänzer. Über vier Elemente hinaus wird es immer höchstens vier Tänzer geben. Wenn kein Element aufgerufen wird, werden keine Tänzer benötigt. Das Totem muss sich ausruhen.

Die Wettertänzer müssen in der Reihenfolge erscheinen 1234. Zum Beispiel, wenn es zwei Tänzer gibt, müssen die Slots 1und 2besetzt sein. Darüber hinaus spielt jeder Tänzer eine andere Figur:

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

Jetzt werden die Dorfbewohner ihre Wetterwünsche äußern. Sie sprechen einen Satz aus, der die Wetterelemente enthält, die sie haben möchten. Richten Sie das Totem und die Tänzer ein, um ihre Wünsche zu erfüllen.

Herausforderung

Schreiben Sie ein Programm, das eine Zeichenfolge als Eingabe verwendet, mit den Elementen im Satz ( Sonne , Regen ,…) übereinstimmt und das gesamte Dorf mit dem richtig eingestellten Totem und seinen Tänzern ausgibt. Ihr Programm muss nicht die Richtigkeit der Eingabezeichenfolge überprüfen (z. B. enthält es nicht sowohl Sonne als auch Wolken ). Es muss mit Wörtern übereinstimmen (im wörtlichen Sinne):

  • Die Eingabezeichenfolge X says: "I like the wind, it blows the worries away"entspricht dem Wind , da das Komma nicht Teil des Wortes ist
  • Die Eingabezeichenfolge Y says: "I hope the weather won't get too windy"stimmt nicht mit Wind überein , da Wind und Wind zwei verschiedene Wörter sind

Die übereinstimmenden Wörter befinden sich garantiert im zitierten Teil der Eingabezeichenfolge (der erste Teil, der angibt, wer spricht, enthält niemals ein Wort, das übereinstimmen könnte).

Beispiele

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

Dies ist also gewinnt die kürzeste Antwort in Bytes. Erklärungen sind erwünscht.

Jim
quelle
Können wir davon ausgehen, dass wir nicht beide sunund cloudsoder beide rainund bekommen snow?
HyperNeutrino
@HyperNeutrino Dies ist bereits in der Herausforderung angegeben.
Jim
Ah. Ich habe das schon oft gemacht (fehlende Teile der Herausforderung). Entschuldigung: P
HyperNeutrino
lol +1 für The papoose shouts: "I WANNA GO OUTSIDE PLAY UNDER THE SUN!". Auch diese Herausforderung war viel weniger schmerzhaft und hat viel mehr Spaß gemacht, als ich gedacht hatte.
Vielen
Ich vermisse Herausforderungen wie diese. Nicht zu schwer, nicht zu FGITW, nicht zu Golfsprachen und erfordert tatsächlich, dass Sie codieren, anstatt einen kleinen 4-Byter zu finden
Uriel

Antworten:

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)

Probieren Sie es online aus!

Uriel
quelle
Bei meiner letzten Herausforderung war ich enttäuscht, wie alle Regex verwendeten. Ich dachte, dass ich mit diesem keinen haben würde. Nun, ich bin ein bisschen überrascht ...
Jim
@ Jim gut, sie sind definitiv nicht der Hauptteil der Funktion
Uriel
Ich habe eine andere Python-Lösung veröffentlicht, die einen ziemlich anderen Algorithmus verwendet. Wenn du denkst, es wäre besser, es nur als Golf von dir zu verwenden, werde ich meine als zu ähnlich wie deine löschen.
HyperNeutrino
@HyperNeutrino Ich habe gerade Golf gespielt und ich glaube, ich habe einige der Sachen getroffen, die du übrigens benutzt hast. Ich habe im Allgemeinen nichts gegen andere Lösungen, die genauso lang sind wie meine, obwohl ich es normalerweise vorziehe, diese nicht zu posten
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)

Probieren Sie es online aus!

-9 Bytes
-4 Bytes dank Ovs

HyperNeutrino
quelle
Ich verstehe nicht, warum Sie brauchen würden s. Führen Sie einfach Ihre letzten beiden Zeilen print(r...28)für 460 Bytes zusammen.
ovs
@ovs whoops hat das vergessen. Vielen Dank!
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,"'")

Die Idee hier war, zuerst den Totempfahl zu erzeugen und dann die gespiegelten Tikis auf beiden Seiten hinzuzufügen.

Enthält zwei Hilfsfunktionen : i, die prüfen, ob eine Zeichenfolge eines der Wörter in der Eingabe ist; und g, was idie angegebene Zeichenfolge oder zurückgibt " ". gzählt auch, wie viele Elemente fehlen, um für die Tänzer unten verwendet zu werden.

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>

Justin Mariner
quelle