パーフェクト・シャッフル
52枚のトランプの山を半分に分け、26枚ずつにする。この2つの山を1枚1枚互い違いに挟み込むようにシャッフルする。つまり、
1,2,3,4,5,6....26 27,28,29,30....52
という2つの山を
27,1,28,2,29,3....
というふうにシャッフルする。これをパーフェクト・シャッフルと呼ぶ。ふつうの人間がやると2、3枚重なってしまうかもしれないけど、訓練したマジシャンは、ある程度これができちゃうらしいことをYouTubeで発見して驚いた(8 Perfect Faro Shuffles)。
ともあれ、シャッフルするカードの枚数をnとすると、何度かパーフェクト・シャッフルすると、元の並びに必ず戻る。このとき、必要なシャッフルの回数はn回以下になる。
シャッフルの過程で現れるパターンが非常に面白い。 例えば10枚の場合、次のようになる。
% ./perfect.rb 10 [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [6, 1, 7, 2, 8, 3, 9, 4, 10, 5], [3, 6, 9, 1, 4, 7, 10, 2, 5, 8], [7, 3, 10, 6, 2, 9, 5, 1, 8, 4], [9, 7, 5, 3, 1, 10, 8, 6, 4, 2], [10, 9, 8, 7, 6, 5, 4, 3, 2, 1], [5, 10, 4, 9, 3, 8, 2, 7, 1, 6], [8, 5, 2, 10, 7, 4, 1, 9, 6, 3], [4, 8, 1, 5, 9, 2, 6, 10, 3, 7], [2, 4, 6, 8, 10, 1, 3, 5, 7, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]] It takes 10 perfect shuffles.
1に注目すると、その位置は1,2,4,8……と放物線のように動いていく。16は10を超えているのでぐるっと回ってその剰余。よくよく見ていると、編み込まれた毛糸のようなパターンが見て取れる。
8枚の場合、次のようになる。
% ./perfect.rb 8 [[1, 2, 3, 4, 5, 6, 7, 8], [5, 1, 6, 2, 7, 3, 8, 4], [7, 5, 3, 1, 8, 6, 4, 2], [8, 7, 6, 5, 4, 3, 2, 1], [4, 8, 3, 7, 2, 6, 1, 5], [2, 4, 6, 8, 1, 3, 5, 7], [1, 2, 3, 4, 5, 6, 7, 8]] It takes 6 perfect shuffles.
縦の列を見ると3と6の欄は交互に交代しているだけで、特定の数字が現れる列は決まっている。このようにグループ別に色をつけて、スカーフの柄にした人がいる。面白い。
n枚のカードを何回パーフェクト・シャッフルしたら元に戻るか、事前にそれをnから予測することはできないか、少なくともそのような計算式は知られていないという。まるで素数のようだ。あるいはパイこね変換。
というわけで、n < 5800について調べてみた。1万まで調べようと思ったけど、ずいぶん時間がかかったので、途中でプログラムの実行を止めてしまった。考えてみたら計算量のオーダーはO(n^2)だ。結果は以下の通り。傾きの異なる線が6、7本ほど見える。
#!/usr/bin/env ruby # # perfect shuffle # # [1,2,3,4,5,6] -> [1,2,3] , [4,5,6] -> [4,1,5,2,6,3] def perfect_shuffle(deck) if deck.size.odd? then raise("deck can't be perfect-shuffled.") end middle = deck.size / 2 fhalf = deck[0, middle] lhalf = deck[middle, deck.size] lhalf.zip(fhalf).flatten end n = ARGV.shift.to_i deck = (1..n).to_a patterns = [] patterns << deck while true new_deck = perfect_shuffle(patterns.last) patterns << new_deck if new_deck == deck then break end end require 'pp' pp patterns print "It takes #{patterns.size - 1} perfect shuffles.\n"