Guest User

Untitled

a guest
Dec 14th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.00 KB | None | 0 0
  1. #!/usr/bin/env ruby
  2. require 'date'
  3. require 'benchmark'
  4.  
  5. def weekend_count(start_date, end_date)
  6. size = (end_date - start_date).to_i
  7. count = 0
  8. if start_date.wday != 0
  9. size -= (7 - start_date.wday).to_i
  10. count += 1
  11. end
  12.  
  13. left_over = size % 7
  14. if left_over == 0
  15. count = (count / 7) * 2
  16. else
  17. size -= left_over
  18. count += (size / 7) * 2 + 1
  19. end
  20. count
  21. end
  22.  
  23. def weekend_count_normal(start_date, end_date)
  24. (start_date..end_date).count{ |d| [0, 6].include?(d.wday) }
  25. end
  26.  
  27. distances = [10, 100, 1000, 10000, 100000]
  28. today = Date.today
  29. entries = distances.map { |d| [today - d, today] }
  30.  
  31. entries.each do |entry|
  32. puts "Distance #{(entry[1] - entry[0]).to_i}"
  33.  
  34. puts "Optimized result: #{weekend_count(entry[0], entry[1])}"
  35. puts "Normal result: #{weekend_count_normal(entry[0], entry[1])}"
  36. Benchmark.bm(100) do |bm|
  37. bm.report('Optimized') do
  38. weekend_count(entry[0], entry[1])
  39. end
  40. bm.report('Normal') do
  41. weekend_count_normal(entry[0], entry[1])
  42. end
  43. end
  44. en
Add Comment
Please, Sign In to add comment