宝くじを当てよう、というと語弊があるので少し修正すれば、ROTO6を勉強してプログラミングで当選確率を上げよう、という企画です。
前にも書いたように、プログラムは目標を達成するための道具です。
目標に向かって、必要なことから勉強していくのが私のやり方。
金銭欲、性欲、睡眠の三大欲(違ったかな)の達成のためにプログラムを勉強する。
勉強する意欲がわくでしょう。
少なくとも、サイコロで選ぶのではなく、自分の考えた理屈で番号を選べば外れたにしても納得がいくし、別の考え方を模索する。
1~43の組み合わせ
ロト6は、1~43の数字から6個を小さい順に選ぶくじなので、その組み合わせは・・・とてつもない組み合わせになります。
ただ、この6個の数字になにか法則はないだろうか、まずそれから探していきたい。
当然、1~43の数字のなかから一つの数字が選ばれる確率は1/43になる。
今現在抽選回数は1400回弱なので、1つの数字が出現する回数は1400*6/43=195回、過去のデータを調べて回数が少ない数字はこれから出てくる可能性は大きい。
また、調べた結果1~6の当選組み合わせは、この1400回弱のなかで一度も重複していない。
1桁~6桁それぞれの桁で出現する可能性のある数字はある確率で予想できる。
つまり、1,2,3,4,5,6という組み合わせや38,39,40,41,42,43という組み合わせは非常に確率が低い。
これ以外にも過去のデータから出現する傾向というものが得られるかもしれない。
これは、データ数が多いこともあり、プログラムに持ってこい、ということになる。
プログラムの前に
過去の当選番号のデータはこれからあたり番号を類推する上で重要なデータである。
そのデータは宝くじ公式サイトで発表されている。
しかし、それをいちいち拾って整理するのは煩雑であり、私の方でそれらを整理してCSVファイルの保存しているので、連絡をいただければお送りできる。
信憑性は保証できないが・・・
では、プログラミング その1
今回はプログラムの最初に必要なデータ領域の確保について。
実は、Pythonを始めたのはつい先日でこの企画とリアルタイムで勉強して行っている。
データ領域を確保するために、まず、配列・・・、配列が無い!
変数も定義しない、綴りの間違いはチェックしないと言うことである。
実に融通が効くという反面実にいい加減である。
まだ始まってもいない段階で言うのはおかしいが、これは数値計算には向かない。
やはりプログラムには向き不向きがあると思う。
ということを頭に。
まずデータを箱を用意しましょう。
Pythonの2次元配列
通常(C#やDelphiなど)は、
data : array[1..2000,1..6] of integer
のように、2次元配列を用意します。ところがPythonには配列がありません。
代わりになるものはリスト型。リスト型を理解するために次のプログラムをテストした。
わかりづらいが上部にソース、下部に実行結果がある。
test_dat = [[1,2,3],[4,5,6][7,8,9]]
for v in test_dat:
. print(v)
2次元配列が分かったような気がした。
これでデータを入れる箱ができそうだ。