ネタ元 → シャッフル → トランプのシャッフル
僕ならこうやる。
配列を用意する。ナカミは01~13を入れておく。
01 02 03 04 05 06 07 08 09 10 11 12 13|
縦棒'|'の左をシャッフル前、右をシャッフル後とする。
シャッフル前の要素の中からでたらめにひとつ選び、
シャッフル前の末尾要素と入れ替えて|を左にずらす。
たとえばでたらめに05を選んだなら:
01 02 03 04 13 06 07 08 09 10 11 12|05
同じこと、つまり:
シャッフル前の要素の中からでたらめにひとつ選び、
シャッフル前の末尾要素と入れ替えて|を左にずらす。
たとえばでたらめに10を選んだなら:
01 02 03 04 13 06 07 08 09 12 11|10 05
以下同文に繰り返し、| が左端に達したらシャッフル完了。
VB.NETで書いてみた。
Module ShuffleDemo
' x と y を交換する
Sub Swap(ByRef x As Integer, ByRef y As Integer)
Dim t As Integer = x
x = y
y = t
End Sub
' data() をかき混ぜる
Sub Shuffle(ByVal data As Integer())
Dim rnd As New Random()
For n As Integer = data.Length To 1 Step -1
' "n未満の乱数"番目 と "n-1"番目とを入れ替える
Swap(data(rnd.Next(n)), data(n - 1))
Next
End Sub
Sub Main()
Dim data(13) As Integer
' data() を 1, 2, 3, ... 13 で埋める
For i As Integer = 0 To data.Length - 1
data(i) = i + 1
Next
' シャッフルシャッフルぅ
Shuffle(data)
' 結果の確認
For Each item As Integer In data
Console.Write("{0} ", item)
Next
End Sub
End Module
簡単ぢゃーん♪