首页 文章

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

提问于
浏览
0

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

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是闰年期间的月份的开始(即,在 beginnings 的每个月的第二个月1天之后的 leap_beginnings ) .

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

如何将数组的第一个值添加到第二个数组的第一个值并且新数组是输出( starting_days_of_month ),然后我可以再次将其用作第一个值,从而相互添加两个数组? (重复100年,因此输出是一个数字数组,包含100年内该月的所有起始日期 . )

1 回答

  • 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
    

相关问题