結果
| 問題 |
No.721 Die tertia (ディエ・テルツィア)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-04-16 10:36:21 |
| 言語 | Elixir (1.18.1) |
| 結果 |
AC
|
| 実行時間 | 549 ms / 2,000 ms |
| コード長 | 1,546 bytes |
| コンパイル時間 | 998 ms |
| コンパイル使用メモリ | 63,304 KB |
| 実行使用メモリ | 56,328 KB |
| 最終ジャッジ日時 | 2024-12-31 04:09:53 |
| 合計ジャッジ時間 | 13,807 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 18 |
ソースコード
defmodule Main do
def main do
IO.read(:line)
|> String.trim()
|> String.split("/")
|> Enum.map(&String.to_integer/1)
|> solve
|> IO.puts()
end
defp solve([year, month, day]) do
[year, month, day + 2]
|> fix_day_and_month
|> fix_month_and_year
|> format_result
end
defp fix_day_and_month([year, month, day]) when month == 2 do
cond do
uruh?(year) && day > 29 ->
[year, month + 1, day - 29]
!uruh?(year) && day > months(month - 1) ->
[year, month + 1, day - months(month - 1)]
true ->
[year, month, day]
end
end
defp fix_day_and_month([year, month, day]) do
cond do
day > months(month - 1) ->
[year, month + 1, day - months(month - 1)]
true ->
[year, month, day]
end
end
defp fix_month_and_year([year, month, day]) do
cond do
month > 12 -> [year + 1, month - 12, day]
true -> [year, month, day]
end
end
defp uruh?(year) do
rem(year, 4) == 0 &&
(!(year |> rem(100) == 0) ||
year |> rem(400) == 0)
end
defp months(month) do
[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
|> Enum.at(month)
end
defp format_result([year, month, day]) do
[year, month, day]
|> Enum.map(&to_string/1)
|> (fn [year, month, day] ->
[
year |> String.pad_leading(4, "0"),
month |> String.pad_leading(2, "0"),
day |> String.pad_leading(2, "0")
]
end).()
|> Enum.join("/")
end
end