将两个数组相互添加,其中数组的第一个值被添加到第二个数组的第一个值100次?

时间:2014-03-28 22:31:22

标签: ruby arrays

我无法解决我正试图解决的问题。我想制作一个数组来收集本月初的所有日期(数字)(称为starting_days_of_month 100年。为此,我有两个数组如下,正常年份和闰年:< / p>

beginnings= [0,31,59,90,120,151,181,212,243,273,304,334] # jan = 31, feb =jan + 28, mar = jan + feb + 31, etc.
leap_beginnings = beginnings.collect { |i| i > 32 ? i += 1 : i }

这里,开头是月份的开头,leap_beginnings是闰年月份的开始(即,leap_beginnings之后,beginnings在第二个月的1天被添加到{{1}的每个月})。

现在我有从1900年开始到2000年底的年份。我想要做的是将起始区域的值从头到尾添加到starting_days_of_month数组,但是当年份是可以被4整除(闰年),我想将leap_beginnings的值添加到数组中。

如何将两个数组相互添加,其中数组的第一个值被添加到第二个数组的第一个值,而一个新数组是输出(starting_days_of_month),我可以将其用作第一个值又来了? (重复100年,因此输出是一个数字数组,包含100年内该月的所有起始日期。)

1 个答案:

答案 0 :(得分:1)

beginnings = [0,31,59,90,120,151,181,212,243,273,304,334] # jan = 31, feb =jan + 28, mar = jan + feb + 31, etc.
leap_beginnings = beginnings.map.with_index {|n,i| (i > 1) ? n+1 : n }

def leap_year?(n)
  n % 4 == 0 && (n % 400 == 0 || n % 100 != 0)
end

def offset(array)
  if array.size == 0
    0
  else
    array.max + 31    # because december
  end
end

starting_days_of_month = []

(1900..2000).each_with_index do |year, index|
  days = leap_year?(year) ? leap_beginnings : beginnings

  starting_days_of_month += days.map { |day| day + offset(starting_days_of_month) }
end

puts starting_days_of_month