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