Advertisement
Guest User

Untitled

a guest
Feb 12th, 2015
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.09 KB | None | 0 0
  1. require 'benchmark/ips'
  2.  
  3. def fizzbuzz_method
  4.   return to_enum __method__ unless block_given?
  5.   n = 0
  6.   loop do
  7.     n += 1
  8.     if (n % 15).zero?
  9.       yield 'FizzBuzz'
  10.     elsif (n % 5).zero?
  11.       yield 'Buzz'
  12.     elsif (n % 3).zero?
  13.       yield 'Fizz'
  14.     else
  15.       yield n
  16.     end
  17.   end
  18. end
  19.  
  20. p fizzbuzz_method.take 50
  21.  
  22. fizzbuzz_enum = Enumerator.new do |yielder|
  23.   n = 0
  24.   loop do
  25.     n += 1
  26.     if (n % 15).zero?
  27.       yielder.yield 'FizzBuzz'
  28.     elsif (n % 5).zero?
  29.       yielder.yield 'Buzz'
  30.     elsif (n % 3).zero?
  31.       yielder.yield 'Fizz'
  32.     else
  33.       yielder.yield n
  34.     end
  35.   end
  36. end
  37.  
  38. p fizzbuzz_enum.take 50
  39.  
  40. fizzbuzz_lazy = (1..Float::INFINITY).lazy.map do |n|
  41.   if (n % 15).zero?
  42.     'FizzBuzz'
  43.   elsif (n % 5).zero?
  44.     'Buzz'
  45.   elsif (n % 3).zero?
  46.     'Fizz'
  47.   else
  48.     n
  49.   end
  50. end
  51.  
  52. p fizzbuzz_lazy.first 50
  53.  
  54. Benchmark.ips do |bm|
  55.   bm.report 'Method' do
  56.     fizzbuzz_method.take 50
  57.   end
  58.  
  59.   bm.report 'Enumerator' do
  60.     fizzbuzz_enum.take 50
  61.   end
  62.  
  63.   bm.report 'Lazy' do
  64.     fizzbuzz_lazy.first 50
  65.   end
  66.  
  67.   bm.compare!
  68. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement