Skip to content

Instantly share code, notes, and snippets.

@tkm-kj
Last active March 1, 2016 07:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tkm-kj/f4c42016293bdb7e0c81 to your computer and use it in GitHub Desktop.
Save tkm-kj/f4c42016293bdb7e0c81 to your computer and use it in GitHub Desktop.
まだプロジェクトで一緒になってない3人組の組み合わせを出力するプログラム
class LunchMember
def initialize(data)
@data = data
end
def show_combination
members = @data.flatten.uniq
lunch_patterns = members.combination(3).to_a
result = []
lunch_patterns.each do |pat|
result << pat unless same_project?(pat)
end
result.each {|r| p r }
end
private
def same_project?(pattern)
pat = pattern.combination(2).to_a
@data.each do |d|
pat.each do |p|
return true if (d - p).count == d.count - 2
end
end
false
end
end
@tkm-kj
Copy link
Author

tkm-kj commented Feb 27, 2016

使い方

data = [
  ['a', 'b', 'c', 'd'], # あるプロジェクトの関わっていたメンバーの配列
  ['d', 'e', 'c'],
  ['f', 'g', 'h'],
  ['f', 'g'],
  ['h', 'i']
]
LunchMember.new(data).show_combination

=begin
["a", "e", "f"]
["a", "e", "g"]
["a", "e", "h"]
["a", "e", "i"]
["a", "f", "i"]
["a", "g", "i"]
["b", "e", "f"]
["b", "e", "g"]
["b", "e", "h"]
["b", "e", "i"]
["b", "f", "i"]
["b", "g", "i"]
["c", "f", "i"]
["c", "g", "i"]
["d", "f", "i"]
["d", "g", "i"]
["e", "f", "i"]
["e", "g", "i"]
=end

@hrysd
Copy link

hrysd commented Feb 29, 2016

これは、まだ組んでない人を配列にして渡す感じですか?

@tkm-kj
Copy link
Author

tkm-kj commented Mar 1, 2016

渡すデータはプロジェクトのメンバーの配列を想定してます。

↑のdataで言うと、
dataの0番目の配列はaさん、bさん、cさん、dさんの4人が関わっていたプロジェクトで
1番目の配列はdさんeさんcさんの3人が関わっていたプロジェクトといった具合です。

最終的に、そのプロジェクトメンバーのデータから今まで被ったことのない3人の組み合わせを返すという仕組みです。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment