yurko
3/27/2018 - 11:33 AM

algos jff

algos jff

def sleep_sort arr
  [].tap do |sorted|
    arr.map { |el| Thread.new { sleep el; sorted << el } }.each(&:join)
  end
end

sleep_sort Array.new(10) { rand(10) }
fibo = ->(n) { Enumerator.new { |y, a=[0,1]| loop { y << a[-1]; a << a[-2..-1].reduce(:+) } }.take n } 
fibo[10]

def fibonacci
  # Enumerator.new { |y, a=1, b=1| loop { y << a; a, b = b, a + b } }
  Enumerator.new { |y, a=[0,1]| loop { y << a[-1]; a << a[-2..-1].reduce(:+) } }
end

fibonacci.lazy.select(&:even?).first 10

# using Hash
fib = Hash.new {|h, k| h[k] = k < 3 ? 1 : h[k-1] + h[k-2]}
def factorial n
  fac_times = ->(n, acc) { n == 0 ? acc : fac_times.(n - 1, acc * n) }
  fac_times.(n, 1)
end
def anagram? a, b
  counts = ->(word) { word.each_char.with_object(Hash.new(0)) { |c, h| h[c] += 1 unless c =~ /\s/} }
  counts[a] == counts[b]
end