バックグラウンド
ダヴェンポート-Schinzel配列は、 2つの正の整数パラメータを有しているd
とn
。によって、指定されDS(d,n)
たパラメータのすべてのDavenport-Schinzelシーケンスのセットを示します。
自然数の全てのシーケンスを考えてみましょう1
にn
満足している、包括的、:
- シーケンス内の連続する2つの番号は同一ではありません。
- より大きい長さのサブシーケンス(連続している必要はありません)はありません
d
。
L
このようなシーケンスの最大長を指定してみましょう(d
とn
)。次に、DS(d,n)
長さを持つそのようなすべてのシーケンスのセットですL
。
いくつかの例が役立つかもしれません。ましょうd = 4
、n = 3
。これらの制約のある最長のシーケンスには、がありL = 8
ます。したがって、以下はのメンバーですDS(4,3)
:
[1, 2, 1, 3, 1, 3, 2, 3]
連続する同一の番号はなく、lengthの交互のサブシーケンスがあります4
が、より長いサブシーケンスはありません。
1 2 1 2
1 2 1 2
1 3 1 3
1 3 1 3
2 3 2 3
2 3 2 3
1 3 1 3
1 3 1 3
以下の例がありませんでDS(4,3)
。
[1, 2, 2, 3, 1, 3, 2, 3] # Two consecutive 2's.
[1, 2, 1, 3, 1, 3, 2, 1] # Contains alternating subsequences of length 5.
[1, 2, 1, 3, 1, 3, 2] # Longer valid sequences for d = 4, n = 3 exist.
詳細については、MathWorldとOEIS、およびそれらがリストするリファレンスを参照してください。
チャレンジ
2つの正の整数とが与えられた場合、n
でd
Davenport-Schinzelシーケンスを生成しDS(d,n)
ます。これらは一般的に一意ではないため、有効な結果が1つでも出力されることに注意してください。
プログラムまたは関数を作成し、STDIN(または最も近い代替)、コマンドライン引数または関数引数を介して入力を取得し、関数から結果を返すか、STDOUT(または最も近い代替)に結果を出力できます。
出力には、便利で明確な文字列またはリスト形式を使用できます。
これはコードゴルフなので、最短の提出(バイト単位)が勝ちです。
シーケンス長
シーケンスは一意ではないため、この課題では個々の例の使用はあまりありません。ただし、2つの一般的な有効性の問題は、出力を確認するのが非常に簡単であるため、主な問題は、シーケンスの長さが正しいか(または有効なシーケンスがより長いか)だけです。したがって、ここでの既知のリストである1が L
与えられたためd
とn
:
\
d\n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
\-----------------------------------------------------------
1 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
3 | 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39
4 | 1 4 8 12 17 22 27 32 37 42 47 53 58 64 69 75 81 86 92 98
5 | 1 5 10 16 22 29 ...
6 | 1 6 14 23 34 ...
7 | 1 7 16 28 41 ...
8 | 1 8 20 35 53 ...
9 | 1 9 22 40 61 ...
10 | 1 10 26 47 73 ...
この表の情報を提出物にハードコードしてはいけません。
1この表は1994年のものであるため、それ以降はさらに進歩している可能性がありますが、提出物が妥当な時間内にこの表のさらに大きなエントリを処理できるとは思えません。