PR
Profile
Search this site.
MOBILE
qrcode
Others
<< BASS:TATULA100 2019年モデル | main | Ploom TECH:新フレーバー:ストロベリーマンゴー / レモンティー >>
Ruby:Loto7:抽選番号カウント機能を作る

■要件のまとめ

ロト7で、いままでの抽選番号をカウントする

=> 今まで開催された抽選番号が、それぞれどれだけ出ているかをカウントして出力する

例: 【1 は 56 回出ています】のように、それを37まで。

 

■必要な処理の整理

・抽選番号のデータを用意する

└CSV形式で、手動で用意した。 ※1:用意したファイルは下部に画像で添付

・CSVファイルが存在するディレクトリのパスを取得する

・CSVの中身を取得する

・抽選番号だけを取得する

・抽選番号をそれぞれ、カウントして出力する

 

##### loto7 抽選番号カウントプログラム

 

# CSVライブラリの読み込み
require 'csv'
 

class Loto7NumberTimes
    
    # インスタンス変数の初期化
    def initialize
        @filepath = "./csv/loto7_log.csv"
        @i = 1
        @csv_data
        @loto7
    end
    
    # CSVファイルのフルパス取得
    def log_file_path
        File.expand_path("#{@filepath}")
    end
    
    # CSVデータの取得
    def loto7_csv
        @csv_data = CSV.read(log_file_path)
    end
    
    # 抽選番号の抽出
    def number_lottery
        loto7_csv.map{ |item| item[5, 7] }
    end
    
    # 抽選番号のカウント
    def lottery_count
        while @i < 38
            @loto7 = number_lottery.flatten.count("#{@i}")
            puts "#{@i} は #{@loto7} 回出ています".rjust(14)
            @i += 1
        end
    end

end

loto7numtimes = Loto7NumberTimes.new
loto7numtimes.lottery_count

 

結果 => 

 1 は 56 回出ています

 2 は 55 回出ています

 3 は 49 回出ています

 4 は 59 回出ています

 5 は 47 回出ています

 6 は 59 回出ています

 7 は 56 回出ています

 8 は 53 回出ています

 9 は 69 回出ています

10 は 51 回出ています

11 は 54 回出ています

12 は 47 回出ています

13 は 64 回出ています

14 は 51 回出ています

15 は 69 回出ています

16 は 45 回出ています

17 は 55 回出ています

18 は 45 回出ています

19 は 48 回出ています

20 は 49 回出ています

21 は 68 回出ています

22 は 47 回出ています

23 は 66 回出ています

24 は 60 回出ています

25 は 45 回出ています

26 は 56 回出ています

27 は 57 回出ています

28 は 63 回出ています

29 は 51 回出ています

30 は 60 回出ています

31 は 58 回出ています

32 は 52 回出ています

33 は 42 回出ています

34 は 57 回出ています

35 は 61 回出ています

36 は 66 回出ています

37 は 47 回出ています

 

<-------------------------------------------------------->

 

▼覚えておきたい事がいくつかあるので、それの備忘録

 

1:Rubyにおける変数の宣言について

 

    # インスタンス変数の初期化
    def initialize
        @filepath = "./csv/loto7_log.csv"
        @i = 1
        @csv_data
        @loto7
    end

 

Rubyでは、変数の宣言については多言語のように変数だけの宣言というのはしなくていい物との事。

ただし、初期値を入れておきたいものは、initializeなどで纏めておいたほうがわかりやすいんだと思う。

そのため、初期値を入れていない「@csv_data」「@loto7」については記述から消しても結果は変わらないのだが、今は構文に慣れるという自分なりの考えがあって、必要ない物も記述している。

きっと、今後は「これ記述の必要ないな…」という記述にも慣れていかないといけないのだが、今はこれで良しとしておく。

 

2:CSVデータからの指定列の取得について

 

    # 抽選番号の抽出
    def number_lottery
        loto7_csv.map{ |item| item[5, 7] }
    end

 

CSVファイルの中身のデータを配列で取得したかったので、mapを使用。

mapメソッドは、mapが処理したものを配列で返してくれる。

item[5, 7]は「5列目(0から数えて)から7個」という意味。

これで、抽選番号のNo.1〜No.7までの値を取得して配列にして返してくれる。

 

3:flattenメソッドの役割について

 

    # 抽選番号のカウント
    def lottery_count
        while @i < 38
            @loto7 = number_lottery.flatten.count("#{@i}")
            puts "#{@i} は #{@loto7} 回出ています".rjust(14)
            @i += 1
        end
    end

 

上記2のmapで取得した配列は、以下のような形の配列になる。

[["No.1", "No.2", "No.3", "No.4", "No.5", "No.6", "No.7"], ["#", "#", "#", "#", "#", "#", "#"], ["7", "10", "12", "17", "23", "28", "34"], ["20", "24", "29", "31", "33", "34", "35"],  〜 ["1", "11", "18", "19", "21", "29", "37"]]

つまり、”配列の配列”の状態。

ここから、配列だけの形にしたかった為、flattenを使用している。

flattenを使用すると、以下になる。

["No.1", "No.2", "No.3", "No.4", "No.5", "No.6", "No.7", "#", "#", "#", "#", "#", "#", "#", "7", "10", "12", "17", "23", "28", "34", "20", "24", "29", "31", "33", "34", "35", 〜 "1", "11", "18", "19", "21", "29", "37"]

 

※1

 

JUGEMテーマ:コンピュータ

| Ruby | 22:03 | - | - | このページのトップへ
スポンサーサイト
| - | 22:03 | - | - | このページのトップへ