Siapkan totem suku untuk cuaca yang diminta

11

Ada sebuah desa Sioux. Ini memiliki totem:

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

Totem memungkinkan Sioux menguasai cuaca untuk membantu dalam tugas mereka yang berbeda. Bantu penduduk desa mendekorasi totem dengan benar karena memohon cuaca yang memadai. Totem memiliki beberapa bagian:

             __
         ___|AA|___
   \/    \BBBBBBBB/    \/
   /\     ``|CC|``     /\
  /^^\      |DD|      /^^\
 / /\ \  13 |EE| 42  / /\ \
''''''''''''''''''''''''''''
  • Auntuk matahari () atau awan ww
  • Buntuk hujan """""""" atau salju ::::::::
  • Cadalah untuk badai petir zz
  • Duntuk angin ~~
  • Eadalah untuk kabut ==

Tapi itu belum semuanya. Totem membutuhkan penari cuaca. Semakin banyak elemen yang dipanggil, semakin tinggi jumlah penari yang dibutuhkan. Jika ada satu elemen yang dipanggil, seorang penari diperlukan. Dua elemen, dua penari. Di luar empat elemen, akan selalu ada paling banyak empat penari. Jika tidak ada elemen yang dipanggil, tidak diperlukan penari. Totem perlu istirahat.

Penari cuaca harus muncul dalam urutan 1234. Misalnya jika ada dua penari, slot 1dan 2harus ditempati. Selain itu, setiap penari menampilkan tokoh yang berbeda:

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

Sekarang, penduduk desa akan mengungkapkan keinginan cuaca mereka. Mereka akan mengucapkan kalimat yang mengandung elemen cuaca yang ingin mereka miliki. Siapkan totem dan penari untuk memenuhi keinginan mereka.

Tantangan

Tulis sebuah program yang mengambil string sebagai input, mencocokkan elemen-elemen dalam kalimat ( matahari , hujan , ...), dan menampilkan desa lengkap dengan totem yang diatur dengan benar dan penari-penarinya. Program Anda tidak perlu memeriksa kebenaran string input (mis. String tidak akan mengandung matahari dan awan ). Itu harus cocok dengan kata-kata (dalam arti harfiah):

  • String input X says: "I like the wind, it blows the worries away"cocok dengan angin , karena koma bukan bagian dari kata
  • String input Y says: "I hope the weather won't get too windy"tidak cocok dengan angin , karena angin dan angin adalah dua kata yang berbeda

Kata yang cocok akan dijamin berada di bagian kutipan dari string input (bagian pertama yang menunjuk siapa yang berbicara tidak akan pernah mengandung kata yang bisa dicocokkan).

Contohnya

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

Ini adalah sehingga jawaban tersingkat dalam byte menang. Penjelasan didorong.

Jim
sumber
Bisakah kita berasumsi bahwa kita tidak akan mendapatkan keduanya sundan clouds, atau keduanya raindan snow?
HyperNeutrino
@HyperNeutrino Ini sudah ditentukan dalam tantangan.
Jim
Ah. Saya sudah melakukan itu berkali-kali (kehilangan bagian dari tantangan). Maaf: P
HyperNeutrino
lol +1 untuk The papoose shouts: "I WANNA GO OUTSIDE PLAY UNDER THE SUN!". Juga tantangan ini jauh lebih tidak menyakitkan dan jauh lebih menyenangkan daripada yang saya kira akan jadi terima kasih untuk tantangannya: P :)
HyperNeutrino
Saya rindu tantangan seperti ini. Tidak terlalu sulit, tidak terlalu FGITW, tidak terlalu banyak bahasa golf dan sebenarnya mengharuskan Anda untuk membuat kode alih-alih menemukan 4-byter kecil
Uriel

Jawaban:

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)

Cobalah online!

Uriel
sumber
Dalam tantangan terakhir saya, saya kecewa bagaimana semua orang menggunakan regex. Saya pikir dengan yang ini, saya tidak memilikinya. Yah, saya agak terkejut ...
Jim
@ Jim well, mereka jelas bukan bagian utama dari fungsi
Uriel
Saya memposting solusi Python lain yang menggunakan algoritma yang cukup berbeda; jika Anda berpikir akan lebih baik menggunakannya sebagai golf milik Anda, saya akan menghapus milik saya sebagai Mirip dengan milik Anda.
HyperNeutrino
@HyperNeutrino Saya hanya bermain golf dan saya pikir saya menekan beberapa hal yang Anda gunakan btw. Saya biasanya tidak keberatan dengan solusi lain yang sama dengan solusi saya, meskipun saya biasanya memilih untuk tidak memposting ini
Uriel
485 byte
HyperNeutrino
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)

Cobalah online!

-9 byte
-4 byte berkat ovs

HyperNeutrino
sumber
Saya tidak mengerti mengapa Anda perlu s. Gabungkan dua baris terakhir Anda menjadi print(r...28)460 byte.
Ovs
@ Oops lupa tentang itu. Terima kasih!
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,"'")

Idenya di sini adalah untuk menghasilkan tiang totem terlebih dahulu, kemudian menambahkan tikis cermin di kedua sisi itu.

Termasuk dua fungsi pembantu:, iyang memeriksa apakah string adalah salah satu kata dalam input; dan g, yang melakukan idan mengembalikan string yang diberikan atau " ". gjuga menghitung berapa banyak elemen yang hilang untuk digunakan bagi para penari di bagian bawah.

Cuplikan Tes

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
sumber