ตั้งค่า totem tribal สำหรับสภาพอากาศที่ร้องขอ


11

มีหมู่บ้าน Sioux มันมีโทเท็ม:

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

Totem ช่วยให้ Sioux เป็นผู้ควบคุมสภาพอากาศเพื่อช่วยในการทำงานที่แตกต่างกัน ช่วยชาวบ้านตกแต่งโทเท็มอย่างเหมาะสมเพื่อเรียกสภาพอากาศที่เพียงพอ โทเท็มมีหลายส่วน:

             __
         ___|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

ตอนนี้ชาวบ้านจะแสดงความต้องการสภาพอากาศของพวกเขา พวกเขาจะออกเสียงประโยคที่มีองค์ประกอบสภาพอากาศที่พวกเขาต้องการ ตั้งค่าโทเท็มและนักเต้นเพื่อเติมเต็มความปรารถนาของพวกเขา

ท้าทาย

เขียนโครงการซึ่งจะใช้เวลาสตริงเป็น input ให้ตรงกับองค์ประกอบในประโยค ( ดวงอาทิตย์ , ฝน , ... ), และผลหมู่บ้านเต็มไปด้วยสัญลักษณ์ที่ตั้งไว้อย่างถูกต้องและนักเต้นของมัน โปรแกรมของคุณไม่จำเป็นต้องตรวจสอบความถูกต้องของสายป้อนข้อมูล (เช่นไม่มีทั้งดวงอาทิตย์และเมฆ ) มันจะต้องตรงกับคำ (ในความหมายตามตัวอักษร):

  • สายป้อน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 นี่ถูกระบุไว้แล้วในการท้าทาย
Jim

อา. ฉันทำมาหลายครั้งแล้ว (ส่วนที่ขาดหายไปของความท้าทาย) ขออภัย: P
HyperNeutrino

ฮ่า ๆ +1 The papoose shouts: "I WANNA GO OUTSIDE PLAY UNDER THE SUN!"สำหรับ นอกจากนี้ความท้าทายนี้ก็เจ็บปวดน้อยลงและสนุกกว่าที่ฉันคิดไว้ขอบคุณสำหรับความท้าทาย: P :)
HyperNeutrino

ฉันคิดถึงความท้าทายเช่นนี้ ไม่ยากเกินไป FGITW ไม่มากเกินไปไม่มากเกินไปกอล์ฟภาษาและที่จริงคุณต้องใช้รหัสแทนที่จะหาขนาดเล็ก 4 byter
ยูเรียล

คำตอบ:


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)

ลองออนไลน์!


ในการท้าทายครั้งสุดท้ายของฉันฉันรู้สึกผิดหวังที่ทุกคนใช้ regex ฉันคิดว่ากับอันนี้ฉันจะไม่มี ฉันแปลกใจแล้วนะ…
จิม

@ จิมพวกเขาไม่ใช่ส่วนสำคัญของฟังก์ชั่นแน่นอน
Uriel

ฉันโพสต์โซลูชัน Python อื่นที่ใช้อัลกอริทึมที่ค่อนข้างแตกต่าง ถ้าคุณคิดว่ามันจะเป็นการดีกว่าถ้าคุณใช้มันเป็นสนามกอล์ฟของคุณฉันจะลบของฉันในลักษณะที่คล้ายกับของคุณมากเกินไป
HyperNeutrino

@HyperNeutrino ฉันเพิ่งเล่นกอล์ฟและฉันคิดว่าฉันใช้บางสิ่งที่คุณใช้ btw ฉันมักจะไม่ทราบการแก้ปัญหาอื่น ๆ lang เช่นเดียวกับระเบิด แต่ฉันมักจะชอบที่จะไม่โพสต์เหล่านี้
ยูเรียล


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 ไบต์ขอบคุณจาก ovs


sผมไม่เห็นเหตุผลที่คุณจะต้อง เพียงรวมสองบรรทัดสุดท้ายของคุณเข้าprint(r...28)กับ 460 ไบต์
ovs

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

ความคิดที่นี่คือการสร้างเสาโทเท็มก่อนจากนั้นจึงเพิ่ม tikis ที่มิร์เรอร์ไว้ทั้งสองด้าน

มีฟังก์ชั่นตัวช่วยสองตัว: 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>

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.