명절날

1995 단어 조건 브랜치
어느 왕국에는 4를 나눈 나머지 1의 해에 열리는 명절이 있다.
어느 왕국에서는 역법이 독특하다. 역법은 다음과 같다.
・ 1년은 1월부터 13월까지 13개월이 있다.
・짝수 달의 일수는 15일이다.
・홀수 개월의 일수는 13일이다.
어느 왕국의 국민들은 이 명절을 매우 좋아해서 다음 날을 늘 기대하고 있다.
자네도 제전을 기대하고 있으니 다음 날이 며칠 남았는지 일찍 알고 싶군.
따라서 현재 날짜와 다음 명절 개최일을 드릴 테니 다음 명절까지의 일수를 계산하는 프로그램을 만들어 보세요.
하지만 올해 명절이 열리지 않는다는 것을 알고 오늘 날짜를 계산하지 않았다.
예 1을 입력하면 다음과 같습니다.

2000년부터 보면 최근 개최년은 2001년이다.2000년 12월 10일부터 2001년 1월 10일까지 일수는 5+13+10=28일이다.
코드 예
#変数への格納と余りが1の年(開催年 == opening_y)を炙り出すための材料となる「starting_y」を作成する
starting_y_origin,starting_m,starting_d = gets.chomp.split(" ").map(&:to_i)
opening_m,opening_d = gets.chomp.split(" ").map(&:to_i)
starting_y = starting_y_origin

#この時にはまだ謎に包まれているopening_yを炙り出す
#二つの分岐を作るが、最終的に格納される変数は同じ
if starting_y_origin % 4 == 0
   opening_y = starting_y_origin + 1
else
  loop do
    starting_y += 1
  break if starting_y % 4 == 1
    opening_y = starting_y + 1
  end
end

if starting_m.odd?
 rest_days_sm = (13 - starting_d)
 this_year_days = ((starting_m..13).to_a.count{|m| m.odd? == true} -1)*13 + ((starting_m..13).to_a.count{|m| m.even? == true})*15 + rest_days_sm
else
 rest_days_sm = (15- starting_d)
 this_year_days = ((starting_m..13).to_a.count{|m| m.odd? == true})*13 + ((starting_m..13).to_a.count{|m| m.even? == true}-1)*15 + rest_days_sm
end

if opening_m.odd?
 op_year_days =  ((1..opening_m).to_a.count{|m| m.odd? == true} -1)*13 +((1..opening_m).to_a.count{|m| m.even? == true})*15 + opening_d
else
 op_year_days =  ((1..opening_m).to_a.count{|m| m.odd? == true})*13 + ((1..opening_m).to_a.count{|m| m.even? == true} -1)*15 + opening_d
end

if (opening_y - (starting_y_origin)) == 1
 puts this_year_days + op_year_days
else
 puts (15*6 + 13*7)*((opening_y - starting_y_origin) - 1) + this_year_days + op_year_days
end

좋은 웹페이지 즐겨찾기