equation_system 1.0.0 → 1.1.0

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: b01551b37db2aaf2b29ccb33ed8b056d800a6119
4
- data.tar.gz: 5e25df4ba443e5bb39bb0f5ff60958bd33fdd893
3
+ metadata.gz: e29f98511bdedc546b76fbf37e0c975d50bc1f4f
4
+ data.tar.gz: 3a5a96efe4464859fd86118755566e8bf9977c69
5
5
  SHA512:
6
- metadata.gz: 85c9843699b8a08e54b3e37eb9a4979405c3ab2b2dc2aa1c32999668ffdfa72343b42e34732c117567c7ab99ee9cc73efa718f69be4f350f29c3711540f9e392
7
- data.tar.gz: d60d47944d1c957499981acd78901691ae37bd0bf62a8aada69102616cb6ff892025b064e5c42fda49754bcdb18a6adeb6168e33897559e194fce84c6cb57e29
6
+ metadata.gz: 292cd64c26d6145a1ce3b7d035d68d53eae4a5f22ac1a2e534fe838e262aed13f89cde666563bd87b7f41e990f5b232e2e22efa507fce42989a554e35d8c4a78
7
+ data.tar.gz: 29702b56c76e575ff6d54a75d453e388f47a9bbc90146964b248c734e4be52161f6dbb5adf55632b618bcd3ed794e6833c5cbd88b224a84a749cd5438fc3fdb9
data/README.md CHANGED
@@ -1,3 +1,6 @@
1
+ [![Gem Version](https://badge.fury.io/rb/equation_system.svg)](http://badge.fury.io/rb/equation_system)
2
+ [![Build Status](https://travis-ci.org/R167/equation_system.svg)](https://travis-ci.org/R167/equation_system)
3
+
1
4
  # EquationSystem
2
5
 
3
6
  This gem will generate a system of equations up to an arbitrary size.
@@ -1,20 +1,25 @@
1
1
  module EquationSystem
2
- class System
2
+ class System
3
3
  def initialize(variables, range: -10..10, allow_zero: false, failsafe: 10)
4
4
  raise FailSafeError, "Failsafe cannot be less than 1" if failsafe < 1
5
5
  @prng = Random.new
6
+ @coefficients = []
6
7
  @answers = generate_answers(variables, range, allow_zero)
7
8
  @equations = generate_equations(@answers, range, allow_zero, failsafe)
8
9
  end
9
-
10
+
10
11
  def equations
11
12
  @equations
12
13
  end
13
-
14
+
14
15
  def answers
15
16
  @answers
16
17
  end
17
-
18
+
19
+ def coefficients
20
+ @coefficients
21
+ end
22
+
18
23
  def method_missing(method, *args, &block)
19
24
  match = method.to_s.match(/^solution_for_([a-z]+)$/)
20
25
  if match && @answers[match[1].to_sym]
@@ -23,24 +28,26 @@ module EquationSystem
23
28
  super
24
29
  end
25
30
  end
26
-
31
+
27
32
  def to_json
28
33
  require 'json' unless defined?(JSON)
29
34
  {:equations => @equations, :variables => @answers}.to_json
30
35
  end
31
-
36
+
32
37
  private
33
-
38
+
34
39
  def generate_equations(answers, range, allow_zero, failsafe)
35
40
  equations = []
36
41
  answers.length.times do
37
42
  failsafe.times do |fails|
43
+ temp = []
38
44
  equation = ""
39
45
  total = 0
40
46
  answers.each do |var, val|
41
- coeffecient = random_num(range, allow_zero)
42
- total += coeffecient * val
43
- equation << " %+#{val.is_a?(Float) ? 'f' : 'd' }%s" % [coeffecient, var]
47
+ coefficient = random_num(range, allow_zero)
48
+ temp << coefficient
49
+ total += coefficient * val
50
+ equation << " %+#{val.is_a?(Float) ? 'f' : 'd' }%s" % [coefficient, var]
44
51
  end
45
52
  equation = equation.gsub(/(\+|-)/, '\1 ').gsub(/1([a-z])/, '\1').gsub(/^ (-)?\+? /, '\1')
46
53
  equation << " = #{total}"
@@ -48,18 +55,19 @@ module EquationSystem
48
55
  raise RangeTooSmallError, "Unable to get unique equation after #{failsafe} tries" unless fails == failsafe - 1
49
56
  else
50
57
  equations << equation
58
+ @coefficients << {variables: temp, sum: total}
51
59
  break
52
60
  end
53
- end
61
+ end
54
62
  end
55
63
  equations
56
64
  end
57
-
65
+
58
66
  def generate_answers(variables, range, allow_zero)
59
67
  ret = {}
60
68
  vars = []
61
- if variables <= 3 && variables > 0
62
- vars = %w(x y z)[0, variables]
69
+ if variables <= 4 && variables > 0
70
+ vars = %w(x y z w)[0, variables].sort
63
71
  elsif variables > 3
64
72
  cur = 'a'
65
73
  variables.times do
@@ -73,10 +81,10 @@ module EquationSystem
73
81
  vars.each do |var|
74
82
  ret[var.to_sym] = random_num(range, allow_zero)
75
83
  end
76
-
84
+
77
85
  ret
78
86
  end
79
-
87
+
80
88
  def random_num(range, allow_zero)
81
89
  r = 0
82
90
  begin
@@ -1,3 +1,3 @@
1
1
  module EquationSystem
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: equation_system
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Winston Durand
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-12 00:00:00.000000000 Z
11
+ date: 2015-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -96,7 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
96
  version: '0'
97
97
  requirements: []
98
98
  rubyforge_project:
99
- rubygems_version: 2.2.2
99
+ rubygems_version: 2.4.5
100
100
  signing_key:
101
101
  specification_version: 4
102
102
  summary: Generates a system of equations.
@@ -104,3 +104,4 @@ test_files:
104
104
  - spec/equation_system_spec.rb
105
105
  - spec/spec_helper.rb
106
106
  - spec/system_spec.rb
107
+ has_rdoc: