せっかくプログラムが書けるなら、統計的な手法でギャンブルをしてみようと思ったことはありませんか?
今でこそ AI の時代ですが、AI を使ったからと言って勝てるものではありません。
もちろん AI の力を借りれば、競馬や競輪の的中率を上げることはできるかもしれません。でも、これらのギャンブルはオッズとの駆け引きですからね。
ということで、シンプルな抽選方式である「ナンバーズ」と「ロト」を乱数で当てようという無謀な試み。
得意な言語を使って、サクっと乱数プログラムを書いて大儲けしちゃいましょう。
仕事が楽しくなくなると、現実逃避したくなっちゃいますよね・・・。
ナンバーズ4
0 から 9 までの数字のなかから 4 つ選び宝くじで、数字の重複もあります。
でも今回は面倒だし、バラバラが良かったのでそんなのお構いなしで、出た数字の多い順で決定します。
変にロジックをこだわったところで当たるわけでもないし、実際に AI がバシバシ的中させてるって聞いたことないでしょ。
少し前に、VUMA という競馬の AI サービスが始まりましたが、あれも母数が増えてくると厳しくなるのではと思っています。
さて、ロジックです。
億万長者の記念にループ回数は 1 億回です。
ナンバーズじゃ、億万長者にはなれないけど・・・。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php define('START', 0); define('END', 9); define('ROOP', 100000000); $win = []; for ($i = START; $i <= END; $i++) { $win[$i] = 0; } $w = 0; while ($w < ROOP) { $r = mt_rand(START, END); $win[$r]++; $w++; } arsort($win); print_r($win); |
ひどいね、ファイル名が takara.php って時点で病んでる・・・。
$ php takara.php
Array
(
[[1]] => 10002957
[[2]] => 10001687
[6] => 10001508
[7] => 10000719
[8] => 10000527
[9] => 9999696
[[4]] => 9999306
[0] => 9998386
[5] => 9997957
[[3]] => 9997257
)
これの上位 4 つの数値を順に書いて、セットで購入します。
上記の場合は [[1]] [[2]] [6] [7] の順番ですね。
1267 だともちろんですが、7621 でもボックスが 100 円分的中となります。
せっかくなので、責任を持って 10 セット(200円×10で2000円)購入しました。
上の買い目は買ってないのであしからず。では、グッドラック♪

ロト7
金曜は「ロト7」の日だったので、1 口 300 円とナンバーズの 1.5 倍の料金です。
開始と終了の定数を変更して実行するだけです。
手抜きもいいところ・・・。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php define('START', 1); define('END', 37); define('ROOP', 100000000); $win = []; for ($i = START; $i <= END; $i++) { $win[$i] = 0; } $w = 0; while ($w < ROOP) { $r = mt_rand(START, END); $win[$r]++; $w++; } arsort($win); print_r($win); |
この場合、結果は [33] [7] [6] [31] [21] [8] [9] ですね。
$ php takara.php
Array
(
[33] => 2705526
[7] => 2705399
[6] => 2704888
[31] => 2704504
[21] => 2704217
[8] => 2704209
[9] => 2704162
[29] => 2704051
[[3]] => 2704024
[28] => 2703623
(以下省略)
こちらも上記の買い目は購入していませんが、責任を持って 5 セット買いました。

結果報告
別に PHP に限った話ではないですが、どの言語でもこんなものは 1 分程度で作成できます。
ぶっちゃけ、こんなプログラム書いても一銭にもなりません。むしろ購入代金でマイナスになります。
でも 7 億円になる可能性は秘めています。いや、キャリーオーバーしてないし、同じ当選者の数次第か。
そもそも宝くじの控除率って 50% なので、割に合わないギャンブルなんですよね。
でも、たまには気分転換もいいじゃないですか。
見事的中したら、何かのクラウドファンディングに援助したいと思います。
toto はさすがに興味がないな・・・。
2019年06月29日の結果
試しに購入した結果、「ロト7」が 1 個当たりました!!
投資が合計 3,500 円で配当が 900 円なのでマイナスですね(笑)
まあ、ロト7 の 6 等でも当たるだけすごいことなのですが。

2019年08月01日の結果
サマージャンボ宝くじのシーズンだからか、最近は各ニュースポータルサイトで宝くじを買わせようとする誘導記事が多い気がします。
これは宝くじを売る側の広告出稿なんですかねぇ。
昔に比べると、ジャンボ宝くじも売り上げが悪くなっているから大変なのかな?
まあ、宝くじの控除率は 50% くらいですから、期待値がかなり低いということが世間に知れ渡ってしまったのでしょう。
そんなことを疑いながらも、見事に宝くじ購入に誘惑されてしまったので、前回失敗したナンバーズのダブりを回避して再チャレンジしてみました。
ロジックは以下のように改変しましたが、それでも場当たり的なコード。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <?php define('START', 0); define('END', 9); define('ROOP', 100000000); if (!isset($argv[1]) || !preg_match('/[234]/', $argv[1])) { echo "usage: php numbers.php [234]" . PHP_EOL; exit; } $digit = $argv[1]; $result = []; while (count($result) < $digit) { $win = []; for ($i = START; $i <= END; $i++) { $win[$i] = 0; } $w = 0; while ($w < ROOP) { $r = mt_rand(START, END); $win[$r]++; $w++; } arsort($win); $result[] = array_keys($win)[0]; } echo implode($result) . PHP_EOL; |
そして、見事に「ナンバーズ4」のセットボックスが当たってしまうという運の良さ(笑)
「ロト6」含めて 800 円の投資で 19,800 円返ってきました。
まあ、所詮は単純なランダム抽選ですからね。EC2 インスタンスの乱数に感謝です。

2019年08月02日の結果
ということで、調子に乗って翌日も買ってみました。こうやって負けていくんだろうな。
グッドラック!!

はい案の定、大外れでした(笑)
2019年08月15日の結果
本日は台風の影響を考慮して、自宅からリモート作業になったので仕事開始前に再挑戦。
無理して会社に行かず、リモート作業にしたり、休暇を取ったり、遅刻・早退なども企業側から勧めるような時代になりましたね。
電車が止まっていても会社に来いという時代はなくなったようです。
さて、前回はナンバーズの買い目を算出する際に 1 桁ずつ乱数で狙っていました。
しかし、これはナンセンスだなっと思ったので、指定の桁数の中で一気に乱数発生させようと改良しました。
そのロジックがこれ。相変わらず即席のダメロジックです。都合に合わせて無理やり仕様変更するソース(笑)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <?php define('START', 0); define('ROOP', 100000000); if (!isset($argv[1]) || !preg_match('/[234]/', $argv[1])) { echo "usage: php numbers.php [234]" . PHP_EOL; exit; } $digit = $argv[1]; $max = pow(10, $digit); $result = 0; $win = []; for ($i = START; $i < $max; $i++) { $win[$i] = 0; } $w = 0; while ($w < ROOP) { $r = mt_rand(START, $max - 1); $win[$r]++; $w++; } arsort($win); $result = array_keys($win)[0]; echo sprintf('%0' . $digit . 'd', $result) . PHP_EOL; |
まあ、期待せずに見守りましょう。

あっ、タイトルの通り億番長者なので、ロトも買っておかないとダメですね。
ロトの現状のソースはこちら。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <?php if (!isset($argv[1]) || !preg_match('/[567]/', $argv[1])) { echo "usage: php numbers.php [567]" . PHP_EOL; exit; } $digit = $argv[1]; $roto_list = [ 5 => 31, 6 => 43, 7 => 37, ]; define('START', 1); define('END', $roto_list[$digit]); define('ROOP', 100000000); $win = []; for ($i = START; $i <= END; $i++) { $win[$i] = 0; } $w = 0; while ($w < ROOP) { $r = mt_rand(START, END); $win[$r]++; $w++; } arsort($win); $j = 0; foreach ($win as $key => $val) { echo $key . PHP_EOL; $j++; if ($j >= $digit) { break; } } |