пʼятниця, 13 вересня 2013 р.

Зі святом, програмісти!

П'ятниця 13-го. День програміста. Програмістів з відьмами об'єднує не тільки бубен для магічної тряски, а і святкова п'ятницю для шабашу.
Зі Святом, товариші!

Наскільки часто буває такий збіг?
Відповідь під катом.



Вивести наступних 13 Днів Програміста у п'ятницю 13-го.
require 'date'
puts (Date.new(2013)..Date.new(9999)).lazy.select{|d| d.yday == 256 && d.day == 13 && d.friday?}.first(13)

2013-09-13
2019-09-13
2030-09-13
2041-09-13
2047-09-13
2058-09-13
2069-09-13
2075-09-13
2086-09-13
2097-09-13
2109-09-13
2115-09-13
2126-09-13

Не лінивий читач помітив, що в коді використовується лінивий Enumerator, який з'явився в Ruby 2.0.
Провів простий бенчмарк для визначення порівняльних характеристик продуктивності.
require 'date'
require 'benchmark'

iterations = 100

Benchmark.bm(20) do |bm|
  bm.report('Enumerator#lazy') do
    iterations.times do
      (Date.new(2013)..Date.new(9999)).lazy.select{|d| d.yday == 256 && d.day == 13 && d.friday?}.first(13)
    end
  end

  bm.report('Enumerator') do
    iterations.times do
      (Date.new(2013)..Date.new(9999)).select{|d| d.yday == 256 && d.day == 13 && d.friday?}.first(13)
    end
  end
end


Висновки робіть самі.
                           user     system      total        real
Enumerator#lazy        2.240000   0.000000   2.240000 (  2.256149)
Enumerator           163.970000   0.000000 163.970000 (164.479462)

Немає коментарів: