Prévisions météorologiques à 5 jours

21

Prévisions météorologiques: Faux trop souvent pour être fiables, trop souvent pour ignorer.

Compte tenu des températures élevées et basses et de l'une des quatre conditions météorologiques par jour, émettez une prévision graphique graphique de cinq jours ASCII. La structure des quatre indicateurs graphiques est présentée ci-dessous.

 \ /
 -O-       Sunny
 / \


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


  (==)     Cloudy
(====)


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

Le graphique de prévision est le suivant: chaque indicateur graphique est centré dans sa propre case 9x5, avec 5 cases sur le graphique. Chaque case est séparée par des |caractères. Sous l'indicateur graphique se trouve une abréviation de trois lettres pour le jour de la semaine ( MON, TUE, WED, THU, FRI, SAT, SUN) centrée dans sa propre case 9x1. Les températures sont inférieures au jour de la semaine, centrées dans leur propre boîte 9x2. Un exemple est illustré ci-dessous.

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

Notez que "centré" peut être pris de manière lâche - voyez dans l'exemple comment l'alignement graphique et l'alignement horizontal de la température sont quelque peu flexibles.

De plus, comme je viens des États-Unis et que j'utilise donc Fahrenheit, vous pouvez supposer en toute sécurité que les températures sont toutes à deux chiffres, donc 9 < t < 100.

E / S et règles

Les exemples d'E / S ici illustrent l'exemple de graphique ci-dessus.

  • L'entrée peut être prise dans n'importe quel format raisonnable et par n'importe quelle méthode pratique . Par exemple,
    1) vous pouvez utiliser des nombres pour les jours de la semaine, les températures élevées et basses et les quatre conditions, et prendre la saisie comme cinq tuples, comme [0, 75, 57, 2], [1, 69, 53, 3], ...
    2) vous pouvez prendre la saisie comme cinq tuples en utilisant des mots, comme ['MON', 75, 57, 'CLOUDY'], ['TUE', 69, 53, 'RAINY'] ...
    3) vous pouvez prendre la saisie comme le premier jour seulement, et une liste de températures élevées, une liste de températures basses et une liste de conditions, comme 1, [75, 69, ...], [57, 53, ...], [2, 3, ...]
    4) etc.

  • Les sauts de ligne de début / fin ou d'autres espaces sont facultatifs, à condition que les caractères s'alignent correctement.

  • Un programme complet ou une fonction sont acceptables. S'il s'agit d'une fonction, vous pouvez renvoyer la sortie plutôt que de l'imprimer.
  • La sortie peut être vers la console, retournée sous forme de liste de chaînes, retournée sous forme de chaîne unique, etc.
  • Les failles standard sont interdites.
  • Il s'agit de donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) gagne.
AdmBorkBork
la source
11
-1 pour utiliser ° F ಠ_ಠ
betseg
6
-1 pour que cela ne fonctionne pas pour mon état aux États-Unis (il fait 9 ° F aujourd'hui).
Magic Octopus Urn
@MagicOctopusUrn Je suppose que les programmes qui fonctionnent également en dehors de cette plage sont également acceptés.
Paŭlo Ebermann

Réponses:

5

Emojicode , 1202 974 octets

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

Prend l'entrée comme une liste de listes d'entiers au format condition day high lowoù condition est un entier compris entre 0 et 4. Essayez-le en ligne!

betseg
la source
4

JavaScript (ES8), 304 263 222 octets

Prend l'entrée comme un tableau de 5 [w,d,h,l]entrées, où d est le jour sous forme de chaîne et w , h , l sont des entiers représentant respectivement la météo (indexée 0, avec 0 = ensoleillé), la température élevée et la température basse. Renvoie un tableau de chaînes.

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

Démo

Comment?

Nous définissons:

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

    Un tableau de chaînes décrivant chaque ligne de la carte, dans lequel:

    • 0 = chaîne de préfixe: "| "
    • 1 = jour de la semaine
    • 2 = température élevée
    • 3 = basse température
    • 4 = motif supérieur de l'indicateur graphique
    • 5 = motif médian de l'indicateur graphique
    • 6 = motif inférieur de l'indicateur graphique
  • W = ' (==),(====),/////,\\ /,-O(==), \\ /, -O-, / \\,'.split(',')

    Un tableau de chaînes décrivant les modèles des indicateurs graphiques.

  • P = '765143810210'

    Une chaîne décrivant les indices des motifs en W pour chaque indicateur graphique, regroupés par 3 et stockés dans l'ordre inverse.

La fonction principale se lit désormais comme suit:

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
la source
3

Charbon de bois , 110 94 octets

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

Essayez-le en ligne! Le lien est vers la version détaillée du code. Edit: 16 octets enregistrés en évitant de répéter le cloud. Explication:

↑χ

Imprimez la colonne de gauche de l' |art.

F⁵«

Boucle sur les 5 jours.

Nθ

Saisissez les conditions météorologiques, numérotées de 0 à 3 en utilisant le même ordre que la question.

↘→↘P⎇θ

Si les conditions météorologiques ne sont pas ensoleillées:

⁺⁺⎇⊖θ  ¦\ /¶-o

Si les conditions météorologiques sont partiellement nuageuses, imprimez un soleil partiel.

“⎇)D№⸿≡⬤»”

Imprimez un nuage.

×/×⁵⁼θ³

Si le temps est pluvieux, imprimez-le.

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

Sinon, imprimez le soleil.

M¹¦⁵PS

Lisez et imprimez la journée.

¶¶EHL⁺⁺κ S

Faites une boucle et saisissez et imprimez les températures.

M⁶±¹↑χ»

Imprimez la colonne suivante de l' |art.

F6231«

Boucle sur les personnages 6, 2, 3et 1.

P←⁵¹

Imprimez une rangée de -s.

MIι↓

Convertissez le caractère en entier et préparez-vous à imprimer la ligne suivante.

Neil
la source
2

Python 3, 636 610 534 464 379 octets

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

Format d'entrée: - La première liste prend les conditions météorologiques jour par jour -
0 - Ensoleillé
1 - Partiellement nuageux
2 - Nuageux
3 - Pluvieux.

Les deuxième et troisième listes prennent respectivement les températures les plus élevées et les plus basses (sous forme de chaînes). Ne faites rien avec la quatrième liste - c'est principalement pour stocker les jours de la semaine.

Essayez-le en ligne

Remarque: - Un merci très spécial à Mr.XCoder, ovs et pizzapants184 pour avoir aidé à réduire beaucoup d'octets.

Manish Kundu
la source
0

Nettoyer , 328 octets

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$

Essayez-le en ligne!

En tant que fonction partielle littérale, prise [[Int]]et retour String.

Οurous
la source