$m_days = ($m % 2 === 0) ? 15 : 13;
// 基準日 list($y, $m, $d) = explode(' ', trim(fgets(STDIN))); // 次の開催日 list($a, $b) = explode(' ', trim(fgets(STDIN))); // 最終的な日数 $days = 0; // 1年間の日数 = 181, 2年=362, 3年=543 $OneYearDays = (int) 13 * 7 + 15 * 6; // 月の日数。三項演算子 $m_days = ($m % 2 === 0) ? 15 : 13; // 当月の残りの日数 $days += $m_days - $d; // 開催月の日数を足す $days += $b; //残り何年 function howManyYearLeft($y, $OneYearDays) { $days = 0; $num = $y % 4; // 4で割った余り。0->よく年なので、月日だけ。2->2年分、$daysに足す。$3->1年分、$daysに足す if($num === 0) { return $days; } elseif ($num === 2) { $days += $OneYearDays * 2; return $days; } elseif ($num === 3) { $days += $OneYearDays; return $days; } } $days += howManyYearLeft($y, $OneYearDays); // 13月まで、与えられた月の次の月から、残り何ヶ月 $evenMonths = 0; $oddMonths = 0; for($i = $m + 1; $i <= 13; $i++) { // $m = 11 の場合、残りが12月と13月のため、$evenMonths と$oddMonths がそれぞれ、1 になる。 if($i % 2 === 0) { $evenMonths++; } else { $oddMonths++; } } $days += $evenMonths * 15; $days += $oddMonths * 13; // 1月から、開催月の1ヶ月手前まで、残り何ヶ月 $evenMonths = 0; $oddMonths = 0; for($i = 1; $i < $a; $i++) { if($i % 2 === 0) { $evenMonths++; } else { $oddMonths++; } } $days += $evenMonths * 15; $days += $oddMonths * 13; echo $days;