ユークリッドアルゴリズムが従来の音楽リズムを生成できることをご存知ですか?これと似ていますが、少し異なるアルゴリズムを説明することで、これがどのように機能するかを説明します。
正の整数n、ビートの総数、正の整数k、鳴らされるビートの数(ノート)を選択します。リズムはnビットのシーケンスと考えることができますk。ビットは1です。アルゴリズムの考え方は、1を0の間でできるだけ均等に分散することです。
たとえば、n = 8およびk = 5を使用すると、5つの1と3つの0から始まり、それぞれが独自のシーケンスになります。
[1] [1] [1] [1] [1] [0] [0] [0]
どの時点でも、2種類のシーケンスがあります。最初のシーケンスは「コア」シーケンスで、最後のシーケンスは「残りの」シーケンスです。ここで、コアは[1]s、残りは[0]sです。残りのシーケンスが複数ある限り、それらをコアに分散します。
[1 0] [1 0] [1 0] [1] [1]
コアは[1 0]で残りは[1]であり、再び配布します。
[1 0 1] [1 0 1] [1 0]
現在のコアは[1 0 1]、残りは[1 0]です。残りのシーケンスが1つしかないため、停止して文字列を取得します
10110110
これは、4回繰り返されたように聞こえます。
n = 16andを使用した別の例を次に示しk = 6ます。
[1] [1] [1] [1] [1] [1] [0] [0] [0] [0] [0] [0] [0] [0] [0] [0]
[1 0] [1 0] [1 0] [1 0] [1 0] [1 0] [0] [0] [0] [0]
[1 0 0] [1 0 0] [1 0 0] [1 0 0] [1 0] [1 0]
[1 0 0 1 0] [1 0 0 1 0] [1 0 0] [1 0 0]
[1 0 0 1 0 1 0 0] [1 0 0 1 0 1 0 0]
1001010010010100
最後のステップで、2つのコアシーケンスと残りのシーケンスなしで終了したことに注意してください。ここでは、2回繰り返されます。
入力
STDIN、コマンドラインなどから読み取る関数または完全なプログラムを書くことができます。入力は2つの正の整数nとk <= nになります。これらはどちらの順序でもかまいません。
出力
あなたの仕事は、生成されたリズムをn文字の長い文字列として出力することです。ノートと休符を表すために、2つの異なる印刷可能なASCII文字(0x20〜0x7E)を選択できます。
テストケース
以下のテストケースはx、音符を表すために使用し、.休符を表すためにを使用します。入力は次の順序nで与えられkます。
1 1 -> x
3 2 -> xx.
5 5 -> xxxxx
8 2 -> x...x...
8 5 -> x.xx.xx.
8 7 -> xxxxxxx.
10 1 -> x.........
11 5 -> x.x.x.x.x..
12 7 -> x.xx.x.xx.x.
16 6 -> x..x.x..x..x.x..
34 21 -> x.xx.x.xx.xx.x.xx.x.xx.xx.x.xx.x.x
42 13 -> x...x..x..x..x...x..x..x..x...x..x..x..x..
42 18 -> x..x.x.x..x.x.x..x.x.x..x.x.x..x.x.x..x.x.
得点
これはコードゴルフなので、最小バイトのコードが勝ちます。
q~\,f>。