group_mixer 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 803b16515ee2c9793290564601830785abeddf32
4
- data.tar.gz: a0ca5dc163c745825228c5c042b05c2df5e4ca37
3
+ metadata.gz: 96f7557c79b022995704b2bc75254edf5d42107c
4
+ data.tar.gz: 18afffdc0fbeddf1df63dea8eb2ef3f3a9e2255a
5
5
  SHA512:
6
- metadata.gz: 72d76c61644dbd58cc76368dc5b42dc875909e7e17c9967507e73b3601a2e47128ea0147ebabf6ba17e82b6230864b3a5379eeaed4bd9da4456ab44638ec6472
7
- data.tar.gz: 37c5e42b7149f4454bea18ab91c3e761aa1daaca3dd1e57ded7998ab7e3ca3cfb27b053f0b13812a82ffc9cc9e0bd5094992a51264b17ec6583c0c594e9f22f6
6
+ metadata.gz: d9ab635121d010486477f7e446123cf9f9758c210e4a7337cc3fccdea39cfa34e3994322a4c57a2a53ec803ebd5a1a6f60beeae6fa8936d68d81df49ca3ff4ec
7
+ data.tar.gz: 38d73ebc47c003fce25efefcc0f1107ac1cfcdc74fe9d45b0770ff2593d1e8c6dda0598e910534a09035dc733ffb7130d09d2f2b52615761dd47baf65ace12aa
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- group_mixer (0.1.0)
4
+ group_mixer (0.1.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -3,6 +3,7 @@ require 'forwardable'
3
3
 
4
4
  module GroupMixer
5
5
  class Group
6
+ include Enumerable
6
7
  extend Forwardable
7
8
 
8
9
  def initialize(max_size)
@@ -1,15 +1,5 @@
1
1
  require "group_mixer/group"
2
2
 
3
- class Set
4
- def pairs
5
- Set.new(self.map do |i1|
6
- self.map do |i2|
7
- Set[i1, i2] if i1 != i2
8
- end.compact
9
- end.flatten)
10
- end
11
- end
12
-
13
3
  class Mixer
14
4
  MAX_AMOUNT = 2 ** ([42].pack('i').size * 16 - 2) - 1
15
5
 
@@ -21,10 +11,10 @@ class Mixer
21
11
  end
22
12
 
23
13
  def execute
24
- links = make_heuristic_from_past(@past_set)
14
+ links = make_heuristic_from_past(@people, @past_set)
25
15
  link_amount_hash = make_link_amount_hash(@people, links)
26
16
 
27
- link_amount_hash.sort {|a, b| b[1]<=>a[1]}.map{|k, v| k }.each do |person|
17
+ link_amount_hash.sort { |a, b| b[1]<=>a[1] }.each do |person, amount|
28
18
  select_group(@groups, person, links).add person
29
19
  end
30
20
 
@@ -38,41 +28,33 @@ class Mixer
38
28
  (group_size - max_group_size).times.map { |n| GroupMixer::Group.new(min_member_size) }
39
29
  end
40
30
 
41
- def make_heuristic_from_past(past_set)
31
+ def make_heuristic_from_past(people, past_set)
42
32
  past_pheromone = Hash.new(0)
43
33
  past_set.each do |past|
44
- Set.new(past).pairs.each do |pair|
45
- past_pheromone[pair] += 1
34
+ past.combination(2).each do |pair|
35
+ if people.include?(pair[0]) && people.include?(pair[1])
36
+ past_pheromone[Set.new(pair)] += 1
37
+ end
46
38
  end
47
39
  end
48
40
  past_pheromone
49
41
  end
50
42
 
51
43
  def make_link_amount_hash(people, links)
52
- hash = {}
53
- people.each do |person|
54
- amount = 0
55
- links.each do |pair, value|
56
- amount += value if pair.member? person
57
- end
58
- hash[person] = amount
44
+ people.each_with_object(Hash.new) do |person, hash|
45
+ hash[person] = links.select { |pair, value| pair.member? person }
46
+ .map { |pair, value| value }
47
+ .inject(0) { |sum, value| sum += value }
59
48
  end
60
- hash
61
49
  end
62
50
 
63
51
  def select_group(groups, person, links)
64
- group_amounts = {}
65
- groups.each do |g|
52
+ groups.each_with_object(Hash.new) { |g, hash|
66
53
  if g.full?
67
- group_amounts[g] = MAX_AMOUNT
54
+ hash[g] = MAX_AMOUNT
68
55
  else
69
- amount = 0
70
- g.each do |member|
71
- amount += links[Set[member, person]].to_i
72
- end
73
- group_amounts[g] = amount
56
+ hash[g] = g.inject(0) { |sum, m| sum += links[Set[m, person]].to_i }
74
57
  end
75
- end
76
- group_amounts.min{ |x, y| x[1] <=> y[1] }[0]
58
+ }.min{ |x, y| x[1] <=> y[1] }[0]
77
59
  end
78
60
  end
@@ -1,3 +1,3 @@
1
1
  module GroupMixer
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
data/lib/group_mixer.rb CHANGED
@@ -7,7 +7,7 @@ module GroupMixer
7
7
  end
8
8
 
9
9
  def self.by_member_size(people, past_set, max_member_size)
10
- group_size = people.size / max_member_size + 1
10
+ group_size = (people.size / max_member_size.to_f).ceil
11
11
  Mixer.new(people, past_set, group_size).execute
12
12
  end
13
13
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: group_mixer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - iwtn
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-11-16 00:00:00.000000000 Z
11
+ date: 2017-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler