พยากรณ์อากาศ 5 วัน


21

การพยากรณ์อากาศ: ผิดบ่อยเกินไปที่จะพึ่งและบ่อยเกินไปที่จะไม่สนใจ

ด้วยอุณหภูมิที่สูงและต่ำและหนึ่งในสี่สภาพอากาศต่อวันให้การพยากรณ์อากาศห้าวันแบบ ASCII-art กราฟิก โครงสร้างของตัวบ่งชี้กราฟิกทั้งสี่แสดงอยู่ด้านล่าง

 \ /
 -O-       Sunny
 / \


\ /
-O(==)     Partly Cloudy
(====)


  (==)     Cloudy
(====)


  (==)
(====)     Rainy
/////

แผนภูมิการคาดการณ์มีดังนี้: ตัวบ่งชี้กราฟิกแต่ละตัวจะอยู่กึ่งกลางในกล่อง 9x5 ของตัวเองโดยมี 5 กล่องข้ามแผนภูมิ แต่ละกล่องคั่นด้วย|ตัวละคร ด้านล่างตัวบ่งชี้กราฟิกคือตัวย่อสามตัวอักษรสำหรับวันในสัปดาห์ ( MON, TUE, WED, THU, FRI, SAT, SUN) อยู่ตรงกลางในกล่องขนาด 9x1 ของตัวเอง อุณหภูมิต่ำกว่าวันในสัปดาห์ที่อยู่ตรงกลางในกล่องขนาด 9x2 ของตนเอง ตัวอย่างที่แสดงด้านล่าง

---------------------------------------------------
|         |         |         |         |         |
|    (==) |    (==) |  \ /    |   \ /   |   \ /   |
|  (====) |  (====) |  -O(==) |   -O-   |   -O-   |
|         |  /////  |  (====) |   / \   |   / \   |
|         |         |         |         |         |
---------------------------------------------------
|   MON   |   TUE   |   WED   |   THU   |   FRI   |
---------------------------------------------------
|  H 75   |   H 69  |  H 77   |   H 80  |  H 85   |
|  L 57   |   L 53  |  L 61   |   L 63  |  L 66   |
---------------------------------------------------

โปรดทราบว่าสามารถใช้ "กึ่งกลาง" ได้อย่างอิสระ - ดูในตัวอย่างวิธีการจัดแนวกราฟิกและการจัดแนวแนวนอนที่อุณหภูมิจะค่อนข้างยืดหยุ่น

9 < t < 100นอกจากนี้ตั้งแต่ผมมาจากสหรัฐอเมริกาและดังนั้นจึงใช้ฟาเรนไฮต์คุณสามารถได้อย่างปลอดภัยสมมติว่าอุณหภูมิที่มีทั้งหมดสองหลักดังนั้น

I / O และกฎ

ตัวอย่าง I / O ที่นี่เป็นตัวอย่างของแผนภูมิตัวอย่างด้านบน

  • การป้อนข้อมูลสามารถนำมาในรูปแบบที่เหมาะสมใด ๆ และด้วยวิธีการที่สะดวกใดตัวอย่างเช่น
    1) คุณสามารถใช้ตัวเลขสำหรับวันของสัปดาห์อุณหภูมิสูงและต่ำและสี่เงื่อนไขและป้อนข้อมูลเป็นห้า tuples เช่น[0, 75, 57, 2], [1, 69, 53, 3], ...
    2) คุณสามารถป้อนเป็น tuples ห้าคำโดยใช้คำเช่น['MON', 75, 57, 'CLOUDY'], ['TUE', 69, 53, 'RAINY'] ...
    3) คุณสามารถป้อนข้อมูลได้เพียงแค่วันแรกและรายการอุณหภูมิสูงรายการอุณหภูมิต่ำและรายการเงื่อนไขเช่น1, [75, 69, ...], [57, 53, ...], [2, 3, ...]
    4) เป็นต้น

  • ขึ้นบรรทัดใหม่ / ต่อท้ายหรือช่องว่างอื่น ๆ เป็นตัวเลือกโดยมีเงื่อนไขว่าตัวอักษรอยู่ในแนวที่เหมาะสม

  • ยอมรับได้ทั้งโปรแกรมหรือฟังก์ชั่น หากฟังก์ชั่นคุณสามารถส่งคืนผลลัพธ์มากกว่าการพิมพ์
  • เอาต์พุตสามารถไปที่คอนโซลส่งคืนเป็นรายการของสตริงส่งคืนเป็นสตริงเดี่ยว ฯลฯ
  • ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
  • นี่คือเพื่อให้ใช้กฎการเล่นกอล์ฟตามปกติทั้งหมดและรหัสที่สั้นที่สุด (เป็นไบต์) ชนะ

11
-1 สำหรับการใช้° F
ಠ_ಠ

6
-1 สำหรับการทำให้สิ่งนี้ใช้ไม่ได้กับรัฐของฉันในสหรัฐอเมริกา (ตอนนี้เป็น 9 ° F)
Magic Octopus Urn

@ MagicOctopusUrn ฉันเดาว่าโปรแกรมที่ทำงานนอกช่วงนี้ก็เป็นที่ยอมรับเช่นกัน
Paŭlo Ebermann

คำตอบ:


5

อิโมจิโคด , 1202 974 ไบต์

🍇a🍨🐚🍨🐚🚂🍮f🔷🍨🐚🍨🐚🔡🐸🍦D🍨🔤 MON  🔤🔤 TUE  🔤🔤 WED  🔤🔤 THU  🔤🔤 FRI  🔤🔤 SAT  🔤🔤 SUN  🔤🍆🍮f🍨🍨🔤 / \  🔤🔤 \ /  🔤🔤 -O-  🔤🍆🍨🔤(====)🔤🔤\ /   🔤🔤-O(==)🔤🍆🍨🔤      🔤🔤  (==)🔤🔤(====)🔤🍆🍨🔤///// 🔤🔤  (==)🔤🔤(====)🔤🍆🍆🍦l🔤 ---------------------------------------------------🔤🍦u🔤      🔤🍦s🔤 |  🔤🍦S🔤  |   🔤🍦w🍨🔤🔤🔤🔤🔤H 🔤🔤L 🔤🍆😀l🍦L🍪s u s u s u s u s u s🍪😀L🍮o🔤🔤🔂i⏩-2 4🍇🍮o s🍊◀️1i🍇🍮o🍪s🔤 🔤🍪🍉🔂j⏩0 5🍇🍊▶️1i🍇🍮o🍪o🍺🐽🍺🐽f🍺🐽🍺🐽a j 0i s🍪🍉🍋◀️1i🍇🍮o🍪o🍺🐽w i🔡🍺🐽🍺🐽a j i 10S🍪🍉🍓🍇🍮o🍪o🍺🐽D🍺🐽🍺🐽a j 1 s🍪🍉🍉😀o🍊🎉😛0i😛1i🍇🍊😛0i🍇😀L🍉😀l🍉🍉😀l🍉

รับอินพุตเป็นรายการของจำนวนเต็มในรูปแบบcondition day high lowที่ condition เป็นจำนวนเต็มตั้งแต่ 0 ถึง 4 ลองแบบออนไลน์!


4

JavaScript (ES8), 304 263 222 ไบต์

รับอินพุตเป็นอาร์เรย์จำนวน 5 [w,d,h,l]รายการโดยที่ dคือวันในรูปของสตริงและw , h , lเป็นจำนวนเต็มแทนสภาพอากาศ (ดัชนี 0 กับ 0 = แดด) อุณหภูมิสูงและอุณหภูมิต่ำตามลำดับ ส่งคืนอาร์เรย์ของสตริง

a=>',0,04,05,06,0,,01,,0H 2,0L 3,'.split`,`.map(s=>(s=a.map(p=>s.replace(/\d/g,n=>+n?p[n]||'  (==),(====),/////,\\ /,-O(==), \\ /, -O-, / \\,'.split`,`['765143810210'[p[0]*3-n+6]]:'|  ').padEnd(10,' -'[+!s])).join``)+s[0])

การสาธิต

อย่างไร?

เรากำหนด:

  • L = ',0,04,05,06,0,,01,,0H 2,0L 3,'.split(',')

    อาเรย์ของสตริงที่อธิบายแต่ละบรรทัดของบอร์ดซึ่ง:

    • 0 = สตริงคำนำหน้า: "| "
    • 1 = วันในสัปดาห์
    • 2 = อุณหภูมิสูง
    • 3 = อุณหภูมิต่ำ
    • 4 = รูปแบบด้านบนของตัวบ่งชี้กราฟิก
    • 5 = รูปแบบกลางของตัวบ่งชี้กราฟิก
    • 6 = รูปแบบด้านล่างของตัวบ่งชี้กราฟิก
  • W = ' (==),(====),/////,\\ /,-O(==), \\ /, -O-, / \\,'.split(',')

    อาร์เรย์ของสตริงที่อธิบายรูปแบบของตัวบ่งชี้กราฟิก

  • P = '765143810210'

    สตริงที่อธิบายดัชนีของรูปแบบในWสำหรับแต่ละตัวบ่งชี้กราฟิกจัดกลุ่มตาม 3 และจัดเก็บในลำดับที่กลับกัน

ฟังก์ชั่นหลักตอนนี้อ่านเป็น:

a => L.map(s =>                   // for each substring s in L
  (s = a.map(p =>                 //   for each array of parameters p in a:
    s.replace(                    //     replace in s
      /\d/g, n =>                 //       each digit n with:
        +n ?                      //         if n is non-zero:
          p[n] ||                 //           the n-th parameter in p, if defined
          W[P[p[0] * 3 - n + 6]]  //           or a graphical indicator pattern
        :                         //         else:
          '|  '                   //           the prefix string '|  '
    )                             //     end of replace()
    .padEnd(10, ' -'[+!s])        //     pad the result with either spaces or '-'
  ).join``)                       //   end of inner map(); join the results and save in s
  + s[0]                          //   append the first character
)                                 // end of outer map()

3

ถ่าน , 110 94 ไบต์

↑χF⁵«Nθ↘→↘P⎇θ⁺⁺⎇⊖θ  ¦\ /¶-o“⎇)D№⸿≡⬤»”×/×⁵⁼賓2⸿φ*EC+@OΠ≦”M¹¦⁵PS¶¶EHL⁺⁺κ SM⁶±¹↑χ»F6231«P←⁵¹MIι↓

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด แก้ไข: บันทึก 16 ไบต์โดยหลีกเลี่ยงการทำซ้ำบนคลาวด์ คำอธิบาย:

↑χ

พิมพ์คอลัมน์ด้านซ้ายมือของ|ท่าน

F⁵«

วนรอบ 5 วัน

Nθ

ป้อนสภาพอากาศหมายเลข 0 ถึง 3 โดยใช้คำสั่งเดียวกับคำถาม

↘→↘P⎇θ

หากสภาพอากาศไม่แดด:

⁺⁺⎇⊖θ  ¦\ /¶-o

หากสภาพอากาศมีเมฆมากเป็นส่วนหนึ่งให้พิมพ์ดวงอาทิตย์บางส่วน

“⎇)D№⸿≡⬤»”

พิมพ์คลาวด์

×/×⁵⁼θ³

หากสภาพอากาศมีฝนตกให้พิมพ์

“2⸿φ*EC+@OΠ≦”

มิฉะนั้นพิมพ์ดวงอาทิตย์

M¹¦⁵PS

อ่านและพิมพ์วันที่

¶¶EHL⁺⁺κ S

วนรอบและป้อนและพิมพ์อุณหภูมิ

M⁶±¹↑χ»

พิมพ์คอลัมน์ต่อไปของ|s

F6231«

ห่วงมากกว่าตัวละคร6, 2, และ31

P←⁵¹

พิมพ์แถวของ-s

MIι↓

แปลงอักขระเป็นจำนวนเต็มและพร้อมที่จะพิมพ์แถวถัดไป


2

Python 3, 636 610 534 464 379 ไบต์

def w(s,l,h,a):
 g='|';A='   ';p,q,r=[A+'\ /'+A,'  \ / '+A,A+' (==) ',A+' (==) '],[A+'-O-'+A,'  -O(==) ','  (====) ','  (====) '],[A+'/ \\'+A,'  (====) ',A*3,'  /////  '];n='-'*51;R=n,;w=x=y=z=''
 for e in s:x+=g+p[e];y+=g+q[e];z+=g+r[e];w+=g+A*3
 R+=x+g,y+g,z+g,w+g;x=u=v=''
 for i in range(5):x+=g+a[i];v+='|  H '+h[i]+A;u+='|  L '+l[i]+A
 print('\n'.join(R+(x+g,n,u+g,v+g,n)))  

รูปแบบการป้อนข้อมูล: - รายการแรกใช้เวลาในวันที่สภาพอากาศฉลาด -
0 - ซันนี่
1 - มีเมฆบางส่วน
2 - มีเมฆ
3 - มีฝนตก

รายการที่สองและสามใช้อุณหภูมิสูงสุดและต่ำสุดตามลำดับ (เป็นสตริง) อย่าทำอะไรกับรายการที่สี่ - ส่วนใหญ่จะเก็บวันของสัปดาห์

ลองใช้ออนไลน์

หมายเหตุ: - ขอบคุณเป็นพิเศษกับ Mr.XCoder, ovs และ pizzapants184 ที่ช่วยลดจำนวนไบต์ได้มาก


0

ทำความสะอาด , 328 ไบต์

import StdEnv,Text
s="----------"
u=" (====)"
v="(==)"
j=['-|||||-|-||-']
$[[d,h,l,w]:t]=[[z:cjustify 10(fromString x)]%(0,9)<+y\\x<-[s,"":[["\\ /","-O-","/ \\"],["\\ /  "," -O"+v,u]:map((++)["   "+v,u])[[""],["/////"]]]!!w]++["",s,"MONTUEWEDTHUFRI"%(d*3,d*3+2),s,"H "<+h,"L "<+l,s]&y<-if(t>[])($t)(map((<+)"")j)&z<-j]

join"\n"o$

ลองออนไลน์!

ในฐานะที่เป็นตัวอักษรบางส่วนฟังก์ชั่นการใช้และกลับมา[[Int]]String

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