5 Tage Wettervorhersage


21

Wettervorhersage: Falsch zu oft, um sich darauf zu verlassen, richtig zu oft, um es zu ignorieren.

Bei hohen und niedrigen Temperaturen und einer von vier Wetterbedingungen pro Tag eine grafische ASCII-Wettervorhersage für fünf Tage ausgeben. Die Struktur der vier grafischen Anzeigen ist unten dargestellt.

 \ /
 -O-       Sunny
 / \


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


  (==)     Cloudy
(====)


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

Das Prognosediagramm sieht wie folgt aus: Jeder grafische Indikator wird in einem eigenen 9x5-Feld zentriert, wobei sich 5 Felder über das Diagramm erstrecken. Jedes Kästchen ist durch |Zeichen getrennt . Unter der grafischen Anzeige befindet sich eine dreistellige Abkürzung für den Wochentag ( MON, TUE, WED, THU, FRI, SAT, SUN), die in einem eigenen 9x1-Feld zentriert ist. Die Temperaturen liegen unter dem Wochentag, zentriert in ihrer eigenen 9x2 Box. Ein Beispiel ist unten gezeigt.

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

Beachten Sie, dass "zentriert" locker genommen werden kann - sehen Sie im Beispiel, wie die grafische Ausrichtung und die horizontale Ausrichtung der Temperatur etwas flexibel sind.

Da ich aus den USA komme und daher Fahrenheit verwende, können Sie außerdem davon ausgehen, dass die Temperaturen alle zweistellig sind 9 < t < 100.

I / O und Regeln

Die E / A-Beispiele hier veranschaulichen die obige Beispieltabelle.

  • Die Eingabe kann in jedem vernünftigen Format und mit jeder geeigneten Methode erfolgen . Zum Beispiel:
    1) Sie könnten Zahlen für die Wochentage, die hohen und niedrigen Temperaturen und die vier Bedingungen verwenden und die Eingabe als fünf Tupel nehmen, wie zum Beispiel [0, 75, 57, 2], [1, 69, 53, 3], ...
    2) Sie könnten die Eingabe als fünf Tupel mit Worten nehmen, wie zum Beispiel ['MON', 75, 57, 'CLOUDY'], ['TUE', 69, 53, 'RAINY'] ...
    3) Sie können Eingaben nur für den ersten Tag und eine Liste mit hohen Temperaturen, eine Liste mit niedrigen Temperaturen und eine Liste mit Bedingungen wie 1, [75, 69, ...], [57, 53, ...], [2, 3, ...]
    4) usw. verwenden.

  • Führende / nachfolgende Zeilenumbrüche oder andere Leerzeichen sind optional, sofern die Zeichen richtig ausgerichtet sind.

  • Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
  • Die Ausgabe kann an die Konsole erfolgen, als Liste von Zeichenfolgen zurückgegeben werden, als einzelne Zeichenfolge zurückgegeben werden usw.
  • Standard-Schlupflöcher sind verboten.
  • Dies ist daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.

11
-1 für die Verwendung von ° F ಠ_ಠ
betseg

6
-1 dafür, dass dies für meinen Bundesstaat in den USA nicht funktioniert (es sind heute 9 ° F).
Magic Octopus Urn

@MagicOctopusUrn Ich denke, Programme, die auch außerhalb dieses Bereichs funktionieren, werden ebenfalls akzeptiert.
Paŭlo Ebermann

Antworten:


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🍉

Nimmt Eingaben als eine Liste von Listen mit ganzen Zahlen in dem Format auf, condition day high lowin dem Bedingung eine ganze Zahl zwischen 0 und 4 ist. Versuchen Sie es online!


4

JavaScript (ES8), 304 263 222 Byte

Wird als Array von 5 [w,d,h,l]Einträgen eingegeben , wobei d der Tag als Zeichenfolge ist und w , h , l ganze Zahlen sind, die das Wetter (0-indiziert, mit 0 = sonnig), die hohe Temperatur bzw. die niedrige Temperatur darstellen. Gibt ein Array von Zeichenfolgen zurück.

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

Wie?

Wir definieren:

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

    Ein Array von Zeichenfolgen, die jede Zeile der Tafel beschreiben, in denen:

    • 0 = Präfixzeichenfolge: "| "
    • 1 = Wochentag
    • 2 = hohe Temperatur
    • 3 = niedrige Temperatur
    • 4 = oberes Muster der grafischen Anzeige
    • 5 = mittleres Muster der grafischen Anzeige
    • 6 = unteres Muster der grafischen Anzeige
  • W = ' (==),(====),/////,\\ /,-O(==), \\ /, -O-, / \\,'.split(',')

    Ein Array von Zeichenfolgen, die die Muster der grafischen Indikatoren beschreiben.

  • P = '765143810210'

    Eine Zeichenfolge, die die Indizes der Muster in W für jeden grafischen Indikator beschreibt, durch 3 gruppiert und in umgekehrter Reihenfolge gespeichert.

Die Hauptfunktion lautet nun:

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

Holzkohle , 110 bis 94 Bytes

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

Probieren Sie es online! Link ist eine ausführliche Version des Codes. Bearbeiten: 16 Bytes gespart, indem die Cloud nicht wiederholt wird. Erläuterung:

↑χ

Drucken Sie die linke Spalte von |s.

F⁵«

Schleife über die 5 Tage.

Nθ

Geben Sie die Wetterbedingungen mit den Nummern 0 bis 3 in derselben Reihenfolge wie die Frage ein.

↘→↘P⎇θ

Wenn das Wetter nicht sonnig ist:

⁺⁺⎇⊖θ  ¦\ /¶-o

Wenn das Wetter teilweise bewölkt ist, drucken Sie eine teilweise Sonne.

“⎇)D№⸿≡⬤»”

Drucken Sie eine Wolke.

×/×⁵⁼θ³

Wenn es regnet, drucken Sie es aus.

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

Ansonsten drucken Sie die Sonne.

M¹¦⁵PS

Lesen und drucken Sie den Tag.

¶¶EHL⁺⁺κ S

Schleife über und geben Sie die Temperaturen ein und drucken Sie sie aus.

M⁶±¹↑χ»

Drucken Sie die nächste Spalte von |s.

F6231«

Schleife über die Zeichen 6, 2, 3und 1.

P←⁵¹

Drucken Sie eine Reihe von -s.

MIι↓

Wandle das Zeichen in eine Ganzzahl und mache dich bereit, um die nächste Zeile zu drucken.


2

Python 3, 636 610 534 464 379 Bytes

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

Eingabeformat: - Die erste Liste zeigt die Wetterbedingungen tageweise an -
0 - Sonnig
1 - Teilweise bewölkt
2 - Bewölkt
3 - Regnerisch.

Zweite und dritte Liste nehmen jeweils die höchste und niedrigste Temperatur (als Zeichenfolge). Tun Sie nichts mit der vierten Liste - hauptsächlich, um die Wochentage zu speichern.

Probieren Sie es online

Hinweis: - Ein ganz besonderer Dank geht an Mr.XCoder, ovs und pizzapants184 für die Reduzierung vieler Bytes.


0

Sauber , 328 Bytes

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$

Probieren Sie es online!

Als Teilfunktion buchstäblich nehmen [[Int]]und zurückgeben String.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.