5 Günlük Hava Durumu Tahmini


21

Hava Tahmini: Güvenmek için çok sık yanlış, doğru görmezden gelmek için çok sık.

Yüksek ve düşük bir sıcaklık ve günde dört hava koşulundan biri göz önüne alındığında, bir ASCII-art grafiksel beş günlük hava tahmini verir. Dört grafik göstergenin yapısı aşağıda gösterilmiştir.

 \ /
 -O-       Sunny
 / \


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


  (==)     Cloudy
(====)


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

Tahmin çizelgesi aşağıdaki gibidir: Her bir grafik gösterge, 9x5'lik bir kutuda, tablo boyunca 5 kutu ile ortalanmıştır. Her kutu |karakterlerle ayrılır . Grafiksel göstergenin altında, MON, TUE, WED, THU, FRI, SAT, SUNkendi 9x1 kutusunda ortalanan haftanın günü ( ) için üç harfli bir kısaltma bulunur . Sıcaklıklar haftanın gününün altında kendi 9x2 kutusunda ortalanıyor. Aşağıda bir örnek gösterilmiştir.

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

“Merkezlenmiş” in gevşek olarak alınabileceğini unutmayın; örnekte grafiksel hizalamanın ve sıcaklık yatay hizalamanın biraz esnek olduğunu görün.

Ek olarak, ben ABD'den geldiğimden ve bu yüzden Fahrenheit kullandığım için sıcaklıkların çift basamaklı olduğunu kabul edersiniz 9 < t < 100.

G / Ç ve Kurallar

Buradaki G / Ç örnekleri yukarıdaki örnek grafiğin gösterimidir.

  • Giriş, herhangi bir makul formatta ve uygun bir yöntemle alınabilir . Örneğin,
    1) haftanın günleri için sayıları kullanabilir, yüksek ve düşük sıcaklıklar ve dört koşulları ve beş küpe olarak almak girişi gibi [0, 75, 57, 2], [1, 69, 53, 3], ...
    2) gibi beş küpe kullanarak kelimeler olarak girdi sürebilir ['MON', 75, 57, 'CLOUDY'], ['TUE', 69, 53, 'RAINY'] ...
    ) 3 girişi yalnızca ilk gün ve yüksek sıcaklıkların bir listesini, düşük sıcaklıkların bir listesini ve 1, [75, 69, ...], [57, 53, ...], [2, 3, ...]
    4) gibi koşulların bir listesini alabilirsiniz .

  • Lider / izleyen yeni satırlar veya diğer boşluklar, karakterlerin uygun şekilde sıralanması şartıyla isteğe bağlıdır.

  • Tam bir program veya bir işlev kabul edilebilir. Bir işlevse, çıktıyı yazdırmak yerine geri gönderebilirsiniz.
  • Çıktı konsola olabilir, dizelerin listesi olarak döndürülür, tek bir dizge olarak döndürülür vb.
  • Standart boşluklar yasaktır.
  • Bu bu nedenle normal golf kurallarının tümü geçerli olur ve en kısa kod (bayt cinsinden) kazanır.

11
° F
ಠ_ಠ

6
Bunu ABD'deki devletim için çalışmadığı için -1 (bugün 9 ° F).
Magic Octopus Urn

@ MagicOctopusUrn Sanırım bu aralığın dışında da çalışan programlar da kabul ediliyor.
Paŭlo Ebermann

Yanıtlar:


5

Emojicode , 1202 974 bayt

🍇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 lowDurumu, 0 ile 4 arasında bir tam sayı olan biçimindeki tamsayı listelerinin bir listesi olarak alır. Çevrimiçi deneyin!


4

JavaScript (ES8), 304 263 222 bayt

5 [w,d,h,l]giriş dizisi olarak girdi alır ; d , bir dize olarak gündür ve w , h , l , sırasıyla hava durumunu (0 indeksli, 0 = güneşli), yüksek sıcaklığı ve düşük sıcaklığı temsil eden tam sayılardır. Bir dizi dizeyi döndürür.

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

gösteri

Nasıl?

Tanımlarız:

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

    Kartın her bir satırını tanımlayan bir dizi dizi. Burada:

    • 0 = önek dizesi: "| "
    • 1 = haftanın günü
    • 2 = yüksek sıcaklık
    • 3 = düşük sıcaklık
    • 4 = grafik göstergenin üst şekli
    • 5 = grafik göstergenin orta düzeni
    • 6 = grafik göstergenin alt kalıbı
  • W = ' (==),(====),/////,\\ /,-O(==), \\ /, -O-, / \\,'.split(',')

    Grafiksel göstergelerin düzenlerini tanımlayan bir dizi dizisi.

  • P = '765143810210'

    Desen indisleri açıklayan bir dizge W her grafiksel gösterge için, 3 ile gruplandırılmış ve ters saklanır.

Ana fonksiyon şimdi şöyledir:

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

Kömür , 110 94 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. Düzenleme: Bulut tekrarı kaçınarak 16 bayt kaydedildi. Açıklama:

↑χ

S nin solundaki sütunu yazdır |.

F⁵«

5 gün boyunca döngü.

Nθ

Soru ile aynı sırayı kullanarak 0 ila 3 numaralı hava durumunu girin.

↘→↘P⎇θ

Hava durumu güneşli değilse:

⁺⁺⎇⊖θ  ¦\ /¶-o

Hava durumu kısmen bulutlu ise kısmen güneş ışığı alınız.

“⎇)D№⸿≡⬤»”

Bir bulut yazdırın.

×/×⁵⁼θ³

Hava yağmurlu ise, yazdırın.

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

Aksi takdirde güneşi yazdırın.

M¹¦⁵PS

Günü okuyun ve yazdırın.

¶¶EHL⁺⁺κ S

Döngü ve sıcaklıklar giriş ve baskı.

M⁶±¹↑χ»

Bir sonraki |s sütunu yazdır .

F6231«

Döngü karakterler üzerinde 6, 2, 3ve 1.

P←⁵¹

-S satırı yazdırın .

MIι↓

Karakteri tamsayıya dönüştürün ve bir sonraki satırı yazdırmaya hazır hale getirin.


2

Python 3, 636 610 534 464 379 bayt

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

Giriş Biçimi: - İlk liste hava koşullarını günden güne alır -
0 - Güneşli
1 - Parçalı bulutlu
2 - Bulutlu
3 - Yağmurlu.

İkinci ve üçüncü liste sırasıyla (en yüksek ve en düşük sıcaklıkları alır) (dizi olarak). Dördüncü listeyle hiçbir şey yapmayın - esas olarak haftanın günlerini saklamak.

Çevrimiçi Deneyin

Not: - Bayt sayısının azaltılmasına yardımcı olan Mr.Coder, ovs ve pizzapants184'e çok özel bir teşekkür.


0

Temiz , 328 bayt

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$

Çevrimiçi deneyin!

Kısmi bir işlev olarak değişmez, alma [[Int]]ve geri alma String.

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.