NeverBlog::Likk::Unexistable;

見なかったことにして下さい

21万6000個のサイコロを簡単に振る方法

news.denfaminicogamer.jp

はてブコメントで

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