magick 0.1.0 → 0.1.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e8d6e452deba31a7756fb5d9fbb58f11a5e6be0050c7fd66728f08235707a798
4
- data.tar.gz: 40fc7e21adc03fac84f439a41f25ad23e778ecc50e5a438ac27aeac791abed79
3
+ metadata.gz: 4826f852b57d6f69bbf1d1d1c4671174e3b3d68dae520b5fd09f43a7c2ba2bac
4
+ data.tar.gz: 0d56f6b3d4c9a6ec5fe45759695375700aacdedc28dcd9b1dccc23c06e9bff37
5
5
  SHA512:
6
- metadata.gz: 3d13d4e771af6db5087d66ac1f8336411d3b00232d9abbfe790df6da8b454fb83ec5ecf6f238708b4ee72a23263fa8a62d6f26e2384f2febea8f16ee36b1bb92
7
- data.tar.gz: 219f308752938b16d27fd1b6c35832dff2e2e2054cf21fe37c086b683b24801a5c4948ea8295fddc295357657e6ed6c9b4aadd27bbf401e5e9483e9eada96a5d
6
+ metadata.gz: ebe917fea532e9cd78d94e247120278f9f155cb857ff0daaea8f9538342a33fefff6e8a3c813180763845fd822efababcfaa0d70a0101d5b665becded5815a46
7
+ data.tar.gz: 88573678ce6d983164280c784f14dd285f1136c0354cc1c40a3c92df1538637ea909b5f9ad4d1098a32eb067ec34a2b6a08a5058839d4d3a17aa0080115a09fb
data/lib/magick/maths.rb CHANGED
@@ -1,9 +1,9 @@
1
1
  # maths
2
2
 
3
- # for addition, we'll just use Ruby
4
3
  module Magick
5
4
  module Maths
6
5
  class << self
6
+ # for addition, we'll just use Ruby
7
7
  def add = ->(x){ ->(y) { x + y }}
8
8
 
9
9
  def negate = ->(x) { -x }
@@ -11,11 +11,7 @@ module Magick
11
11
  def subtract = ->(x){ ->(y) { add.(x).(negate.(y)) }}
12
12
 
13
13
  def multiply
14
- ->(a){
15
- ->(b){
16
- power.(a).(b).(add)
17
- }
18
- }
14
+ power.(add)
19
15
  end
20
16
  alias :mult :multiply
21
17
 
@@ -30,6 +26,17 @@ module Magick
30
26
  end
31
27
  alias :div :divide
32
28
 
29
+ def div_to_f
30
+ ->(n){
31
+ ->(d){
32
+ # in order to get a float, we'll just
33
+ # use Ruby's `/` operator, and make sure
34
+ # at least one argument is cast to float.
35
+ n / d.to_f
36
+ }
37
+ }
38
+ end
39
+
33
40
  def mod
34
41
  Smullyan::Birds::Y.(->(f){
35
42
  ->(n){
@@ -41,11 +48,7 @@ module Magick
41
48
  end
42
49
 
43
50
  def exp
44
- ->(a){
45
- ->(b){
46
- power.(a).(b).(multiply)
47
- }
48
- }
51
+ power.(multiply)
49
52
  end
50
53
 
51
54
  def power
@@ -53,9 +56,9 @@ module Magick
53
56
  # operation. Powers of addition is equivalent
54
57
  # to multiplication; powers of multiplication
55
58
  # is equivalent to exponentiation
56
- ->(base) {
57
- ->(exponent) {
58
- ->(op) {
59
+ ->(op) {
60
+ ->(base) {
61
+ ->(exponent) {
59
62
  Smullyan::Birds::Y.(->(f) {
60
63
  ->(b) {
61
64
  ->(e) {
@@ -72,10 +75,26 @@ module Magick
72
75
 
73
76
  def average
74
77
  Smullyan::Birds::Phi.
75
- (Magick::Maths::divide).
78
+ (Magick::Maths::div_to_f).
76
79
  (Magick::Loops::sum).
77
80
  (Magick::Loops::length)
78
81
  end
82
+
83
+ def powers_of_two = power.(multiply).(2)
84
+
85
+ # x and y are pairs of ints
86
+ def fibonacci_matrix_multiply = ->(x){
87
+ ->(y){
88
+ [x[0] * (y[1] + y[0]) + x[1] * y[0], x[0] * y[0] + x[1] * y[1]]
89
+ }
90
+ }
91
+
92
+ def fibonacci
93
+ ->(n){
94
+ n == 0 ? 0 :
95
+ power.(fibonacci_matrix_multiply).([1,0]).(n)[0]
96
+ }
97
+ end
79
98
  end
80
99
  end
81
100
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Magick
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: magick
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Phil Crissman