Five weekends: Difference between revisions

→‎{{header|Ruby}}: Remove nested loop; shortened somewhat.
(added Factor)
(→‎{{header|Ruby}}: Remove nested loop; shortened somewhat.)
Line 5,787:
# of the month falls on a Sunday and the month has 31 days.
 
LONG_MONTHS = [1,3,5,7,8,10,12]
dates = []
YEARS = (1900.upto(.2100) do |year|.to_a
 
1.upto(12) do |month|
dates = YEARS.product(LONG_MONTHS).map{|y, m| Date.new(y,m,-1)}.select(&:sunday?)
d = Date.new(year, month, -1) # -1 is last day of month
dates << d if d.sunday? && d.day == 31
end
end
 
puts "There are #{dates.size} months with 5 weekends from 1900 to 2100:"
puts dates.first(5).map { |d| d.strftime("%b %Y") }, "..."
puts dates.last(5).map { |d| d.strftime("%b %Y") }
puts "..."
puts dates.last(5).map { |d| d.strftime("%b %Y") }
years_with_5w = dates.map(&:year)
years_with_5wyears_4w = YEARS - dates.map(&:year)
years = (1900..2100).to_a - years_with_5w
puts "There are #{yearsyears_4w.size} years without months with 5 weekends:"
puts yearsyears_4w.join(", ")</lang>
 
'''Output'''
1,149

edits