Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'benchmark/ips'
- def fizzbuzz_method
- return to_enum __method__ unless block_given?
- n = 0
- loop do
- n += 1
- if (n % 15).zero?
- yield 'FizzBuzz'
- elsif (n % 5).zero?
- yield 'Buzz'
- elsif (n % 3).zero?
- yield 'Fizz'
- else
- yield n
- end
- end
- end
- p fizzbuzz_method.take 50
- fizzbuzz_enum = Enumerator.new do |yielder|
- n = 0
- loop do
- n += 1
- if (n % 15).zero?
- yielder.yield 'FizzBuzz'
- elsif (n % 5).zero?
- yielder.yield 'Buzz'
- elsif (n % 3).zero?
- yielder.yield 'Fizz'
- else
- yielder.yield n
- end
- end
- end
- p fizzbuzz_enum.take 50
- fizzbuzz_lazy = (1..Float::INFINITY).lazy.map do |n|
- if (n % 15).zero?
- 'FizzBuzz'
- elsif (n % 5).zero?
- 'Buzz'
- elsif (n % 3).zero?
- 'Fizz'
- else
- n
- end
- end
- p fizzbuzz_lazy.first 50
- Benchmark.ips do |bm|
- bm.report 'Method' do
- fizzbuzz_method.take 50
- end
- bm.report 'Enumerator' do
- fizzbuzz_enum.take 50
- end
- bm.report 'Lazy' do
- fizzbuzz_lazy.first 50
- end
- bm.compare!
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement