diff --git a/fibonacci/fibonacci.rb b/fibonacci/fibonacci.rb index 9ec0ddd..b0fd02d 100644 --- a/fibonacci/fibonacci.rb +++ b/fibonacci/fibonacci.rb @@ -21,20 +21,18 @@ # http://ruby-doc.org/core-2.1.5/doc/syntax/methods_rdoc.html class Fibonacci - def is_fibonacci? (n) - n == 0 ? fib_number = 0 - n == 1 ? fib_number = 1 - if n > 1 - fib_sequence.each {|n| - fib_sequence = [ ] << fib_number = fib[n-1] + fib[n-2] - } - end - end + def is_fibonacci? (check_number) + fibonacci_seq = [0,1] + while check_number > fibonacci_seq.last + fib_num = fibonacci_seq[-1] + fibonacci_seq[-2] + fibonacci_seq.push fib_num + end + fibonacci_seq.include? check_number + end end - - test = Fibonacci.new test.is_fibonacci?(5) + diff --git a/fibonacci/fibonacci_ken.rb b/fibonacci/fibonacci_ken.rb new file mode 100644 index 0000000..ec283fd --- /dev/null +++ b/fibonacci/fibonacci_ken.rb @@ -0,0 +1,59 @@ +# Original solution +# class Fibonacci +# def is_fibonacci?(n) +# fib_ary = [0,1] +# return true if fib_ary.include?(n) +# +# while n >= get_fibonacci(fib_ary) +# return true if n == get_fibonacci(fib_ary) +# fib_ary << get_fibonacci(fib_ary) +# end +# +# false +# end +# +# private +# +# def get_fibonacci(a) +# a[-1] + a[-2] +# end +# end + +#rv means return value +# http://ruby.bastardsbook.com/chapters/enumerables/ + +# First iteration of inject solution: +# # class Fibonacci +# def is_fibonacci?(n) +# #rv means return value +# # http://ruby.bastardsbook.com/chapters/enumerables/ +# n.times.inject([0,1]) { |rv, e| rv << rv[-2] + rv[-1] }.include?(n) +# end +# end +# +# require 'pry' + +# Second iteration of inject solution: +class Fibonacci + def is_fibonacci?(n) + return true if n == 0 + n.times.inject([0,1]) do |rv, e| + return true if rv.include?(n) + break if rv.last > n + rv << rv[-2] + rv[-1] + end + false + end +end +f = Fibonacci.new +p f.is_fibonacci?(144) + + + +# showing inject method +# cool = [48, 46, 14, 15, 5, 99].inject(0) do |rv, e| +# binding.pry +# rv + e +# end +# +# p cool