Pronóstico del tiempo de 5 días

21

Predicción del tiempo: Incorrecto con demasiada frecuencia en el que confiar, demasiado a menudo como para ignorarlo.

Dada una temperatura alta y baja y una de las cuatro condiciones climáticas por día, genera un pronóstico meteorológico gráfico de cinco días para el arte ASCII. La estructura de los cuatro indicadores gráficos se muestra a continuación.

 \ /
 -O-       Sunny
 / \


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


  (==)     Cloudy
(====)


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

El gráfico de pronóstico es el siguiente: cada indicador gráfico se centra en su propio cuadro de 9x5, con 5 cuadros en el gráfico. Cada cuadro está separado por |caracteres. Debajo del indicador gráfico hay una abreviatura de tres letras para el día de la semana ( MON, TUE, WED, THU, FRI, SAT, SUN) centrada en su propio cuadro de 9x1. Las temperaturas están por debajo del día de la semana centradas en su propia caja de 9x2. Un ejemplo se muestra a continuación.

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

Tenga en cuenta que "centrado" se puede tomar libremente: vea en el ejemplo cómo la alineación gráfica y la alineación horizontal de temperatura son algo flexibles.

Además, como soy de los EE. UU. Y, por lo tanto, uso Fahrenheit, puede suponer con seguridad que las temperaturas son de dos dígitos, por lo tanto 9 < t < 100.

E / S y reglas

Los ejemplos de E / S aquí son demostrativos del gráfico de ejemplo anterior.

  • La entrada puede tomarse en cualquier formato razonable y por cualquier método conveniente . Por ejemplo,
    1) podría usar números para los días de la semana, las temperaturas altas y bajas, y las cuatro condiciones, y tomar la entrada como cinco tuplas, como [0, 75, 57, 2], [1, 69, 53, 3], ...
    2) podría tomar la entrada como cinco tuplas usando palabras, como ['MON', 75, 57, 'CLOUDY'], ['TUE', 69, 53, 'RAINY'] ...
    3) podría tomar la entrada como el primer día y una lista de altas temperaturas, una lista de bajas temperaturas y una lista de condiciones, como 1, [75, 69, ...], [57, 53, ...], [2, 3, ...]
    4) etc.

  • Las nuevas líneas iniciales / finales u otros espacios en blanco son opcionales, siempre que los caracteres se alineen adecuadamente.

  • Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
  • La salida puede ser a la consola, devuelta como una lista de cadenas, devuelta como una sola cadena, etc.
  • Las lagunas estándar están prohibidas.
  • Este es el por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
AdmBorkBork
fuente
11
-1 por usar ° F ಠ_ಠ
betseg
66
-1 por hacer que esto no funcione para mi estado en los Estados Unidos (hoy está a 9 ° F).
Urna de pulpo mágico
@MagicOctopusUrn Supongo que también se aceptan programas que funcionan también fuera de este rango.
Paŭlo Ebermann

Respuestas:

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🍉

Toma datos como una lista de listas de enteros en el formato condition day high lowdonde la condición es un entero entre 0 y 4. ¡ Pruébelo en línea!

Betseg
fuente
4

JavaScript (ES8), 304 263 222 bytes

Toma la entrada como una matriz de 5 [w,d,h,l]entradas, donde d es el día como una cadena yw , h , l son números enteros que representan el clima (índice 0, con 0 = soleado), temperatura alta y temperatura baja respectivamente. Devuelve una matriz de cadenas.

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

Manifestación

¿Cómo?

Definimos:

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

    Una serie de cadenas que describen cada línea del tablero, en la que:

    • 0 = cadena de prefijo: "| "
    • 1 = día de la semana
    • 2 = temperatura alta
    • 3 = baja temperatura
    • 4 = patrón superior del indicador gráfico
    • 5 = patrón medio del indicador gráfico
    • 6 = patrón inferior del indicador gráfico
  • W = ' (==),(====),/////,\\ /,-O(==), \\ /, -O-, / \\,'.split(',')

    Una serie de cadenas que describen los patrones de los indicadores gráficos.

  • P = '765143810210'

    Una cadena que describe los índices de los patrones en W para cada indicador gráfico, agrupados por 3 y almacenados en orden inverso.

La función principal ahora se lee como:

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
fuente
3

Carbón , 110 94 bytes

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

Pruébalo en línea! El enlace es a la versión detallada del código. Editar: guardado 16 bytes evitando repetir la nube. Explicación:

↑χ

Imprima la columna de la izquierda del |s.

F⁵«

Recorre los 5 días.

Nθ

Ingrese la condición climática, numerada del 0 al 3 usando el mismo orden que la pregunta.

↘→↘P⎇θ

Si el clima no es soleado:

⁺⁺⎇⊖θ  ¦\ /¶-o

Si el clima está parcialmente nublado, imprima un sol parcial.

“⎇)D№⸿≡⬤»”

Imprime una nube.

×/×⁵⁼θ³

Si llueve, imprímalo.

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

De lo contrario imprime el sol.

M¹¦⁵PS

Lee e imprime el día.

¶¶EHL⁺⁺κ S

Recorra e ingrese e imprima las temperaturas.

M⁶±¹↑χ»

Imprime la siguiente columna del |s.

F6231«

Lazo sobre los personajes 6, 2, 3y 1.

P←⁵¹

Imprime una fila de -s.

MIι↓

Convierte el personaje en entero y muévete listo para imprimir la siguiente fila.

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

Formato de entrada: - La primera lista toma las condiciones climáticas durante el día -
0 - Soleado
1 - Parcialmente nublado
2 - Nublado
3 - Lluvioso.

La segunda y tercera lista toman las temperaturas más altas y más bajas respectivamente (como cadenas). No haga nada con la cuarta lista, es principalmente para almacenar los días de la semana.

Pruébalo en línea

Nota: - Un agradecimiento muy especial a Mr.XCoder, ovs y pizzapants184 por ayudar a reducir muchos bytes.

Manish Kundu
fuente
0

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

Pruébalo en línea!

Como una función parcial literal, tomar [[Int]]y devolver String.

Οurous
fuente