Ustaw plemienny totem na żądaną pogodę

11

Jest wioska Sioux. Ma totem:

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

Totem pozwala Siouxom opanować pogodę, pomagając im w ich różnych zadaniach. Pomóż wieśniakom we właściwym dekorowaniu totemu za wywołanie odpowiedniej pogody. Totem składa się z kilku części:

             __
         ___|AA|___
   \/    \BBBBBBBB/    \/
   /\     ``|CC|``     /\
  /^^\      |DD|      /^^\
 / /\ \  13 |EE| 42  / /\ \
''''''''''''''''''''''''''''
  • Ajest na słońce () lub chmury ww
  • Bjest na deszcz """""""" lub śnieg ::::::::
  • Cjest na burzę zz
  • Djest na wiatr ~~
  • Ejest dla mgły ==

Ale to nie wszystko. Totem potrzebuje tancerzy pogodowych. Im więcej elementów jest wywoływanych, tym większa jest liczba wymaganych tancerzy. Jeśli wywoływany jest jeden element, potrzebny jest tancerz. Dwa elementy, dwóch tancerzy. Poza czterema żywiołami zawsze będzie maksymalnie czterech tancerzy. Jeśli nie zostanie przywołany żaden element, tancerze nie będą potrzebni. Totem musi odpocząć.

Tancerze pogodowi muszą pojawić się w kolejności 1234. Na przykład, jeśli są dwie tancerki, miejsca 1i 2muszą być zajęte. Ponadto każdy tancerz wykonuje inną figurę:

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

Teraz wieśniacy wyrażą swoje życzenia pogodowe. Wymówią zdanie zawierające elementy pogodowe, które chcieliby mieć. Przygotuj totem i tancerzy do spełnienia ich życzeń.

Wyzwanie

Napisz program, który pobiera ciąg znaków jako wejściowy, dopasowuje elementy w zdaniu ( słońce , deszcz ,…) i wyświetla całą wioskę z prawidłowo ustawionym totemem i jego tancerzami. Twój program nie musi sprawdzać poprawności ciągu wejściowego (np. Nie będzie zawierał zarówno słońca, jak i chmur ). Musi pasować do słów (w dosłownym znaczeniu):

  • Łańcuch wejściowy X says: "I like the wind, it blows the worries away"odpowiada wiatrowi , ponieważ przecinek nie jest częścią słowa
  • Łańcuch wejściowy Y says: "I hope the weather won't get too windy"nie pasuje do wiatru , ponieważ wiatr i wiatr to dwa różne słowa

Gwarantowane słowo (słowa), które się znajdują, znajduje się w cytowanym fragmencie ciągu wejściowego (pierwsza część określająca, kto mówi, nigdy nie będzie zawierała słowa, które można dopasować).

Przykłady

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

To jest więc wygrywa najkrótsza odpowiedź w bajtach. Wyjaśnienia są zachęcane.

Jim
źródło
Czy możemy założyć, że nie dostaniemy obu suni clouds, lub obu raini snow?
HyperNeutrino,
@HyperNeutrino Jest to już określone w wyzwaniu.
Jim
Ach Zrobiłem to wiele razy (brakuje części wyzwania). Przepraszamy: P
HyperNeutrino
lol +1 dla The papoose shouts: "I WANNA GO OUTSIDE PLAY UNDER THE SUN!". Również to wyzwanie było o wiele mniej bolesne i dużo fajniejsze, niż się spodziewałem, więc dzięki za wyzwanie: P :)
HyperNeutrino
Brakuje mi takich wyzwań. Niezbyt trudne, niezbyt FGITW, niezbyt golfowe języki i faktycznie wymaga kodowania, a nie znalezienia małego 4-bajtera
Uriel

Odpowiedzi:

2

Python, 527 524 508 504 481 474 462 461 bajtów

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)

Wypróbuj online!

Uriel
źródło
W ostatnim wyzwaniu byłem rozczarowany tym, jak wszyscy używali wyrażeń regularnych. Myślałem, że z tym jednym nie będę miał. Cóż, jestem trochę zaskoczony…
Jim
@Jim cóż, zdecydowanie nie są one główną częścią funkcji
Uriel
Opublikowałem kolejne rozwiązanie Python, które wykorzystuje całkiem inny algorytm; jeśli uważasz, że lepiej byłoby użyć go jako twojego golfa, usunę mój jako Zbyt podobny do twojego.
HyperNeutrino,
@HyperNeutrino Po prostu grałem w golfa i myślę, że trafiłem w niektóre rzeczy, których używałeś podczas gry. Zasadniczo nie mam nic przeciwko innym rozwiązaniom tego samego języka co moje, choć zwykle wolę ich nie publikować
Uriel
485 bajtów
HyperNeutrino
2

Python 3 , 473 464 460 bajtów

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)

Wypróbuj online!

-9 bajtów
-4 bajty dzięki ovs

HyperNeutrino
źródło
Nie rozumiem, dlaczego byś potrzebował s. Po prostu połącz ostatnie dwa wiersze z print(r...28)460 bajtami.
ovs
@ovs whoops zapomniał o tym. Dzięki!
HyperNeutrino,
1

JavaScript (ES6), 417 bajtów

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

Chodziło o to, aby najpierw wygenerować słup totemu, a następnie dodać lustrzane odbicie tikis po obu jego stronach.

Obejmuje dwie funkcje pomocnicze: isprawdzające, czy łańcuch jest jednym ze słów na wejściu; i g, który robi ii zwraca podany ciąg lub " ". gLiczy również, ile elementów brakuje do wykorzystania przez tancerzy na dole.

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
źródło