3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rubyを使ってグループ分けをしてみる

Last updated at Posted at 2023-08-06

はじめに

今回は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
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?