循環差分セットは、一意のプロパティを持つ正の整数のセットです。
- ましょう
n
セットで最大の整数になります。 - Let
r
は、0より大きく、以下の任意の整数(セット内にある必要はありません)n/2
です。 - してみましょう
k
ことが解決策の数にとセットの任意のメンバーです。各ソリューションは順序ペアです。(また、多くの言語での実装とは異なり、このバージョンのモジュロは、追加することで負の数を正にすることに注意してください。)(b - a) % n = r
a
b
(a,b)
n
- 最後に、これが循環差分セットである場合にのみ、の値はの
k
選択に依存しませんr
。つまり、すべての値はr
、上記の一致に対して同じ数の解を与えます。
これは、次の例で説明できます。
Cyclic difference set: {4,5,6,8,9,11}
0 < r <= 11/2, so r = 1,2,3,4,5
r=1: (4,5) (5,6) (8,9)
r=2: (4,6) (6,8) (9,11)
r=3: (5,8) (6,9) (8,11)
r=4: (4,8) (5,9) (11,4) since (4-11)%11=(-7)%11=4
r=5: (4,9) (6,11) (11,5)
の各値にr
は同じ数の解(この場合は3)があるため、これは循環差分セットです。
入力
入力は正の整数のリストになります。これは設定プロパティであるため、入力はソートされていないと想定します。n
少なくとも2
であると仮定できますが、k
ゼロでもかまいません。
出力
プログラム/関数は、セットが循環差分セットの場合は真偽値を出力し、そうでない場合は偽値を出力する必要があります。
テストケース
有効な循環差分セット:
10,12,17,18,21
7,5,4
57,1,5,7,17,35,38,49
1,24,35,38,40,53,86,108,114,118,135,144,185,210,254,266,273
16,3,19,4,8,10,15,5,6
8,23,11,12,15,2,3,5,7,17,1
(データソース、ただし慣例は異なります)
無効な循環差分セット:
1,2,3,4,20
57,3,5,7,17,35,38,49
3,4,5,9
14,10,8
@EriktheOutgolfer if
—
PhiNotPi
b
とis a
が同じ数である場合、、(b-a)%n = 0
しかし0は解決策を探している値の1つではありません。したがって、同じ番号であることを明示的に禁止することはありませんが、禁止されることはありません。
7 7 7
入力が無効だった場合、私は本当にそれを好むでしょう。セットが値を繰り返さない
@TonHospel完了しました。
—
PhiNotPi
7 7 7
は別のユーザーからリクエストされましたが、セットではないため削除しました。
アイデアをゴルフ:バインドに私たちが必要としない
—
ジョンファンミン
r
で0 < r <= max(input)/2
、その代わりに0 < r < max(input)
我々は得ることができますのでr > max(input)/2
、単純に引き算をひっくり返すことにより、ケースをr <= max(input)/2
例。
a
し、b
(必ずしも同じメンバーですかa ≠ b
)?