Tempo para 5 dias


21

Previsão do tempo: incorreto com muita frequência, certo demais para ignorar.

Dada uma temperatura alta e baixa e uma das quatro condições meteorológicas por dia, produz uma previsão gráfica de cinco dias da arte ASCII. A estrutura dos quatro indicadores gráficos é mostrada abaixo.

 \ /
 -O-       Sunny
 / \


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


  (==)     Cloudy
(====)


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

O gráfico de previsão é o seguinte: cada indicador gráfico é centralizado em sua própria caixa 9x5, com 5 caixas no gráfico. Cada caixa é separada por |caracteres. Abaixo do indicador gráfico, há uma abreviação de três letras para o dia da semana ( MON, TUE, WED, THU, FRI, SAT, SUN) centralizada em sua própria caixa 9x1. As temperaturas estão abaixo do dia da semana centralizadas em sua própria caixa 9x2. Um exemplo é mostrado abaixo.

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

Observe que "centrado" pode ser tomado de maneira vaga - veja no exemplo como o alinhamento gráfico e o alinhamento horizontal da temperatura são um pouco flexíveis.

Além disso, como eu sou dos EUA e, portanto, uso Fahrenheit, você pode assumir com segurança que as temperaturas são de dois dígitos 9 < t < 100.

E / S e regras

Os exemplos de E / S aqui são demonstrativos do gráfico de exemplo acima.

  • A entrada pode ser obtida em qualquer formato razoável e por qualquer método conveniente . Por exemplo,
    1) você pode usar números para os dias da semana, as temperaturas alta e baixa e as quatro condições e receber entradas como cinco tuplas, como [0, 75, 57, 2], [1, 69, 53, 3], ...
    2) você pode usar entradas como cinco tuplas usando palavras, como ['MON', 75, 57, 'CLOUDY'], ['TUE', 69, 53, 'RAINY'] ...
    3) você pode considerar a entrada apenas no primeiro dia e uma lista de altas temperaturas, uma lista de baixas temperaturas e uma lista de condições, como 1, [75, 69, ...], [57, 53, ...], [2, 3, ...]
    4) etc.

  • Novas linhas à esquerda / à direita ou outro espaço em branco são opcionais, desde que os caracteres sejam alinhados adequadamente.

  • Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
  • A saída pode ser no console, retornada como uma lista de cadeias, retornada como uma única cadeia, etc.
  • As brechas padrão são proibidas.
  • Isso é portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.

11
-1 para usar ° F ಠ_ಠ
betseg 02/02

6
-1 por fazer isso não funcionar no meu estado nos EUA (hoje são 9 ° F).
Magic Octopus Urn

@MagicOctopusUrn Acho que programas que funcionam também fora desse intervalo também são aceitos.
Paŭlo Ebermann 02/02

Respostas:


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🍉

Recebe a entrada como uma lista de listas de números inteiros no formato de condition day high lowonde a condição é um número inteiro entre 0 e 4. Experimente online!


4

JavaScript (ES8), 304 263 222 bytes

Recebe a entrada como uma matriz de 5 [w,d,h,l]entradas, em que d é o dia como uma sequência e w , h , l são números inteiros que representam o clima (indexado 0, com 0 = ensolarado), alta temperatura e baixa temperatura, respectivamente. Retorna uma matriz de seqüências de caracteres.

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

Quão?

Nós definimos:

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

    Uma matriz de seqüências de caracteres que descreve cada linha do quadro, na qual:

    • 0 = sequência do prefixo: "| "
    • 1 = dia da semana
    • 2 = alta temperatura
    • 3 = baixa temperatura
    • 4 = padrão superior do indicador gráfico
    • 5 = padrão do meio do indicador gráfico
    • 6 = padrão inferior do indicador gráfico
  • W = ' (==),(====),/////,\\ /,-O(==), \\ /, -O-, / \\,'.split(',')

    Uma matriz de sequências descrevendo os padrões dos indicadores gráficos.

  • P = '765143810210'

    Uma sequência que descreve os índices dos padrões em W para cada indicador gráfico, agrupados por 3 e armazenados na ordem inversa.

A função principal agora é lida 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()

3

Carvão , 110 94 bytes

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

Experimente online! Link é a versão detalhada do código. Editar: salvou 16 bytes, evitando repetir a nuvem. Explicação:

↑χ

Imprima a coluna da esquerda de |s.

F⁵«

Loop ao longo dos 5 dias.

Nθ

Insira a condição climática, numerada de 0 a 3, usando a mesma ordem que a pergunta.

↘→↘P⎇θ

Se a condição climática não estiver ensolarada:

⁺⁺⎇⊖θ  ¦\ /¶-o

Se a condição climática estiver parcialmente nublada, imprima um sol parcial.

“⎇)D№⸿≡⬤»”

Imprima uma nuvem.

×/×⁵⁼θ³

Se o tempo estiver chuvoso, imprima-o.

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

Caso contrário, imprima o sol.

M¹¦⁵PS

Leia e imprima o dia.

¶¶EHL⁺⁺κ S

Faça um loop, insira e imprima as temperaturas.

M⁶±¹↑χ»

Imprima a próxima coluna de |s.

F6231«

Loop sobre os personagens 6, 2, 3e 1.

P←⁵¹

Imprima uma linha de -s.

MIι↓

Converta o caractere para inteiro e prepare-se para imprimir a próxima linha.


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: - A primeira lista calcula as condições climáticas do dia -
0 - Ensolarado
1 - Parcialmente nublado
2 - Nublado
3 - Chuvoso.

A segunda e a terceira lista levam as temperaturas mais alta e mais baixa, respectivamente (como cadeias). Não faça nada com a quarta lista - principalmente para armazenar os dias da semana.

Experimente Online

Nota: - Um agradecimento muito especial ao Mr.XCoder, ovs e pizzapants184 por ajudar a reduzir muitos bytes.


0

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

Experimente online!

Como uma função parcial literal, pegar [[Int]]e retornar String.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.