Subscribed unsubscribe Subscribe Subscribe

F# Monkey

about

F#言語を使ってロト6を当ててみる!(予測編)

F#

f:id:callmekohei00:20170319155858p:plain

Summary

データーベースSqliteに保存されてる当選番号をもとに予測する

まずは・・・

スロットという考え方

たとえば 01 09 11 24 29 42 という当選番号は下記のように考えます

スロット1  01
スロット2  09
スロット3  11
スロット4  24
スロット5  29
スロット6  42

ゾーンという考え方

ロト61から43までの数字を3つに区分します

ゾーン1  01 - 15
ゾーン2  16 - 30
ゾーン3  31 - 43

予測の方法

ランダムリストの作成

過去の当選番号をスロットごとにリスト化します

スロット毎に数字をランダムに選びます

スロット1で`10`を選んだらスロット2は`11`以上の数字をランダムに選びます

ランダムリストの選別

ゾーンをランダムに作成します(たとえば`2 1 3`)

先ほど作成したランダムリストから、先ほど作成したゾーンに適合するもののみフィルターします

5個のランダムリストを選びます

あたるかどうか

わかりませんwww

一応コード

こんな感じ

module Main =
    open Util
    
    /// (STEP1) 各スロットごとの数字をリストにまとめる

    let cq = new ConcurrentQueue<int list>()
            
    let s = @"SELECT * FROM loto6"

    let f2 = fun (r:SQLiteDataReader) -> 
        [2..7]
        |> List.map( fun n -> r.GetInt32(n) )
        |> fun l -> cq.Enqueue l
        |> ignore
    
    let data =    
        let db = SQ3( sqlite_connection )
        db.sqlite_open
        db.sqlite_select s f2 
        cq.ToArray() |> Array.toList |> swapRowColumn

    
    /// (STEP2) 各ゾーンの個数にもとづいて予測する
    
    let idea04 (loto:Loto) (n:int) =

        let zone = createZone loto

        Seq.initInfinite (fun _ -> createAscendantRandomList data )
        |> Seq.filter (fun l -> toZone loto l = zone )
        |> Seq.distinct
        |> Seq.take n

    idea04 loto6 5
    |> Seq.fold ( fun acc l -> prettyPrint " " l + "\n" + acc ) ""
    |> stdout.WriteLine


コードはこちらから〜

当たるも八卦当たらぬも八卦 · GitHub



Good Luck!

Remove all ads