はじめに
今回はRubyを使って簡単なグループ分けをするプログラムを書いてみました
前提条件
A、B、C、D、E、Fという6人のグループがあります。
このグループは定期的にみんなで通話をしています。
しかし6人全員で通話はやりずらいので、3人ずつか2人と4人に別れることにしました。
このグループを3人と3人、または2人と4人にランダムに分けるプログラムを作成する。
このプログラムは実行するごとに結果が変わります。
また表示結果は以下のようにアルファベット順に出力する。
$ ruby random.rb
["B", "C"]
["A", "D", "E", "F"]
コード
random.rb
# 全員のリスト
members = ['A', 'B', 'C', 'D', 'E', 'F']
# ランダムにメンバーをシャッフル (元の配列はそのまま)
shuffled_members = members.shuffle
# グループの分け方をランダムに決める(2,4 or 4,2 or 3,3)
ratios = [[2, 4], [4, 2], [3, 3]]
ratio = ratios.sample
division_point = ratio[0]
# メンバーを取り出してグループに分ける
first_group = shuffled_members.slice(0, division_point)
second_group = shuffled_members.slice(division_point, ratio[1])
# アルファベット順に表示されるようにする
p first_group.sort
p second_group.sort
Point
以下のコードでsampleメソッドを使って配列配列の要素を一個ランダムに取り出しています。
ratio = ratios.sample
以下のコードでsliceメソッドを使って配列を切り分ける処理を実現しています。
first_group = shuffled_members.slice(0, division_point)
second_group = shuffled_members.slice(division_point, ratio[1])
追記
以下だともっと簡単に書けますね(Rubyらしい書き方..)
random.rb
# %記法で文字列の配列を簡単に作成 => ['A', 'B', 'C', 'D', 'E', 'F']と同じ
group = %w[A B C D E F]
group1 = group.sample([2,3,4].sample).sort
group2 = group - group1
p group1
p group2
Point
以下の行では、sampleを用いてグループの人数比を決めています
group1 = group.sample([2,3,4].sample).sort
以下の行では、group
配列からgroup1
の要素を除いた結果をgroup2
に格納しています。
Array#-メソッドは、左側の配列から右側の配列の要素を除くことが出来ます
group2 = group - group1