İstenen hava için kabile totemini kurun


11

Bir Sioux köyü var. Bir totem var:

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

Totem, Sioux'nun farklı görevlerine yardımcı olmak için hava durumuna hakim olmasını sağlar. Yeterli havayı çağırmak için totemleri düzgün bir şekilde süsleyen köylülere yardım edin. Totemin birkaç kısmı vardır:

             __
         ___|AA|___
   \/    \BBBBBBBB/    \/
   /\     ``|CC|``     /\
  /^^\      |DD|      /^^\
 / /\ \  13 |EE| 42  / /\ \
''''''''''''''''''''''''''''
  • Aiçindir güneş () veya bulutlardan ww
  • Biçindir yağmur """""""" veya kar ::::::::
  • Ciçindir fırtına zz
  • Diçindir rüzgar ~~
  • Eiçindir sis ==

Ama hepsi bu değil. Totem hava dansçılarına ihtiyaç duyar. Ne kadar çok eleman çağrılırsa, gerekli dansçı sayısı o kadar fazla olur. Eğer davet edilen bir eleman varsa, bir dansçı gerekir. İki element, iki dansçı. Dört elementin ötesinde, her zaman en fazla dört dansçı olacaktır. Hiçbir öğe çağrılmazsa, dansçı gerekmez. Totem dinlenmeli.

Hava dansçıları sırayla görünmelidir 1234. Örneğin, iki dansçı varsa, yuvalar 1ve 2işgal edilmelidir. Dahası, her dansçı farklı bir figür gerçekleştirir:

  • 1 dır-dir T
  • 2 dır-dir Y
  • 3 dır-dir K
  • 4 dır-dir X

Şimdi, köylüler hava isteklerini dile getirecekler. Sahip olmak istedikleri hava unsurlarını içeren bir cümle telaffuz edecekler. Totem ve dansçıları isteklerini yerine getirmek için kur.

Meydan okuma

Bir dizgiyi girdi olarak alan, cümledeki öğeleri ( güneş , yağmur ,…) eşleştiren ve totem ve onun dansçılarıyla tam köyü çıktılayan bir program yazın . Programınız girdi dizesi doğruluğunu kontrol etmek zorunda değildir (örneğin her iki içermez güneş ve bulutlar ). Bu maçlar gerekir kelimeler (literal anlamda):

  • Girdi dizgisi rüzgarlaX says: "I like the wind, it blows the worries away" eşleşir , çünkü virgül sözcüğün bir parçası değildir
  • Giriş dizesi rüzgarlaY says: "I hope the weather won't get too windy" eşleşmez , çünkü rüzgarlı ve rüzgar iki farklı kelimedir

Eşleştirilecek kelimelerin giriş dizesinin alıntı bölümünde yer alması garanti edilir (kimin konuştuğunu belirten ilk bölüm hiçbir zaman eşleştirilebilecek bir kelime içermez).

Örnekler

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

Bu yani bayt en kısa cevap kazanmak. Açıklamalar teşvik edilir.


Biz hem almazsınız varsayabiliriz sunve clouds, ya da her ikisi rainve snow?
HyperNeutrino

@HyperNeutrino Bu, zaten meydan okumada belirtildi.
Jim

Ah. Bunu birçok kez yaptım (zorluğun eksik kısımları). Üzgünüz: P
HyperNeutrino

lol +1 için The papoose shouts: "I WANNA GO OUTSIDE PLAY UNDER THE SUN!". Ben meydan okuma için çok teşekkürler olacağını düşündüm daha Ayrıca, bu meydan çok daha az ağrılı ve çok daha eğlenceli oldu: :) P
HyperNeutrino

Bunun gibi zorlukları özlüyorum. Çok zor değil, çok FGITW değil, çok golf dilleri değil ve aslında küçük bir 4 byter bulmak yerine kod yazmanızı gerektirir
Uriel

Yanıtlar:


2

Python, 527 524 508 504 481 474 462 461 bayt

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)

Çevrimiçi deneyin!


Son mücadelemde herkesin regex'i nasıl kullandığını hayal kırıklığına uğrattım. Bununla bunun hiçbirinin olmayacağını düşündüm. Biraz şaşırdım…
Jim

@Jim iyi, kesinlikle işlevin ana parçası değiller
Uriel

Oldukça farklı bir algoritma kullanan başka bir Python çözümü yayınladım; sadece bir golf olarak kullanmanın daha iyi olacağını düşünüyorsanız, benimkini sizinkine çok benzer olarak sileceğim.
HyperNeutrino

@HyperNeutrino Sadece golf oynuyordum ve btw kullandığınız bazı şeyleri vurduğumu düşünüyorum. Genelde bunları göndermemeyi tercih etsem de, genellikle benimkiyle aynı diğer çözümleri umursamıyorum
Uriel


2

Python 3 , 473 464 460 bayt

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)

Çevrimiçi deneyin!

-9 bayt
-V'ler sayesinde -4 bayt


Neden ihtiyacın olduğunu anlamıyorum s. Son iki satırınızı print(r...28)460 bayt için birleştirmeniz yeterlidir.
ovs

@ovs whoops bunu unuttu. Teşekkürler!
HyperNeutrino

1

JavaScript (ES6), 417 bayt

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

Buradaki fikir, önce totem direğini üretmek, daha sonra her iki tarafına yansıtılmış tikileri eklemekti.

İki yardımcı işlev içerir: ibir dizenin girişteki kelimelerden biri olup olmadığını kontrol eder; ve verilen dizeyi gyapan ive döndüren veya " ". gayrıca alttaki dansçılar için kaç elementin eksik olduğunu sayar.

Test Parçacığı

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>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.