group_mixer 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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