A1、A2、および A3 は B を知らずに A から計算されなければならず、同様に、B1、B2、および B3 は A を知らずに計算されなければならないという規定を追加します。
各 A1 i、A2 i、A3 iが [A i /3–2, A i /3+2] になければならないという要件は、A1、A2、および A3 の要素の合計がそれぞれおよそ 1 でなければならないことを意味します。 A の 3 番目です。規定により、これを完全に定義する必要があります。
任意の順序で配列を作成します (たとえば、要素 0 から最後の要素まで)。そうすることで、アレイがほぼバランスの取れた状態に保たれるようになります。
x を A の次に処理する要素とします。a を round(x/3) とします。x を説明するには、合計 3•a+r を配列 A1、A2、および A3 に追加する必要があります。ここで、r は –1、0、または +1 です。
d を sum(A1) – sum(A)/3 とします。合計はこれまでに処理された要素の合計です。要素が処理されていないため、最初は d はゼロです。設計上、各ステップで d が –2/3、0、または +2/3 になるようにします。
以下に示す 3 つの値をそれぞれ A1、A2、および A3 に追加します。
- r が –1 で d が –2/3 の場合、a+1、a–1、a–1 を追加します。これにより、d が +2/3 に変更されます。
- r が –1 で d が 0 の場合、a–1、a、a を追加します。これにより、d が –2/3 に変更されます。
- r が –1 で d が +2/3 の場合、a–1、a、a を追加します。これにより、d が 0 に変更されます。
- r が 0 の場合、a、a、a を追加します。これにより、d は変更されません。
- r が +1 で d が –2/3 の場合、a+1、a、a を追加します。これにより、d が 0 に変更されます。
- r が +1 で d が 0 の場合、a+1、a、a を追加します。これにより、d が +2/3 に変更されます。
- r が +1 で d が +2/3 の場合、a–1、a+1、a+1 を追加します。これにより、d が –2/3 に変更されます。
最後に、A1、A2、および A3 の合計は、3 を法とする A の合計によって一意に決定されます。A1 の合計は (sum(A3)–2)/3、sum(A3)/3、または (sum(A3)+2)/3 で、3 を法とする A の合計が –1、0 に合同であるかどうかに応じて決まります。 、または +1、それぞれ。
デモンストレーションの完了:
いずれの場合も、a–1、a、または a+1 が配列に追加されます。a は round(x/3) であるため、x/3 との差は 1 未満です。したがって、a–1、a、および a+1 はそれぞれ x/3 との差が 2 未満であり、値がなければならないという制約を満たします。 [A i /3–2, A i /3+2] にある。
上記の A1、A2、A3 と同様に B1、B2、B3 を用意すると、B3 の和で求められます。A の合計は B の合計に等しいため、A1、A2、および A3 の合計は、それぞれ B1、B2、および B3 の合計に等しくなります。