math24 2.0.0 → 2.0.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: 7f74b8740c44cb687f969796f75da38eb4f8be35
4
- data.tar.gz: 00af2b3953d8ba39dbace437aa492e98d06eb5b4
3
+ metadata.gz: 857a194911be2e38f064f35f9721244adb7b3f80
4
+ data.tar.gz: 324ffd0100d3904ac2f282cf7d81b911b8cf3620
5
5
  SHA512:
6
- metadata.gz: f0b61333de0fc6abe2a4f0aeb37e7b04460b6d95badf210101c89489ff9695727dcead8ce0e47db3d6fb9481b27644a6b7ee2c005e8d037ef625d2feb943c20e
7
- data.tar.gz: 739035936665c88a482592b1180a7659dd3d567bfc32c42aff6d71b4cce51a8f47362e8394154cdee4db45b56b87d589924fc16b437a6ac2e3519040bed0f03f
6
+ metadata.gz: f03d431b6b5e5f2197c01fce69f11bd3328ff400e34c2f988a9aecf249926b61b28dfe54f8ebc5d6bec362816eecdefe3325ce9c99812c2c8c2fa72235e26b4f
7
+ data.tar.gz: e47fe0aa504d1c30c8125cdb42f0be3615f46abc136a3d39a8b63f795458d2cbb1e6ed39203d88af30cf10ba926709af5410fbae35ff6be0bc8b7a75e0e8eb72
data/.gitignore CHANGED
@@ -8,3 +8,4 @@
8
8
  /spec/reports/
9
9
  /tmp/
10
10
  math24-*.gem
11
+ .byebug_history
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # Math24
2
2
  [![CircleCI](https://circleci.com/gh/randallreedjr/math24/tree/master.svg?style=svg)](https://circleci.com/gh/randallreedjr/math24/tree/master)
3
+ [![Gem Version](https://badge.fury.io/rb/math24.svg)](https://badge.fury.io/rb/math24)
3
4
 
4
5
  Math24 is a gem providing functionality to play the base version of the Math 24
5
6
  game. In the base version of Math 24, a player must combine 4 integers, using
@@ -20,33 +20,36 @@ module Math24
20
20
  num_permutation.each do |numbers|
21
21
  op_permutation.each do |operators|
22
22
  begin
23
- forward_result = instance_eval("((#{numbers[0].to_f} #{operators[0]} #{numbers[1]}.to_f) #{operators[1]} #{numbers[2]}.to_f) #{operators[2]} #{numbers[3].to_f}")
23
+ proposed_solution = "((#{numbers[0].to_f} #{operators[0]} #{numbers[1]}.to_f) #{operators[1]} #{numbers[2]}.to_f) #{operators[2]} #{numbers[3].to_f}"
24
+ forward_result = instance_eval(proposed_solution)
24
25
  rescue ZeroDivisionError
25
26
  forward_result = 0
26
27
  end
27
28
 
28
29
  begin
29
- alternate_result = instance_eval("(#{numbers[0].to_f} #{operators[0]} #{numbers[1].to_f}) #{operators[1]} (#{numbers[2].to_f} #{operators[2]} #{numbers[3].to_f})")
30
+ proposed_solution = "(#{numbers[0].to_f} #{operators[0]} #{numbers[1].to_f}) #{operators[1]} (#{numbers[2].to_f} #{operators[2]} #{numbers[3].to_f})"
31
+ alternate_result = instance_eval(proposed_solution)
30
32
  rescue ZeroDivisionError
31
33
  alternate_result = 0
32
34
  end
33
35
 
34
36
  begin
35
- reverse_result = instance_eval("#{numbers[0].to_f} #{operators[0]} (#{numbers[1].to_f} #{operators[1]} (#{numbers[2].to_f} #{operators[2]} #{numbers[3].to_f}))")
37
+ proposed_solution = "#{numbers[0].to_f} #{operators[0]} (#{numbers[1].to_f} #{operators[1]} (#{numbers[2].to_f} #{operators[2]} #{numbers[3].to_f}))"
38
+ reverse_result = instance_eval(proposed_solution)
36
39
  rescue ZeroDivisionError
37
40
  reverse_result = 0
38
41
  end
39
42
 
40
- if forward_result == 24
43
+ if forward_result == 24 && integer_division_only?(proposed_solution)
41
44
  if (operators.include?("+") || operators.include?("-")) && (operators.include?("*") || operators.include?("/"))
42
45
  #Might need parentheses for order of operations
43
46
  return "((#{numbers[0]} #{operators[0]} #{numbers[1]}) #{operators[1]} #{numbers[2]}) #{operators[2]} #{numbers[3]}"
44
47
  else
45
48
  return "#{numbers[0]} #{operators[0]} #{numbers[1]} #{operators[1]} #{numbers[2]} #{operators[2]} #{numbers[3]}"
46
49
  end
47
- elsif alternate_result == 24
50
+ elsif alternate_result == 24 && integer_division_only?(proposed_solution)
48
51
  return "(#{numbers[0]} #{operators[0]} #{numbers[1]}) #{operators[1]} (#{numbers[2]} #{operators[2]} #{numbers[3]})"
49
- elsif reverse_result == 24
52
+ elsif reverse_result == 24 && integer_division_only?(proposed_solution)
50
53
  return "#{numbers[0]} #{operators[0]} (#{numbers[1]} #{operators[1]} (#{numbers[2]} #{operators[2]} #{numbers[3]}))"
51
54
  end
52
55
  end
@@ -55,12 +58,23 @@ module Math24
55
58
  return false
56
59
  end
57
60
 
58
- def self.check(problem, solution)
59
- raise ArgumentError unless /\A\d{4}\z/.match problem.join
60
- raise ArgumentError unless solution.is_a? String
61
- raise ArgumentError unless /\A(\(*(\d{1}[()\s]*[*+-\/]+[()\s]*){3}\d{1}\)*)\z/.match(solution)
61
+ def self.check(problem, solution)
62
+ raise ArgumentError unless /\A\d{4}\z/.match problem.join
63
+ raise ArgumentError unless solution.is_a? String
64
+ raise ArgumentError unless /\A(\(*(\d{1}[()\s]*[*+-\/]+[()\s]*){3}\d{1}\)*)\z/.match(solution)
65
+
66
+ problem.count {|i| solution.include?(i.to_s) } == 4 &&
67
+ instance_eval(solution) == 24
68
+ end
62
69
 
63
- problem.count {|i| solution.include?(i.to_s) } == 4 &&
64
- instance_eval(solution) == 24
70
+ private
71
+
72
+ def self.integer_division_only? proposed_solution
73
+ # float and integer division yield same result
74
+ begin
75
+ instance_eval(proposed_solution) == instance_eval(proposed_solution.delete('.0'))
76
+ rescue ZeroDivisionError
77
+ false
65
78
  end
79
+ end
66
80
  end
@@ -1,3 +1,3 @@
1
1
  module Math24
2
- VERSION = "2.0.0"
2
+ VERSION = "2.0.1"
3
3
  end
@@ -26,4 +26,5 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency "bundler", "~> 1.13"
27
27
  spec.add_development_dependency "rake", "~> 10.0"
28
28
  spec.add_development_dependency "rspec", "~> 3.0"
29
+ spec.add_development_dependency "byebug"
29
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: math24
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Randall Reed, Jr.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-12-22 00:00:00.000000000 Z
11
+ date: 2017-01-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  description: Randomly generates a solvable 24 Game problem, verifies user's solution,
56
70
  or finds a solution for a given set of numbers.
57
71
  email: