誰かがフィボナッチ数を使って本当に派手な時計を作りました。好きなように!これを作り直しましょう。
クロックは、1から始まる最初の5つのフィボナッチ数に対応する5つのセクションで構成されます(つまり、1、1、2、3、5)。
ccbeeeee
ccaeeeee
dddeeeee
dddeeeee
dddeeeee
時計は、5時間単位で12時間を表示できます。以下にその仕組みを示します。時間7:20を考慮してください。7時間目は、次のようにフィボナッチ数に分解できます。
7 = 2 + 5
5分の4単位もあります。4は次のように分解できます。
4 = 2 + 1 + 1
現在、時間は赤で、分単位のチャンクは緑で表示され、時間と分で数字が使用されている場合は青で表示されます。番号がまったく使用されない場合は、白のままです。したがって、上記は次のように表示されます。
BBGRRRRR
BBGRRRRR
WWWRRRRR
WWWRRRRR
WWWRRRRR
しかし、待ってください、まだあります。上記の分解だけが可能性ではありません。7 = 3 + 2 + 1 + 1
また4 = 3 + 1
、とを書くこともできます。
GGRWWWWW GGBWWWWW
GGBWWWWW GGRWWWWW
BBBWWWWW or BBBWWWWW
BBBWWWWW BBBWWWWW
BBBWWWWW BBBWWWWW
どちら1
が選択されるかによります。もちろん、他の組み合わせもあります。クロックは、すべての有効な分解からランダムに選択します。
私が言ったように...これはユーザビリティ賞を受賞しないかもしれませんが、それは確かに見て素晴らしいです。
チャレンジ
あなたの仕事は、そのようなクロックを実装することです。プログラム(または関数)は、上記のSTDOUTまたは最も近い代替のように、現在時刻のASCII表現(最後の5分の倍数に切り捨てられます)を出力する必要があります。入力として任意の一般的な形式で時間を読み取るか、標準ライブラリ関数を使用して取得することを選択できます。現在/指定された時間が5分で割り切れると想定しないでください。
ソリューションは、現在の時間の可能なすべての表現からランダムに選択する必要があります。つまり、各表現はゼロ以外の確率で印刷する必要があります。
真夜中と正午は0:00
(としてではなく12:00
)として扱われるべきです。
オプションで、単一の末尾改行文字を印刷できます。
の代わりに、任意の4つの異なる印刷可能なASCII文字(文字コード0x20〜0xFE)を使用できRGBW
ます。答えに選択肢を明記し、一貫して使用してください。
これはコードゴルフなので、最短の回答(バイト単位)が勝ちです。