5日間の天気予報


21

天気予報:あまりにも頻繁に頼りすぎて、あまりにも頻繁に無視します。

気温が高く、気温が低く、1日に4つの気象条件の1つがある場合、ASCIIアートのグラフィカルな5日間の天気予報を出力します。4つのグラフィカルインジケータの構造を以下に示します。

 \ /
 -O-       Sunny
 / \


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


  (==)     Cloudy
(====)


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

予測チャートは次のとおりです。各グラフィカルインジケータは、独自の9x5ボックスの中央に配置され、チャート全体に5つのボックスがあります。各ボックスは|文字で区切られています。グラフィカルインジケータの下には、曜日(MON, TUE, WED, THU, FRI, SAT, SUN)の3文字の略語が、独自の9x1ボックスに集中しています。気温は、それぞれの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   |
---------------------------------------------------

「中心」は大まかに取ることができることに注意してください。例では、グラフィカルな位置合わせと温度の水平方向の位置合わせがいくらか柔軟であることに注意してください。

さらに、私は米国出身なので、華氏を使用しているため、温度はすべて2桁であると安全に想定できます9 < t < 100

I / Oとルール

ここでのI / Oの例は、上記のチャートの例を示しています。

  • 入力は任意の合理的な形式で任意の便利な方法で取ることができます。たとえば、
    1)曜日、高温と低温、および4つの条件に数値を使用し、[0, 75, 57, 2], [1, 69, 53, 3], ...
    2 などの5つのタプルとして入力を取得できます['MON', 75, 57, 'CLOUDY'], ['TUE', 69, 53, 'RAINY'] ...
    。3)などの単語を使用して5つのタプルとして入力を取得できます最初の1日だけを入力し、高温のリスト、低温のリスト、1, [75, 69, ...], [57, 53, ...], [2, 3, ...]
    4)などの条件のリストを取得できます。

  • 文字が適切に整列している場合、先頭または末尾の改行またはその他の空白はオプションです。

  • 完全なプログラムまたは機能のいずれかが受け入れられます。関数の場合、出力する代わりに出力を返すことができます。
  • コンソールへの出力、文字列のリストとして返される、単一の文字列として返されるなど。
  • 標準的な抜け穴は禁止されています。
  • これはので、通常のゴルフルールがすべて適用され、最短のコード(バイト単位)が勝ちます。

11
°F using_ಠを使用する場合は-1
betseg

6
-1は、これが米国の私の州で機能しないようにするためです(今日は華氏9度です)。
魔法のタコ

@MagicOctopusUrnこの範囲外でも動作するプログラムも受け入れられると思います。
パエロエベルマン

回答:


5

絵文字コード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は文字列としての日、whlはそれぞれ、天気(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«

文字を超えるループ6231

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-雨。

2番目と3番目のリストは、それぞれ最高温度と最低温度を(文字列として)取得します。4番目のリストには何もしないでください-主に曜日を保存するためです。

オンラインで試す

注:-大量のバイトの削減にご協力いただいた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ます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.