Dự báo thời tiết 5 ngày


21

Dự báo thời tiết: Sai quá thường xuyên để dựa vào, phải quá thường xuyên để bỏ qua.

Với nhiệt độ cao và thấp và một trong bốn điều kiện thời tiết mỗi ngày, hãy đưa ra dự báo thời tiết năm ngày của đồ họa nghệ thuật ASCII. Cấu trúc của bốn chỉ số đồ họa được hiển thị dưới đây.

 \ /
 -O-       Sunny
 / \


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


  (==)     Cloudy
(====)


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

Biểu đồ dự báo như sau: mỗi chỉ báo đồ họa được căn giữa trong hộp 9x5 của riêng nó, với 5 hộp trên biểu đồ. Mỗi hộp được phân tách bằng các |ký tự. Bên dưới chỉ báo đồ họa là một chữ viết tắt ba chữ cái cho ngày trong tuần ( MON, TUE, WED, THU, FRI, SAT, SUN) tập trung vào hộp 9x1 của chính nó. Nhiệt độ dưới ngày trong tuần tập trung trong hộp 9x2 của riêng họ. Một ví dụ đã được biểu diễn ở dưới.

---------------------------------------------------
|         |         |         |         |         |
|    (==) |    (==) |  \ /    |   \ /   |   \ /   |
|  (====) |  (====) |  -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   |
---------------------------------------------------

Lưu ý rằng "căn giữa" có thể được thực hiện một cách lỏng lẻo - xem trong ví dụ về cách căn chỉnh đồ họa và căn chỉnh ngang nhiệt độ có phần linh hoạt.

Ngoài ra, vì tôi đến từ Hoa Kỳ và do đó sử dụng Fahrenheit, bạn có thể giả định rằng nhiệt độ đều là hai chữ số, vì vậy 9 < t < 100.

I / O và Nội quy

Các ví dụ I / O ở đây là minh họa cho biểu đồ ví dụ trên.

  • Đầu vào có thể được thực hiện trong bất kỳ định dạng hợp lý và bằng bất kỳ phương pháp thuận tiện . Ví dụ:
    1) bạn có thể sử dụng các số cho các ngày trong tuần, nhiệt độ cao và thấp và bốn điều kiện và lấy đầu vào là năm tuple, như [0, 75, 57, 2], [1, 69, 53, 3], ...
    2) bạn có thể lấy đầu vào là năm tuple bằng các từ, như ['MON', 75, 57, 'CLOUDY'], ['TUE', 69, 53, 'RAINY'] ...
    3) bạn có thể lấy đầu vào chỉ trong ngày đầu tiên và danh sách nhiệt độ cao, danh sách nhiệt độ thấp và danh sách các điều kiện, như 1, [75, 69, ...], [57, 53, ...], [2, 3, ...]
    4), v.v.

  • Dòng mới hàng đầu / dấu hoặc khoảng trắng khác là tùy chọn, miễn là các ký tự xếp hàng một cách thích hợp.

  • Một chương trình đầy đủ hoặc một chức năng được chấp nhận. Nếu một chức năng, bạn có thể trả lại đầu ra thay vì in nó.
  • Đầu ra có thể là bàn điều khiển, được trả về dưới dạng danh sách các chuỗi, được trả về dưới dạng một chuỗi, v.v.
  • Sơ hở tiêu chuẩn bị cấm.
  • Đây là để áp dụng tất cả các quy tắc chơi golf thông thường và mã ngắn nhất (tính bằng byte) sẽ thắng.

11
-1 khi sử dụng ° F
_ಠ

6
-1 để làm cho điều này không hoạt động cho tiểu bang của tôi ở Hoa Kỳ (hôm nay là 9 ° F).
Bạch tuộc ma thuật Urn

@MagicOctopusUrn Tôi đoán các chương trình hoạt động ngoài phạm vi này cũng được chấp nhận.
Paŭlo Ebermann

Câu trả lời:


5

Biểu tượng cảm xúc , 1202 974 byte

🍇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🍉

Lấy đầu vào dưới dạng danh sách các số nguyên theo định dạng trong condition day high lowđó điều kiện là một số nguyên từ 0 đến 4. Hãy thử trực tuyến!


4

JavaScript (ES8), 304 263 222 byte

Lấy đầu vào là một mảng gồm 5 [w,d,h,l]mục, trong đó d là ngày dưới dạng chuỗi và w , h , l là các số nguyên biểu thị thời tiết (được lập chỉ mục 0, với 0 = nắng), nhiệt độ cao và nhiệt độ thấp tương ứng. Trả về một chuỗi các chuỗi.

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])

Bản giới thiệu

Làm sao?

Chúng tôi xác định:

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

    Một chuỗi các chuỗi mô tả từng dòng của bảng, trong đó:

    • 0 = chuỗi tiền tố: "| "
    • 1 = ngày trong tuần
    • 2 = nhiệt độ cao
    • 3 = nhiệt độ thấp
    • 4 = mẫu trên cùng của chỉ báo đồ họa
    • 5 = mẫu giữa của chỉ báo đồ họa
    • 6 = mẫu dưới cùng của chỉ báo đồ họa
  • W = ' (==),(====),/////,\\ /,-O(==), \\ /, -O-, / \\,'.split(',')

    Một chuỗi các chuỗi mô tả các mẫu của các chỉ số đồ họa.

  • P = '765143810210'

    Một chuỗi mô tả các chỉ số của các mẫu trong W cho mỗi chỉ báo đồ họa, được nhóm theo 3 và được lưu theo thứ tự ngược lại.

Các chức năng chính bây giờ đọc là:

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

Than , 110 94 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Chỉnh sửa: Đã lưu 16 byte bằng cách tránh lặp lại đám mây. Giải trình:

↑χ

In cột bên trái của |s.

F⁵«

Vòng lặp trong 5 ngày.

Nθ

Nhập điều kiện thời tiết, được đánh số từ 0 đến 3 bằng cách sử dụng thứ tự giống như câu hỏi.

↘→↘P⎇θ

Nếu điều kiện thời tiết không nắng:

⁺⁺⎇⊖θ  ¦\ /¶-o

Nếu điều kiện thời tiết nhiều mây thì in một phần mặt trời.

“⎇)D№⸿≡⬤»”

In một đám mây.

×/×⁵⁼θ³

Nếu thời tiết mưa thì in nó.

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

Nếu không thì in mặt trời.

M¹¦⁵PS

Đọc và in trong ngày.

¶¶EHL⁺⁺κ S

Lặp lại và nhập và in nhiệt độ.

M⁶±¹↑χ»

In cột tiếp theo của |s.

F6231«

Vòng qua các nhân vật 6, 2, 31.

P←⁵¹

In một hàng -s.

MIι↓

Truyền ký tự thành số nguyên và di chuyển sẵn sàng để in hàng tiếp theo.


2

Python 3, 636 610 534 464 379 byte

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

Định dạng đầu vào: - Danh sách đầu tiên có điều kiện thời tiết ngày khôn ngoan -
0 - Nắng
1 - Trời nhiều mây
2 - Mây
3 - Mưa.

Danh sách thứ hai và thứ ba lấy nhiệt độ cao nhất và thấp nhất tương ứng (dưới dạng chuỗi). Đừng làm bất cứ điều gì với danh sách thứ tư - chủ yếu là để lưu trữ các ngày trong tuần.

Dùng thử trực tuyến

Lưu ý: - Một lời cảm ơn rất đặc biệt đến Mr.XCoder, ovs và pizzapants184 vì đã giúp giảm rất nhiều byte.


0

Sạch sẽ , 328 byte

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$

Hãy thử trực tuyến!

Là một phần chức năng theo nghĩa đen, lấy [[Int]]và trả lại String.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.