ローイングファンのプログラミング日記

ボート競技やプログラミングについて書きます

疑似乱数を発生させるrand

randは疑似乱数を発生させるメソッド。
今回はrandメソッドを使ってツイートの定型文に変化をつける。

目次


randを使う理由

レース(レガッタ)情報をツイートする

ローイングファンではボートレース(レガッタ)の結果をツイートしている。
Twitterライブラリを利用したツイートのしかたは前に書いた。

Twitterライブラリ
https://rowingfan.hatenablog.jp/entry/2018/05/22/120000

レース結果のツイートは次のようなもの。





似たような内容のツイートはTwitterのアカウント停止処分をうける?

はじめの頃は表題部分を定形にしていた。そうしたところ何度もアカウント停止処分を受けた。
どうやら書式が同じだと内容は違っていてもスパム扱いされるようだ。
(すべて次のような同じ文の表題をつけるとスパム扱いされる?)

2018 ボート全日本軽量級 結果


そこで次の例のように語順を変えた表題をいくつか用意して、ツイートごとに不規則に利用するよう改良した。

例(実際はもっと種類がある)

2018 全日本軽量級(ボート) 結果
2018 ボート全日本軽量級 結果
ボート全日本軽量級2018の結果


改良してからアカウント停止をうけていない。

randの使い方

randのリファレンスマニュアル

randのリファレンスマニュアルは次のとおり。

Karnelモジュール > rand
https://docs.ruby-lang.org/ja/latest/method/Kernel/m/rand.html

書式

rand(max)
rand(range)


引数max,rangeには数値が入る。
max、rangeが整数の場合は整数が返ってくる。

#次の2つとも 0,1,2 いずれかの整数を不規則に返す
p rand(3)
p rand(0..2)


randを使ったコード

テストコードを書く。

randtest.rb

class TweetTitle
    def initialize
        @titles = [
            "2018 全日本軽量級(ボート) 結果",
            "2018 ボート全日本軽量級 結果",
            "ボート全日本軽量級2018の結果"
        ]
    end

    def tweet_title
        puts @titles[rand(@titles.size)]
    end
end

5.times do
    TweetTitle.new.tweet_title
end


コードの説明

  • TweetTitleクラスをつくる
    • initializeメソッドで表題の配列を初期化する
    • tweet_titleメソッドをつくる
      • randメソッドを使って配列のインデックスを不規則につくる
      • sizeメソッドを使ってrandの引数を@titlesの要素数にする
  • timesメソッドでtweet_titleメソッドを繰り返す(今回は5回)


実行結果

ターミナル/PowerShellを使ってコードを実行する。

ruby randtest.rb


実行結果

2018 ボート全日本軽量級 結果
ボート全日本軽量級2018の結果
2018 全日本軽量級(ボート) 結果
ボート全日本軽量級2018の結果
2018 全日本軽量級(ボート) 結果


表題が不規則に出力された。
この仕組を使って不規則な表題をつぶやいている。

今回の実行環境

macOS 10.13.5
Windows10 Home 1803
Ruby 2.5.1p57