Class: ProbabilityToFriendlyString::FriendlyProbability
- Inherits:
-
Object
- Object
- ProbabilityToFriendlyString::FriendlyProbability
- Includes:
- Comparable
- Defined in:
- lib/probability_to_friendly_string.rb
Overview
Represents probability represented in a friendly manner.
Constant Summary collapse
- @@fractionsData =
nil- @@friendlyDescriptionValues =
[0.005, 0.02, 0.08, 0.15, 0.2, 0.45, 0.55, 0.7, 0.8, 0.85, 0.9, 0.95, 0.995]
- @@friendlyDescriptionStrings =
[ "Hard to imagine", "Barely possible", "Still possible", "Some chance", "Could happen", "Perhaps", "Flip a coin", "Likelier than not", "Good chance", "Probably", "Quite likely", "Pretty likely", "Very likely", "Almost certainly", ]
Instance Attribute Summary collapse
-
#denominator ⇒ Object
readonly
Returns the value of attribute denominator.
-
#friendlyDescription ⇒ Object
readonly
Returns the value of attribute friendlyDescription.
-
#friendlyString ⇒ Object
readonly
Returns the value of attribute friendlyString.
-
#numerator ⇒ Object
readonly
Returns the value of attribute numerator.
Class Method Summary collapse
- ._addFraction(fractionsData, numerator, denominator) ⇒ Object
- ._createFractionsData ⇒ Object
-
.fromProbability(f) ⇒ FriendlyProbability
Creates a FriendlyProbability from a double.
Instance Method Summary collapse
- #<=>(another_friendly_string) ⇒ Object
-
#initialize(numerator, denominator, friendlyDescription, friendlyString = nil) ⇒ FriendlyProbability
constructor
A new instance of FriendlyProbability.
- #to_s ⇒ Object
Constructor Details
#initialize(numerator, denominator, friendlyDescription, friendlyString = nil) ⇒ FriendlyProbability
Returns a new instance of FriendlyProbability.
26 27 28 29 30 31 32 33 34 35 |
# File 'lib/probability_to_friendly_string.rb', line 26 def initialize(numerator, denominator, friendlyDescription, friendlyString = nil) @numerator = numerator @denominator = denominator @friendlyDescription = friendlyDescription if friendlyString @friendlyString = friendlyString else @friendlyString = "%d in %d" % [numerator, denominator] end end |
Instance Attribute Details
#denominator ⇒ Object (readonly)
Returns the value of attribute denominator.
5 6 7 |
# File 'lib/probability_to_friendly_string.rb', line 5 def denominator @denominator end |
#friendlyDescription ⇒ Object (readonly)
Returns the value of attribute friendlyDescription.
5 6 7 |
# File 'lib/probability_to_friendly_string.rb', line 5 def friendlyDescription @friendlyDescription end |
#friendlyString ⇒ Object (readonly)
Returns the value of attribute friendlyString.
5 6 7 |
# File 'lib/probability_to_friendly_string.rb', line 5 def friendlyString @friendlyString end |
#numerator ⇒ Object (readonly)
Returns the value of attribute numerator.
5 6 7 |
# File 'lib/probability_to_friendly_string.rb', line 5 def numerator @numerator end |
Class Method Details
._addFraction(fractionsData, numerator, denominator) ⇒ Object
37 38 39 |
# File 'lib/probability_to_friendly_string.rb', line 37 def self._addFraction(fractionsData, numerator, denominator) fractionsData << [numerator.to_f/denominator, numerator, denominator] end |
._createFractionsData ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/probability_to_friendly_string.rb', line 40 def self._createFractionsData if @@fractionsData return end fractionsData = [] (2..10).each do |d| (1..d).each do |n| if n.gcd(d) == 1 _addFraction(fractionsData, n, d) end end end [12, 15, 20, 30, 40, 50, 60, 80, 100].each do |d| _addFraction(fractionsData, 1, d) _addFraction(fractionsData, d - 1, d) end @@fractionsData = fractionsData.sort end |
.fromProbability(f) ⇒ FriendlyProbability
Creates a FriendlyProbability from a double
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/probability_to_friendly_string.rb', line 63 def self.fromProbability(f) if f < 0 or f > 1 raise RangeError, "f is less than 0 or greater than 1" end # index of the least element > f index = @@friendlyDescriptionValues.bsearch_index {|x| x > f} if index.nil? index = @@friendlyDescriptionStrings.length - 1 end friendlyDescription = @@friendlyDescriptionStrings[index] if f == 0 return FriendlyProbability.new 0, 1, friendlyDescription elsif f == 1 return FriendlyProbability.new 1, 1, friendlyDescription elsif f > 0.99 return FriendlyProbability.new 99, 100, friendlyDescription, ">99 in 100" elsif f < 0.01 return FriendlyProbability.new 1, 100, friendlyDescription, "<1 in 100" end FriendlyProbability._createFractionsData # index of the least element > f right = @@fractionsData.bsearch_index {|x| x[0] > f} if right left = right - 1 else left = @@fractionsData.length - 1 end if (left == (@@fractionsData.length - 1) or (left >= 0 and f - @@fractionsData[left][0] < @@fractionsData[right][0] - f)) return FriendlyProbability.new @@fractionsData[left][1], @@fractionsData[left][2], friendlyDescription else return FriendlyProbability.new @@fractionsData[right][1], @@fractionsData[right][2], friendlyDescription end end |
Instance Method Details
#<=>(another_friendly_string) ⇒ Object
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/probability_to_friendly_string.rb', line 102 def <=>(another_friendly_string) if self.numerator < another_friendly_string.numerator -1 elsif self.numerator > another_friendly_string.numerator 1 end if self.denominator < another_friendly_string.denominator -1 elsif self.denominator > another_friendly_string.denominator 1 end if self.friendlyDescription < another_friendly_string.friendlyDescription -1 elsif self.friendlyDescription > another_friendly_string.friendlyDescription 1 end if self.friendlyString < another_friendly_string.friendlyString -1 elsif self.friendlyString > another_friendly_string.friendlyString 1 else 0 end end |
#to_s ⇒ Object
98 99 100 |
# File 'lib/probability_to_friendly_string.rb', line 98 def to_s return "#{@numerator}/#{@denominator} (text: \"#{@friendlyString}\", description: \"#{@friendlyDescription}\")" end |