周期的に自己記述的なリストを数える


19

周期的に自己記述的なリスト

次の条件が当てはまる場合、正の整数のリストL周期的に自己記述的です。

  1. Lは空ではありません。
  2. Lの最初と最後の要素は異なります。
  3. Lを等しい要素の実行に分割すると、各実行の要素は次の実行の長さに等しく、最後の実行の要素は最初の実行の長さに等しくなります。

例えば、検討L=[1,1,1,2,3,3,1,1,1,3]。空ではなく、最初と最後の要素が異なります。私たちが実行にそれを破るとき、私たちが得る[[1,1,1],[2],[3,3],[1,1,1],[3]]

  • 最初の実行は1秒の実行であり、次の実行の長さ[2]1です。
  • 第二のランは、実行される2 S、及び次のランの長さ、[3,3]、である2
  • 3回目は、実行される3 S、および次のランの長さは、[1,1,1]である3
  • 4番目の実行は1秒の実行で、次の実行の長さ[3]1です。
  • 最後に、最後の実行は、実行される3 S、および最初のランの長さは、[1,1,1]であり、3

これは、Lが周期的に自己記述リストであることを意味します。

非例えば、リスト[3,2,2,2,1,4,1,1,1]の実行以降、周期的自己記述型でない2 Sは長さのランが続いている1。リスト[2,2,4,4,3,3,3,3]最後の実行はの実行されるので、また、周期的自己記述ない3 Sが、最初のランの長さを有しています2

タスク

この課題では、あなたの入力は整数n1。出力は、合計がn等しい周期的自己記述リストの数になります。例えば、n=8もたらすべき4、周期的にので、その合計である自己記述リスト8である[1,1,1,1,4][1,1,2,1,1,2][2,1,1,2,1,1]及び[4,1,1,1,1]。最小のバイト数が優先され、他の標準的な規則が適用されます。

ここからの入力の正しい出力値である150

1 -> 0
2 -> 0
3 -> 0
4 -> 2
5 -> 0
6 -> 2
7 -> 0
8 -> 4
9 -> 0
10 -> 6
11 -> 6
12 -> 12
13 -> 0
14 -> 22
15 -> 10
16 -> 32
17 -> 16
18 -> 56
19 -> 30
20 -> 96
21 -> 56
22 -> 158
23 -> 112
24 -> 282
25 -> 198
26 -> 464
27 -> 364
28 -> 814
29 -> 644
30 -> 1382
31 -> 1192
32 -> 2368
33 -> 2080
34 -> 4078
35 -> 3844
36 -> 7036
37 -> 6694
38 -> 12136
39 -> 12070
40 -> 20940
41 -> 21362
42 -> 36278
43 -> 37892
44 -> 62634
45 -> 67154
46 -> 108678
47 -> 118866
48 -> 188280
49 -> 209784
50 -> 326878

4
予想外のひねり!説明の途中で、リストがCSDであるかどうかを判断するだけの面白くないタスクを期待していました。称賛。
スパー

定義に最初と最後の要素が同じリストが含まれておらず、リストが実際には明確な開始/終了のないサイクルである場合と同じように、同じグループとしてカウントされるのは少し残念です。
スパー

これはコードゴルフですので、リストが周期的に自己記述的であるかどうかを判断することはより興味深いと思います(ソリューションをより速く実行する)-すべてのリストとカウントを生成する以外の方法がない場合
user202729

多項式時間アルゴリズムがありますが、プログラムするのは非常に難しく、すべての可能なリストを生成および検証するソリューションほどゴルフではありません。
user202729

2
2を除くn,1,...,1すべての偶数はとして取得でき、13を超えるすべての奇数は偶数に連結3,2,2,2,1,1することで取得できます。13が不可能であることの証拠は、読者の練習問題として残されています。
ニトロドン

回答:



1

ゼリー、18バイト

ṗⱮ¹Ẏ;ḷ/$€IẠ$Ƈ×Ɲ€§ċ

オンラインでお試しください!

アイデア:各周期的自己記述リストは、各ブロックの値のリストとして説明でき、値から長さを推測できます。隣接する2つの値は異なる必要があることに注意してください。もちろん、最大でnブロックがあり、各ブロックの長さは最大nです。


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