どうも!LSSです!!
今回は、Try Kotlinを使って
「昔、ポケコンBASICをいじってた頃にやった過ちを再現」
してみます。
えーと、それはトランプゲームのようなカードゲームを作ろうとした時に、やらかした過ちです。
たいていのトランプゲームはまず、カードをシャッフルしますよね。
それをプログラミングで再現しようとしたのです。
↑の画面のようなものを作りました。
コードは、
import kotlin.random.Random
var cards="0123456789012345678901234567890123456789"
var r=0
fun main(args: Array<String>) {
for(i in 0..9999){
r=Random.nextInt(39)+1
cards=cards.substring(r)+cards.substring(0,r)
}
print(cards)
}
という感じですね。
まずcardsという文字列変数に1文字=1枚に見立てたカードを設定します。
この場合、0~9までのカードを4組、合計40枚のカードという事になります。
そして、
for(i in 0..9999){
で、1万回ループを回します。
1万回シャッフルするイメージですね。
※ポケコンの時は処理速度が遅いので、1万回よりは少ない回数だったと思いますが^^;
そのループの中で、
r=Random.nextInt(39)+1
にてランダムに何文字めか(=何枚めか)を決め、
cards=cards.substring(r)+cards.substring(0,r)
で「〇枚目までのカードと〇枚目以降のカードを入れ替える」という処理をシミュレーションしているわけです。
トランプで言うと、
「積み重ねたカードを適当な位置で2つに分けて(カット)、上下を入れ替える」
という作業に相当します。
…さて、それを1万回もやれば、さぞ、ぐちゃぐちゃに混ざるであろう…と期待していたのですが…!!
2345678901234567890123456789012345678901
…結果としては↑こんな感じになります。
えーと…?
1文字目は確かに変わっているけど、0123456789という順番はそのままで、何度試してもお行儀よく順番に並んでいますね^^;;;;;;
「なんでだ!?ループが正常にループしないで1回だけで終了しているのか!?」
と、当時のLSSは悩んだものでしたw
トランプを手元にお持ちの方は、お試しいただくと分かる事ですが…
「適当な位置でカットし、上下を入れ替える」という作業は何回、何万回繰り返しても、中のカードの順番は変わりません!!
その作業をシミュレーションする、という意味ではプログラムは完璧でした。
完璧ゆえに、現実と同様に「全く順番が変わらない」という状況をも再現してしまったんですねーw
いやー、悩んだ悩んだwww
気づいた時には自分の間抜けっぷりにビックリしましたねw
ですが、更に後には「これを応用したトランプの手品がある」と知り、
「ああ、自分は偶然に手品のタネを見つけてしまっていたのだなぁ」
と思いました^^