##ショットガンシャッフルはカードを痛めるぜ!!!
カードを痛めることで広く知られている通称ショットガンシャッフル、
正式名称リフルシャッフルはN回目のシャッフルでシャッフル前の状態に戻るそうです。
何回で元に戻るのか検証してみましょう。
##52枚のトランプを痛める
それではやっていきましょう。
今回は52枚のトランプを使っていきます。
手順としては52枚のトランプを用意してショットガンシャッフルを行い、
元の状態に戻るまでシャッフルを続けて、その時のシャッフル回数を表示する方針となります。
元の状態に戻ったかどうかの判定ですが、頭のいい方法が思いつかない凡骨だったので
シャッフル前のデッキとシャッフルしているデッキ間の52枚全部についてそれぞれ繰り返しで比較しています。
無限ループに陥ってしまうと怖いので100回のシャッフルでループを抜けるようにしましたが、
結果それ以下の回数で試行が終了したのでコメントアウトしています。
ShotGunShuffle.py
import pandas as pd
vCards = []
for lSuits in ['H', 'S', 'C', 'D']:
vCards.extend(str(lNum) + lSuits for lNum in list(range(1, 14)))
vOriginDeck = pd.DataFrame({'card': vCards, 'sort': list(range(0, 52))}, index=list(range(0, 52)))
vDeck = vOriginDeck
vCountShuffle = 0
vIsDeckOrigin = False
while vIsDeckOrigin == False:
vCountShuffle += 1
for i in list(range(0, 52)):
if i < 26:
vDeck.iat[i, 1] = i*2
else:
vDeck.iat[i, 1] = (i-25)*2-1
vDeck = vDeck.sort_values('sort')
vDeck.reset_index(drop=True, inplace=True)
for i in list(range(0, 52)):
vDeck.iat[i, 1] = i
vIsDeckOrigin = True
for i in list(range(0, 52)):
if vOriginDeck.iat[i, 0] != vDeck.iat[i, 0]:
vIsDeckOrigin = False
# if vCountShuffle > 100:
# vIsDeckOrigin = True
print(vCountShuffle)
結果
8
####ショットガンシャッフルはN回やると元の状態に戻るぜ!(N=8)
おわり