5-dniowa prognoza pogody

21

Prognozy pogody: zbyt często błędne, na których można polegać, zbyt często, aby je ignorować.

Biorąc pod uwagę wysoką i niską temperaturę oraz jeden z czterech warunków pogodowych dziennie, przygotuj graficzną pięciodniową prognozę pogody ASCII. Strukturę czterech wskaźników graficznych pokazano poniżej.

 \ /
 -O-       Sunny
 / \


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


  (==)     Cloudy
(====)


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

Tabela prognoz jest następująca: każdy wskaźnik graficzny jest wyśrodkowany w swoim własnym polu 9x5, z 5 polami na wykresie. Każde pole jest oddzielone |znakami. Pod wskaźnikiem graficznym znajduje się trzyliterowy skrót oznaczający dzień tygodnia ( MON, TUE, WED, THU, FRI, SAT, SUN), wyśrodkowany we własnym polu 9x1. Temperatury są poniżej dnia tygodnia wyśrodkowane w ich własnym pudełku 9x2. Przykład jest pokazany poniżej.

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

Zauważ, że „wyśrodkowany” można przyjmować luźno - patrz przykład, w jaki sposób wyrównanie graficzne i wyrównanie temperatury w poziomie są nieco elastyczne.

Ponadto, ponieważ jestem z USA i dlatego używam Fahrenheita, możesz bezpiecznie założyć, że wszystkie temperatury są dwucyfrowe, więc 9 < t < 100.

I / O i reguły

Przykłady we / wy są ilustracją powyższej przykładowej tabeli.

  • Dane wejściowe można przyjmować w dowolnym rozsądnym formacie i dowolną dogodną metodą . Na przykład:
    1) można użyć liczb dla dni tygodnia, wysokich i niskich temperatur oraz czterech warunków i przyjmować dane jako pięć krotek, np. [0, 75, 57, 2], [1, 69, 53, 3], ...
    2) można wprowadzić dane jako pięć krotek przy użyciu słów, takich jak ['MON', 75, 57, 'CLOUDY'], ['TUE', 69, 53, 'RAINY'] ...
    3) możesz wziąć dane wejściowe już pierwszego dnia oraz listę wysokich temperatur, listę niskich temperatur i listę warunków, takich jak 1, [75, 69, ...], [57, 53, ...], [2, 3, ...]
    4) itd.

  • Wiodące / końcowe znaki nowej linii lub inne białe znaki są opcjonalne, pod warunkiem, że znaki są odpowiednio ustawione.

  • Dopuszczalny jest pełny program lub funkcja. Jeśli funkcja, możesz zwrócić dane wyjściowe zamiast je drukować.
  • Dane wyjściowe mogą być wysyłane do konsoli, zwracane jako lista ciągów, zwracane jako pojedynczy ciąg itp.
  • Standardowe luki są zabronione.
  • To jest więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
AdmBorkBork
źródło
11
-1 za użycie ° F ಠ_ಠ
betseg
6
-1 za to, że to nie działa w moim stanie w USA (dziś jest 9 ° F).
Magic Octopus Urn
@MagicOctopusUrn Chyba programy, które działają również poza tym zakresem, są również akceptowane.
Paŭlo Ebermann

Odpowiedzi:

5

Emojicode , 1202 974 bajtów

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

Pobiera dane wejściowe jako listę liczb całkowitych w formacie, condition day high lowgdzie warunek jest liczbą całkowitą od 0 do 4. Wypróbuj online!

betseg
źródło
4

JavaScript (ES8), 304 263 222 bajtów

Pobiera dane wejściowe jako tablicę 5 [w,d,h,l]wpisów, gdzie d oznacza dzień jako ciąg, a w , h , l są liczbami całkowitymi reprezentującymi pogodę (odpowiednio 0, 0 = słonecznie), odpowiednio wysoką i niską temperaturę. Zwraca tablicę ciągów.

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

Próbny

W jaki sposób?

Definiujemy:

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

    Tablica ciągów znaków opisujących każdą linię planszy, w której:

    • 0 = ciąg prefiksu: "| "
    • 1 = dzień tygodnia
    • 2 = wysoka temperatura
    • 3 = niska temperatura
    • 4 = górny wzór wskaźnika graficznego
    • 5 = środkowy wzór wskaźnika graficznego
    • 6 = dolny wzór wskaźnika graficznego
  • W = ' (==),(====),/////,\\ /,-O(==), \\ /, -O-, / \\,'.split(',')

    Tablica ciągów opisujących wzorce wskaźników graficznych.

  • P = '765143810210'

    Ciąg opisujący wskaźniki wzorców w W dla każdego wskaźnika graficznego, pogrupowany według 3 i zapisany w odwrotnej kolejności.

Główna funkcja brzmi teraz:

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
źródło
3

Węgiel drzewny , 110 94 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Edycja: Zapisano 16 bajtów, unikając powtarzania chmury. Wyjaśnienie:

↑χ

Wydrukuj lewą kolumnę |s.

F⁵«

Pętla przez 5 dni.

Nθ

Wprowadź warunki pogodowe, ponumerowane od 0 do 3, stosując tę ​​samą kolejność co pytanie.

↘→↘P⎇θ

Jeśli warunki pogodowe nie są słoneczne:

⁺⁺⎇⊖θ  ¦\ /¶-o

Jeśli warunki pogodowe są częściowo zachmurzone, wydrukuj częściowe słońce.

“⎇)D№⸿≡⬤»”

Wydrukuj chmurę.

×/×⁵⁼θ³

Jeśli jest deszcz, wydrukuj go.

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

W przeciwnym razie wydrukuj słońce.

M¹¦⁵PS

Przeczytaj i wydrukuj dzień.

¶¶EHL⁺⁺κ S

Zapętlić i wprowadzić i wydrukować temperatury.

M⁶±¹↑χ»

Wydrukuj następną kolumnę |s.

F6231«

Pętla ciągu znaków 6, 2, 3i 1.

P←⁵¹

Wydrukuj wiersz -s.

MIι↓

Rzuć znak na liczbę całkowitą i przejdź gotowy do wydrukowania następnego wiersza.

Neil
źródło
2

Python 3, 636 610 534 464 379 bajtów

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 wejściowy: - Pierwsza lista uwzględnia warunki pogodowe w ciągu dnia -
0 - Słonecznie
1 - Częściowo pochmurno
2 - Pochmurno
3 - Deszczowo.

Druga i trzecia lista przyjmują odpowiednio najwyższą i najniższą temperaturę (jako ciągi znaków). Nie rób nic z czwartą listą - służy głównie do przechowywania dni tygodnia.

Wypróbuj online

Uwaga: - Specjalne podziękowania dla Mr.XCodera, ovs i pizzapants184 za pomoc w zmniejszeniu dużej ilości bajtów.

Manish Kundu
źródło
0

Czysty , 328 bajtów

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$

Wypróbuj online!

Jako funkcja częściowa dosłowna, przyjmowanie [[Int]]i powrót String.

Obrzydliwe
źródło