1. 概要
サイトスワップの接続パターンとは、あるサイトスワップから別のサイトスワップへ移行するためのパターンのことです。サイトスワップを切り替える際、ボールの着地タイミングが正しく接続されていないと、衝突や空白が生じてしまいます。 このガイドでは、接続パターンを計算する手順を解説します。
例えば、3ボールカスケード(333...)から3ボールシャワー(515151...)へ移行する際、いきなり切り替えることはできません。 移行するためには、333→4→515151→2→333のように接続パターン(今回の場合「4」と「2」が接続パターン)を間に挟む必要があります。
実際の接続パターンは、接続パターン計算ツールで自動的に算出することができます。
計算のロジックは GitHub (siteswapLab.js) から確認できます。
2. 基本的な考え方
接続パターンの計算には、「状態(state)」という概念を使用します。
ある時点で、どの拍にボールが着地(キャッチ)する予定かを示す情報です。 例えば、3ボールカスケードの状態は {0,1,2} と表されます。
この状態は、0拍後に1つ、1拍後に1つ、2拍後に1つ手に落ちてくるという意味になります。
例えば、サイトスワップ「3」(3ボールカスケード)の状態は{0,1,2} ですが、サイトスワップ「51」(3ボールシャワー)の状態は {0,1,3} であり、状態が異なります。このとき、サイトスワップ「51」では3拍後にボールが手に落ちてきてほしいが、サイトスワップ「3」では2拍後にボールが手に落ちてくる予定のため、1拍早くボールが落ちてきてしまうということになります。
このように、サイトスワップごとに特有の「状態」があり、状態が一致しないパターンへはそのまま移行することができません。
そのため、「3」のあとに「4」を投げることによって、状態を{0,1,3}に変更し、接続を可能にすることができます。(つまり、3拍後にボールが落ちてくるようになる)
3. 計算手順【簡易版】
計算手順【簡易版】では、マルチを含まないアシンクロサイトスワップのみを対象とします。マルチサイトスワップやシンクロサイトスワップは、計算手順【完全版】で計算できます。
初期パターン「744」
と
目標パターン「915」
の接続計算を説明します。
最大数値分だけ逆順にして並べる
同様に、
「915」を逆順に並べるので、5→1→9→5→…のように並べます。「915」の最大数値は「9」なので、「5,1,9,5,1,9,5,1,9」となります。
求めた数列から昇順の連続整数「1,2,...,n」を引く
「4,4,7,4,4,7,4」-「1,2,3,4,5,6,7」= 「3,2,4,0,-1,1,-3」
同様に、
「5,1,9,5,1,9,5,1,9」-「1,2,3,4,5,6,7,8,9」=「4,-1,6,1,-4,3,-2,-7,0」
求めた数列から負の数を除去し、昇順に並べる
同様に、
「4,-1,6,1,-4,3,-2,-7,0」→「0,1,3,4,6」
これで、
「744」の状態は{0,1,2,3,4}、
「915」の状態は{0,1,3,4,6}
と求まりました。
初期パターンの現在の状態(集合)に対して、すべての要素から1を引く
目標パターンの現在の状態(集合)に対して、-iを追加する(※iはループ回数)
⑥から⑤に戻ってきた場合は、-2、さらに戻ってきた場合は-3を追加します。
④で求めた集合が⑤で求めた集合の部分集合になるまで④と⑤の操作を繰り返す
④と⑤の適用結果、{-2,-1,0,1,2}と{-2,-1,0,1,3,4,6}となります。
{-2,-1,0,1,2}は{-2,-1,0,1,3,4,6}の部分集合ではないため、再度④と⑤を適用します。
④と⑤の適用結果、{-3,-2,-1,0,1}と{-3,-2,-1,0,1,3,4,6}となります。
{-3,-2,-1,0,1}は{-3,-2,-1,0,1,3,4,6}の部分集合であるため、終了します。
【計算の流れ】③→④→⑤→部分集合判定(失敗)→④→⑤→部分集合判定(失敗)→④→⑤→部分集合判定(成功)→⑦
求めた集合から差集合を求める
つまり、{3,4,6}となります。
求めた集合を昇順に並べ、降順の連続整数[n, n-1, ..., 1]を足す
結果は「6,6,7」となります。
【完成】10以上はアルファベットに変換後、結合して完成
これで、接続パターン「667」が求まりました。
初期パターン「744」→接続パターン「667」→目標パターン「915」
【他の接続パターンの求め方】⑦で求めた集合を自由に並び替え、降順の連続整数[n, n-1, ..., 1]を足す(このとき負の数があればその並び替えでは不可能)
結果は「9,5,5」となります。計算結果に負の数が存在しないため、この並び替えは有効です。
今回の場合、{3,4,6}に負の数が存在しないため、どのように並び替えても計算結果はすべて正となり、すべて有効な接続パターンとなります。
つまり3!=6通りの接続パターンが存在します。(接続パターン3周期におけるすべてのパターンです)。
その他の周期の接続パターンを求める場合、⑥での部分集合判定において成功しても終了せずもう一度部分集合となるまで繰り返すことで3周期以上の接続パターンを求めることができます。
これで、接続パターン「955」が求まりました。
初期パターン「744」→接続パターン「955」→目標パターン「915」
4. 計算手順【完全版】
完全版では、マルチを含むサイトスワップやシンクサイトスワップにも対応した計算手順を解説します。
シンクロ⇔アシンクロのような接続は一般的なサイトスワップ表記では表すことができないため、ここでは扱いません。
近日中に公開予定です。しばらくお待ちください。
GitHub (siteswapLab.js)にてロジックは公開しておりますので、そちらを見ていただければ手順を理解できるかもしれません...
5. 計算手順の意味
以下では、厳密な定理としての証明ではなく、このような計算手順によって接続が計算できる理由を、私なりの解釈で説明します。
近日中に公開予定です。しばらくお待ちください。