six45 0.0.1 → 0.0.2

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.
data/README.md CHANGED
@@ -22,6 +22,7 @@ Run 'six45' in commandline:
22
22
 
23
23
  # six45 => Returns 10 games
24
24
  # six45 30 => Returns 30 games
25
+ # six45 magic => Returns at least 7 games, which will cover at least 23 numbers of 45.
25
26
 
26
27
  ## Contributing
27
28
 
data/bin/six45 CHANGED
@@ -3,5 +3,10 @@
3
3
  require 'six45'
4
4
  require 'pp'
5
5
 
6
- number_of_games = Six45.is_number?(ARGV[0]) ? ARGV[0].to_i : 10
7
- Six45.pick(number_of_games).each { |key, game| pp game }
6
+ if ARGV[0] == "magic"
7
+ Six45.magic_pick.each { |key, game| pp game }
8
+ else
9
+ number_of_games = Six45.is_number?(ARGV[0]) ? ARGV[0].to_i : 10
10
+ Six45.pick(number_of_games).each { |key, game| pp game }
11
+ end
12
+
data/lib/six45/Seeds.rb CHANGED
@@ -5,8 +5,8 @@ module Six45
5
5
  @max = max
6
6
  end
7
7
 
8
- def generate
9
- 6.times.map{rand(@min..@max)}
8
+ def generate(seed_size)
9
+ seed_size.times.map{rand(@min..@max)}
10
10
  end
11
11
 
12
12
  end
data/lib/six45/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Six45
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/six45.rb CHANGED
@@ -4,8 +4,8 @@ require "six45/seeds"
4
4
  module Six45
5
5
  extend self
6
6
 
7
- def seed
8
- Seeds.new.generate
7
+ def seed(seed_size=6)
8
+ Seeds.new.generate seed_size
9
9
  end
10
10
 
11
11
  def lucky_candidates
@@ -18,23 +18,49 @@ module Six45
18
18
  candidates.sort
19
19
  end
20
20
 
21
- def luck_numbers
21
+ def lucky_numbers
22
22
  numbers = lucky_candidates
23
- if numbers.inject { |sum, d| d > 45 } || numbers.inject{ |sum, d| sum+d } < 60
24
- luck_numbers
23
+ if numbers.any? { |d| d > 45 } || numbers.inject { |sum, d| sum+d } < 60
24
+ lucky_numbers
25
25
  else
26
26
  numbers
27
27
  end
28
28
  end
29
29
 
30
- def pick number_of_games=10
30
+ def pick(number_of_games=10)
31
31
  games = {}
32
32
  number_of_games.times do |i|
33
- games[i] = luck_numbers
33
+ games[i] = lucky_numbers
34
34
  end
35
35
  games
36
36
  end
37
37
 
38
+ def magic_seed
39
+ a_magic_seed = seed 5
40
+ if a_magic_seed.inject { |sum, n| sum+n }>37
41
+ magic_seed
42
+ else
43
+ a_magic_seed
44
+ end
45
+ end
46
+
47
+ def magic_pick
48
+ magic_numbers = []
49
+ magic_games = {}
50
+ a_magic_seed = [1]
51
+ a_magic_seed += magic_seed
52
+ while a_magic_seed.size > 1 do
53
+ magic_numbers << a_magic_seed.inject(1) { |sum, n| sum+n }
54
+ a_magic_seed.pop
55
+ end
56
+ magic_numbers << a_magic_seed.last
57
+ magic_numbers = magic_numbers.sort
58
+ (0..(45-magic_numbers.last)).each do |x|
59
+ magic_games[1+x] = magic_numbers.map { |n| n+x }.sort
60
+ end
61
+ magic_games
62
+ end
63
+
38
64
  def is_number?(i)
39
65
  true if Float(i) rescue false
40
66
  end
data/spec/six45_spec.rb CHANGED
@@ -4,6 +4,7 @@ describe Six45 do
4
4
 
5
5
  context "#seed" do
6
6
  let(:seed) { Six45.seed }
7
+ let(:seed_five) { lambda { Six45.seed 5 } }
7
8
  it "returns an array" do
8
9
  seed.should be_kind_of(Array)
9
10
  end
@@ -13,13 +14,22 @@ describe Six45 do
13
14
  it "each number is less than 13" do
14
15
  seed.each { |n| n.should be <= 13 }
15
16
  end
17
+ it "also accepts an integer argument 5" do
18
+ seed_five.call.should_not raise_error ArgumentError
19
+ end
20
+ it "returns an array" do
21
+ seed_five.call.should be_kind_of(Array)
22
+ end
23
+ it "containing 5 numbers" do
24
+ seed_five.call.size.should be 5
25
+ end
16
26
  end
17
27
 
18
28
  context "#pick" do
19
29
  let(:seed) { Six45.seed }
20
30
  let(:lucky_numbers) { Six45.pick }
21
31
  let(:pick_five) { lambda { Six45.pick 5 } }
22
- it "returns an hash" do
32
+ it "returns a hash" do
23
33
  lucky_numbers.should be_kind_of(Hash)
24
34
  end
25
35
  it "containing 10 games" do
@@ -40,11 +50,31 @@ describe Six45 do
40
50
  it "also accepts an integer argument 5" do
41
51
  pick_five.call.should_not raise_error ArgumentError
42
52
  end
43
- it "returns an hash" do
53
+ it "returns a hash" do
44
54
  pick_five.call.should be_kind_of(Hash)
45
55
  end
46
56
  it "containing 5 games" do
47
57
  pick_five.call.size.should be 5
48
58
  end
49
59
  end
60
+
61
+ context "#magic_pick" do
62
+ let(:lucky_numbers) { Six45.magic_pick }
63
+ it "returns a hash" do
64
+ lucky_numbers.should be_kind_of(Hash)
65
+ end
66
+ it "containing at least 7 game" do
67
+ lucky_numbers.size.should be >= 7
68
+ end
69
+ it "each game contains 6 uniq numbers" do
70
+ lucky_numbers.each do |k, g|
71
+ g.size.should eq g.uniq.size
72
+ g.size.should eq 6
73
+ end
74
+ end
75
+ it "all games cover at least 23 numbers" do
76
+ all_numbers = lucky_numbers.map{|k,v| v}.flatten.uniq
77
+ all_numbers.size.should be > 23
78
+ end
79
+ end
50
80
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: six45
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-23 00:00:00.000000000 Z
12
+ date: 2012-06-26 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: A Gem helps pick 6 digits out of 45.
15
15
  email: