なでしこさんで宝くじ風番号ジェネレータ
昨日はバレンタインデーなので、バレンタインジャンボ宝くじを買った。
バレンタインジャンボとバレンタインジャンボミニを10枚ずつ買った。
6,000円請求された。
ここでふと我に返った。
高い。
6,000円あったら、あまつ (アイドルマスターTOURS) が10回できる。(1回 = 通常プレイと追加購入4枚で600円とする)
𠮷野家でちょっと贅沢 (税込1,000円) を6食できる。
2,000円のアクリルスタンドが3体買える。(1,500円なら4体、1,000円なら6体)
そんな大金を、ほぼ当たらない紙切れに費やすのは合理性を欠く。(そこ、キャラクターが書かれた紙やアクリルの板に費やすのも合理性を欠くとか言わないの……)
というわけで、自分がなぜ宝くじを買うのかを考えてみた。
一つは、絵がいいから。
猫が描かれているもの (わんにゃんスクラッチの一部)
着物姿の人が描かれているもの (初夢宝くじ)
その他、気に入ったもの
を買うのは、自分にとって少なくともキャラクターグッズを買うのと同程度の合理性があるだろう。
そしてもう一つは、手元の宝くじの番号が当せん番号一覧にあるかをチェックするときドキドキして楽しいこと。
こちらは……よく考えたら、どうせほとんど当たらないんだし、わざわざ買わなくても自分で適当な番号を用意してチェックすればいいのでは?
というわけで、適当な番号を用意するプログラムを作ってみた。
連番だと、下一桁以外が同じなので、1回チェックするだけで全部ハズレだとわかってしまい、チェックがすぐに終わってしまうので、つまらない。
よって、基本的にバラしか買わないようにしようと思うし、今回のプログラムもバラ専用とする。
連番は前後賞が狙える?でもどうせ当たらないじゃん……
今回やったこと
なでしこで、宝くじの仕様に沿った番号を10枚分セットで作る。
宝くじユニットとは|サマージャンボ宝くじ2025
によると、宝くじの番号は
01~100組
100000番~199999番
の組み合わせのようである。
よって、今回のプログラムでもこの仕様を採用する。
たとえば第1082回全国自治宝くじ(年末ジャンボ宝くじ)宝くじ 最新回号 | みずほ銀行では100組を超える組が当せんとなっているが……見なかったことにしよう。
バラ10枚セットを想定するので、番号の下1桁は0~9を順番に出し、それ以外の部分は1枚ずつランダムとする。
同じ番号を複数回出さないようにする制御はしない。同じ組と番号が出たら、ユニット違いだと思ってもらう。
プログラム
宝くじ風番号ジェネレータ (プログラム貯蔵庫)
ポイント
ランダムな整数を取得する関数を用意する
●(Mの)ランダム数とは
定数のRパターン数は65536×65536。
定数の閾値はRパターン数をMで割った余り。
永遠に繰り返す
定数のRは4のランダム配列生成。
定数のランダム値は(R@0)+(R@1)×256+(R@2)×65536+(R@3)×16777216。
もし、ランダム値が閾値以上ならば
ランダム値をMで割った余りを戻す。
ここまで。
ここまで。
ここまで。「ランダム配列生成」を用いて、0以上指定した整数未満のランダムな整数を得る関数を用意する。
これにより、同様の機能を持つ標準関数の「乱数」よりも高品質な乱数を得ることを期待する。
まず、「ランダム配列生成」で生成するパターン数を指定した整数で割ることで、パターン数を均等に分けようとしたときに何パターン余るかを求める。
次に、「ランダム配列生成」で4バイトの乱数を生成し、それを1個の整数にする。
得られた整数が計算した余りパターン数以下の場合は、各結果に対応するパターン数を均等にするため、捨てて乱数を生成しなおす。
そうでなければ、それを指定した整数で割った余りを返す。
UIを用意する
結果エリアは「DIV」のDOM部品作成。
生成ボタンは「バラ10枚 ¥0」のボタン作成。
結果エリアにDOM親要素設定。UIを用意する。
今回は、生成結果を入れるエリアと、生成を行うボタンだけからなるシンプルなものである。
生成を行う
生成ボタンをクリックした時には
末尾とは変数。
末尾で0から9まで繰り返す
定数の組番号は1000000のランダム数。
組番号を10000で割って切り捨てして1を足す。
定数の組はそれ。
定数の番号は組番号を10000で割った余り。
「{組を2でゼロ埋め}組 1{番号を4でゼロ埋め}{末尾}」のラベル作成。
改行作成。
ここまで。
改行作成。
ここまで。用意した「ランダム数」関数で0~999999のランダムな数を取得し、それを組と番号に分ける。
番号は、最上位は1で固定、最下位は0~9を順番に出すので、残りの4桁をランダムに生成する。
組は、0~99のランダムな数に1を足すことで、1~100にする。
最後に、「ゼロ埋」と文字列への変数の埋め込みで整形し、「ラベル作成」で出力する。
おわりに
あまつ (アイドルマスターTOURS) では、1,200円 (プレイ代込み) で10枚のカードを入手でき、多くの宝くじより安い。
スクラッチくじと違い、削る手間もなくその場でハズレかどうかがわかる。
いいカードが当たったら、買取に出すことでお金にも替えられる?
宝くじを買うより、あまつをしよう! (提案)


コメント