six45 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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: