Налаштуйте племінний тотем на запитувану погоду


11

Є село Сіу. Він має тотем:

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

Тотем дозволяє сиуксу опановувати погоду за допомогу в їх різних завданнях. Допоможіть жителям села правильно прикрасити тотем, щоб викликати належну погоду. Тотем має кілька частин:

             __
         ___|AA|___
   \/    \BBBBBBBB/    \/
   /\     ``|CC|``     /\
  /^^\      |DD|      /^^\
 / /\ \  13 |EE| 42  / /\ \
''''''''''''''''''''''''''''
  • A- для сонця () чи хмар ww
  • Bдля дощу """""""" чи снігу ::::::::
  • Cє для грози zz
  • Dє для вітру ~~
  • Eдля туману ==

Але це ще не все. Тотему потрібні танцівники погоди. Чим більше елементів викликано, тим більша кількість потрібних танцюристів. Якщо один елемент викликається, танцюрист потрібен. Два елементи, два танцюристи. Поза чотирма елементами завжди знайдеться не більше чотирьох танцюристів. Якщо немає елемента, на який викликається, танцюристів не потрібно. Тотему потрібно відпочивати.

Танцюристи повинні з’являтися в порядку 1234. Наприклад , якщо є два танцюриста, слоти 1і 2повинні бути зайняті. Причому кожен танцюрист виконує різну фігуру:

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

Тепер жителі села висловлять свої погодні побажання. Вони вимовляють речення, яке містить елемент (и) погоди, який вони хотіли б мати. Налаштуйте тотем і танцюристів для виконання своїх побажань.

Виклик

Напишіть програму, яка приймає рядок як вхід, відповідає елементам речення ( сонце , дощ ,…) і виводить повне село з правильно встановленим тотемом та його танцюристами. Ваша програма не повинна перевіряти правильність рядка введення (наприклад , він не буде містити як сонце і хмари ). Він повинен відповідати словам (у прямому сенсі):

  • Рядок введення X says: "I like the wind, it blows the worries away"відповідає вітру , оскільки кома не є частиною слова
  • Вхідний рядок Y says: "I hope the weather won't get too windy"не відповідає вітру , тому що вітер і вітер - це два різні слова

Гарантоване слово (слова) гарантується в цитованій частині вхідного рядка (перша частина, яка позначає того, хто говорить, ніколи не буде містити слово, яке могло б відповідати).

Приклади

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

Це тому найкоротша відповідь у виграші байтів. Пояснення заохочуються.


Чи можемо ми припустити, що ми не отримаємо і те, sunі те clouds, і те rainі інше snow?
HyperNeutrino

@HyperNeutrino Це вже вказано в виклику.
Джим

Ага. Я робив це багато разів (відсутні частини виклику). Вибачте: P
HyperNeutrino

lol +1 для The papoose shouts: "I WANNA GO OUTSIDE PLAY UNDER THE SUN!". Також цей виклик був набагато менш болісним і набагато веселішим, ніж я думав, це буде так, дякую за виклик: P :)
HyperNeutrino

Я сумую за такими викликами, як цей. Не надто важко, не надто FGITW, не надто гольф-мови і насправді вимагає, щоб ви кодували, а не знаходили маленький 4-байтний
Uriel

Відповіді:


2

Пітон, 527 524 508 504 481 474 462 461 байт

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)

Спробуйте в Інтернеті!


У своєму останньому виклику я був розчарований, як усі використовували регулярний вираз. Я думав, що з цим я б не мав жодного. Ну, я здивований…
Джим,

@Jim добре, вони точно не є головною частиною функції
Уріель

Я розмістив ще одне рішення Python, яке використовує досить інший алгоритм; якщо ви думаєте, що було б краще просто використовувати його як ваш гольф, я видаляю шахту як занадто схожу на вашу.
HyperNeutrino

@HyperNeutrino Я просто займався гольфом, і я думаю, що я потрапив на деякі речі, якими ти користувався. Я, як правило, не заперечую проти інших рішень того ж язика, що і мій, хоча зазвичай вважаю за краще не публікувати їх
Uriel


2

Python 3 , 473 464 460 байт

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)

Спробуйте в Інтернеті!

-9 байт
-4 байти завдяки ов


Я не бачу, навіщо вам це потрібно s. Просто об’єднайте свої останні два рядки до print(r...28)460 байт.
ов

@ovs whoops про це забув. Дякую!
HyperNeutrino

1

JavaScript (ES6), 417 байт

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

Ідея тут полягала в тому, щоб спершу генерувати тотемний полюс, а потім додати дзеркальні тикі з двох сторін.

Включає дві допоміжні функції:, iяка перевіряє, чи рядок є одним із слів у вводі; і g, що робить iі повертає заданий рядок або " ". gтакож підраховує, скільки елементів не вистачає для використання танцюристів внизу.

Тест-фрагмент

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>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.