21万6000個のサイコロを簡単に振る方法
はてブコメントで
216000D6とか一度でいいから振ってみたい
悲しいことにGoogle先生は99個までしか振ってくれない。
と有りました。気持ちはわかる。 さすがに現実に振ること叶わなくても簡単に多数のダイスを振る方法を一つ思い出した。
Perl のモジュールには 「Games」という名前が付けられていてモジュールがが数多く有り、その名の通りゲームに関連したモジュールが登録されています。
そのうちの一つに、その名の通り Games::Dice
というモジュールがあります。これを使って 216000個のダイスを降ってみましょう。
cpanm が入ってれば cpanm Games::Dice
で簡単に入ります
$ cpanm Games::Dice --> Working on Games::Dice Fetching http://www.cpan.org/authors/id/R/RJ/RJBS/Games-Dice-0.045.tar.gz ... OK Configuring Games-Dice-0.045 ... OK Building and testing Games-Dice-0.045 ... OK Successfully installed Games-Dice-0.045 1 distribution installed
あとはワンライナーでいけます
$ perl -MGames::Dice -E 'say Games::Dice::roll(q{216000D6})' 755615
一回試したときの出目は755615
ダイスロールの表記 nDm
のルールを知っていれば個数、面数幾らでも変更できます。 nがダイスを振る個数、mが一個あたりのダイスの面数(最大値)になります。 21面ダイスのように現実ではそうそう手に入らないダイスでも振ることができます。
合計値ではなく、各ダイスの出目を知りたいときは roll_array
メソッドを使いましょう。さすがに 216000個の出目を記事に並べる気はしないので各自試してみてください。
わざわざモジュールインストールしなくても perl -E '$c += int(rand(6))+1 for (1..216000); say $c'
で一発だし、何ならPerlじゃなくてもいいんだけどね。
Let's enjoy perl