Прогноз погоди на 5 днів


21

Прогнозування погоди: надто часто помилятися, правильно занадто часто ігнорувати.

Враховуючи високу та низьку температуру та одну з чотирьох погодних умов на день, виведіть графічний прогноз погоди ASCII-графік на п’ять днів. Структура чотирьох графічних показників показана нижче.

 \ /
 -O-       Sunny
 / \


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


  (==)     Cloudy
(====)


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

Графік прогнозування виглядає наступним чином: кожен графічний індикатор центрирується у власному вікні 9х5, по 5 вікон через діаграму. Кожне поле розділено |символами. Внизу графічного індикатора є трибуквене абревіатура для дня тижня ( MON, TUE, WED, THU, FRI, SAT, SUN) з центром у власному полі 9х1. Температури нижчі за день тижня, зосереджені у власному боксі 9x2. Приклад наведено нижче.

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

Зауважте, що "по центру" можна сприймати вільно - див. У прикладі, як графічне вирівнювання та горизонтальне вирівнювання температури дещо гнучкі.

Крім того, оскільки я з США і тому використовую Фаренгейт, ви можете сміливо припускати, що температури всі двозначні, 9 < t < 100 .

I / O та правила

Приклади вводу-виводу тут демонструють наведений вище приклад діаграми.

  • Введення даних може бути здійснено у будь-якому розумному форматі та будь-яким зручним способом . Наприклад,
    1) ви можете використовувати цифри для днів тижня, високих і низьких температур, а також чотирьох умов, і приймати введення як п'ять кортежів, як [0, 75, 57, 2], [1, 69, 53, 3], ...
    2) ви можете взяти введення як п’ять кортежів, використовуючи слова, як ['MON', 75, 57, 'CLOUDY'], ['TUE', 69, 53, 'RAINY'] ...
    3) Ви можете взяти вклад як перший день, так і список високих температур, список низьких температур і список умов, наприклад 1, [75, 69, ...], [57, 53, ...], [2, 3, ...]
    4) тощо.

  • Провідні / остаточні рядки чи інші пробіли необов’язкові, за умови, що символи розташовуються належним чином.

  • Прийнятна або повна програма, або функція. Якщо функція, ви можете повернути вихід, а не надрукувати його.
  • Вихід може бути на консолі, повернутий у вигляді списку рядків, повернутий як окремий рядок тощо.
  • Стандартні лазівки заборонені.
  • Це тому застосовуються всі звичайні правила гольфу, і найкоротший код (у байтах) виграє.

11
-1 за використання ° F ಠ_ಠ
betseg

6
-1 тому, що це не працює для моєї держави в США (сьогодні це 9 ° F).
Чарівний восьминога Урна

@MagicOctopusUrn Я думаю, програми, які також працюють поза цим діапазоном, також приймаються.
Paŭlo Ebermann

Відповіді:


5

Emojicode , 1202 974 байт

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

Вводиться як список списків цілих чисел у форматі, condition day high lowде умовою є ціле число від 0 до 4. Спробуйте в Інтернеті!


4

JavaScript (ES8), 304 263 222 байти

Вводить введення як масив з 5 [w,d,h,l]записів, де d - день як рядок і w , h , l - цілі числа, що представляють погоду (0-індексовану, 0 = сонячна), високу температуру та низьку температуру відповідно. Повертає масив рядків.

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

Демо

Як?

Ми визначаємо:

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

    Масив рядків, що описують кожен рядок дошки, в якому:

    • 0 = рядок префікса: "| "
    • 1 = день тижня
    • 2 = висока температура
    • 3 = низька температура
    • 4 = верхній малюнок графічного індикатора
    • 5 = середня картина графічного індикатора
    • 6 = нижня схема графічного індикатора
  • W = ' (==),(====),/////,\\ /,-O(==), \\ /, -O-, / \\,'.split(',')

    Масив рядків, що описують візерунки графічних індикаторів.

  • P = '765143810210'

    Рядок, що описує індекси шаблонів у W для кожного графічного індикатора, згрупований по 3 та зберігається у зворотному порядку.

Тепер основна функція звучить як:

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

Вугілля деревне , 110 94 байт

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

Спробуйте в Інтернеті! Посилання на багатослівну версію коду. Редагувати: збережено 16 байт, уникаючи повторення хмари. Пояснення:

↑χ

Роздрукуйте ліву колонку |s.

F⁵«

Петля протягом 5 днів.

Nθ

Введіть погодні умови, пронумеровані від 0 до 3, використовуючи той самий порядок, що і питання.

↘→↘P⎇θ

Якщо погода не сонячна:

⁺⁺⎇⊖θ  ¦\ /¶-o

Якщо погода частково хмарна, то надрукуйте часткове сонце.

“⎇)D№⸿≡⬤»”

Роздрукуйте хмару.

×/×⁵⁼θ³

Якщо погода дощ, тоді роздрукуйте її.

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

Інакше друкуйте сонце.

M¹¦⁵PS

Читайте та друкуйте день.

¶¶EHL⁺⁺κ S

Переведіть петлю та введіть та роздрукуйте температури.

M⁶±¹↑χ»

Друк наступного стовпця |s.

F6231«

Петля над персонажами 6, 2, 3і 1.

P←⁵¹

Роздрукуйте рядок - s.

MIι↓

Передайте символу ціле число і рухайтесь готовим до друку наступного рядка.


2

Python 3, 636 610 534 464 379 байт

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

Формат введення: - Перший список визначає погодні умови дня -
0 - Сонячно
1
- Невелика хмарність 2 - Хмарно
3 - Дощ .

Другий та третій список приймають відповідно найвищі та найнижчі температури (як струни). Не робіть нічого з четвертим списком - головним чином, щоб зберігати дні тижня.

Спробуйте це в Інтернеті

Примітка: - Дуже особлива подяка Mr.XCoder, ovs та pizzapants184 за те, що вони допомагають зменшити багато байт.


0

Чисто , 328 байт

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$

Спробуйте в Інтернеті!

Як часткова функція буквальна, взяття [[Int]]і повернення String.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.