Prakiraan Cuaca 5 Hari

21

Prakiraan cuaca: Salah terlalu sering diandalkan, terlalu sering diabaikan.

Mengingat suhu tinggi dan rendah dan satu dari empat kondisi cuaca per hari, menghasilkan ramalan cuaca lima hari grafis ASCII-art. Struktur keempat indikator grafis ditunjukkan di bawah ini.

 \ /
 -O-       Sunny
 / \


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


  (==)     Cloudy
(====)


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

Bagan peramalan adalah sebagai berikut: setiap indikator grafis dipusatkan di kotak 9x5 sendiri, dengan 5 kotak di bagan. Setiap kotak dipisahkan oleh |karakter. Di bawah indikator grafis adalah singkatan tiga huruf untuk hari dalam seminggu ( MON, TUE, WED, THU, FRI, SAT, SUN) dipusatkan di kotak 9x1 sendiri. Suhu di bawah hari dalam seminggu berpusat di kotak 9x2 mereka sendiri. Contohnya ditunjukkan di bawah ini.

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

Perhatikan bahwa "terpusat" dapat diambil secara longgar - lihat dalam contoh bagaimana penyelarasan grafis dan penyelarasan horizontal suhu agak fleksibel.

Selain itu, karena saya dari AS dan karena itu menggunakan Fahrenheit, Anda dapat dengan aman mengasumsikan bahwa suhu semua dua digit, jadi 9 < t < 100.

I / O dan Aturan

Contoh I / O di sini menunjukkan contoh diagram di atas.

  • Input dapat diambil dalam format apa pun yang masuk akal dan dengan metode apa pun yang praktis . Misalnya,
    1) Anda bisa menggunakan angka untuk hari-hari dalam seminggu, suhu tinggi dan rendah, dan empat kondisi, dan mengambil input sebagai lima tupel, seperti [0, 75, 57, 2], [1, 69, 53, 3], ...
    2) Anda bisa mengambil input sebagai lima tupel menggunakan kata-kata, seperti ['MON', 75, 57, 'CLOUDY'], ['TUE', 69, 53, 'RAINY'] ...
    3) Anda dapat mengambil input hanya pada hari pertama, dan daftar suhu tinggi, daftar suhu rendah, dan daftar kondisi, seperti 1, [75, 69, ...], [57, 53, ...], [2, 3, ...]
    4) dll.

  • Leading / trailing newlines atau spasi putih lainnya adalah opsional, asalkan karakternya berbaris dengan tepat.

  • Program lengkap atau fungsi dapat diterima. Jika suatu fungsi, Anda dapat mengembalikan output daripada mencetaknya.
  • Output bisa ke konsol, dikembalikan sebagai daftar string, dikembalikan sebagai string tunggal, dll.
  • Celah standar dilarang.
  • Ini adalah sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
AdmBorkBork
sumber
11
-1 untuk menggunakan ° F ಠ_ಠ
betseg
6
-1 untuk membuat ini tidak berfungsi untuk negara saya di AS (sekarang 9 ° F hari ini).
Magic Gurita Guci
@ MagicOctopusUrn Saya kira program yang bekerja juga di luar kisaran ini juga diterima.
Paŭlo Ebermann

Jawaban:

5

Emojicode , 1202 974 bytes

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

Mengambil input sebagai daftar daftar bilangan bulat dalam format di condition day high lowmana kondisi adalah bilangan bulat antara 0 dan 4. Coba online!

betseg
sumber
4

JavaScript (ES8), 304 263 222 byte

Mengambil input sebagai array dari 5 [w,d,h,l]entri, di mana d adalah hari sebagai string dan w , h , l adalah bilangan bulat yang mewakili cuaca (0-diindeks, dengan 0 = cerah), masing-masing suhu tinggi dan suhu rendah. Mengembalikan array string.

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

Demo

Bagaimana?

Kami mendefinisikan:

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

    Array string yang menggambarkan setiap baris papan, di mana:

    • 0 = string awalan: "| "
    • 1 = hari dalam seminggu
    • 2 = suhu tinggi
    • 3 = suhu rendah
    • 4 = pola teratas dari indikator grafis
    • 5 = pola tengah dari indikator grafis
    • 6 = pola bawah dari indikator grafis
  • W = ' (==),(====),/////,\\ /,-O(==), \\ /, -O-, / \\,'.split(',')

    Array string yang menggambarkan pola indikator grafis.

  • P = '765143810210'

    String yang menggambarkan indeks pola dalam W untuk setiap indikator grafis, dikelompokkan berdasarkan 3 dan disimpan dalam urutan terbalik.

Fungsi utama sekarang dibaca sebagai:

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()
Arnauld
sumber
3

Arang , 110 94 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Sunting: Disimpan 16 byte dengan menghindari pengulangan cloud. Penjelasan:

↑χ

Cetak kolom sebelah kiri |s.

F⁵«

Ulangi selama 5 hari.

Nθ

Masukkan kondisi cuaca, beri nomor 0 hingga 3 menggunakan urutan yang sama dengan pertanyaan.

↘→↘P⎇θ

Jika kondisi cuaca tidak cerah:

⁺⁺⎇⊖θ  ¦\ /¶-o

Jika kondisi cuaca mendung sebagian maka cetak sebagian matahari.

“⎇)D№⸿≡⬤»”

Cetak awan.

×/×⁵⁼θ³

Jika cuaca hujan maka cetaklah.

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

Kalau tidak cetak matahari.

M¹¦⁵PS

Baca dan cetak hari itu.

¶¶EHL⁺⁺κ S

Loop dan masukan dan cetak suhu.

M⁶±¹↑χ»

Cetak kolom |s.

F6231«

Loop atas karakter 6, 2, 3dan 1.

P←⁵¹

Cetak satu baris -s.

MIι↓

Keluarkan karakter ke integer dan siap untuk mencetak baris berikutnya.

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

Input Format: - Daftar pertama mengambil kondisi cuaca hari -
0 - Cerah
1 - Berawan sebagian
2 - Berawan
3 - Hujan.

Daftar kedua dan ketiga masing-masing mengambil suhu tertinggi dan terendah (sebagai string). Jangan melakukan apa pun dengan daftar keempat - terutama untuk menyimpan hari dalam seminggu.

Cobalah secara Online

Catatan: - Terima kasih sangat khusus kepada Mr.XCoder, ovs dan pizzapants184 untuk membantu mengurangi banyak byte.

Manish Kundu
sumber
0

Bersih , 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$

Cobalah online!

Sebagai fungsi parsial literal, mengambil [[Int]]dan kembali String.

Suram
sumber