Настройте племенной тотем на требуемую погоду


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

лол +1 за The papoose shouts: "I WANNA GO OUTSIDE PLAY UNDER THE SUN!". Кроме того, этот вызов был гораздо менее болезненным и гораздо более веселым, чем я думал, поэтому будет благодарен за этот вызов: P :)
HyperNeutrino

Я скучаю по таким вызовам. Не слишком сложно, не слишком FGITW, не слишком много языков для игры в гольф и фактически требует от вас кодирования, а не поиска маленького 4-х байтового символа
Уриэль

Ответы:


2

Python, 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)

Попробуйте онлайн!


В моем последнем испытании я был разочарован тем, как все использовали регулярные выражения. Я думал, что с этим у меня не будет ни одного. Ну, я немного удивлен ...
Джим

@ Джим, ну, они определенно не главная часть функции
Уриэль

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

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


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.