これは分数の単純化と似ていますが、日付を使用します!
プログラムの入力は次の形式でなければなりませんmm/dd
。例:
3/4 //March 4
12/15 //December 15
1/1 // January 1
入力は有効で、月に次の日数が含まれると想定します。
January 31
February 28
March 31
April 30
May 31
June 30
July 31
August 31
September 30
October 31
November 30
December 31
プログラムの仕事は、想定される有効な入力を受け取り、日付を繰り返し(または再帰的に)単純化し、各反復(0番目を含む)で、上記のように月の完全な名前で日付を出力することです。
例えば:
次の入力が与えられたとします。
12/18
出力します
December 18
June 9
February 3
既に簡略化されている入力は、それ自体を出力するだけです。
11/17
出力:
November 17
あなたの言語の関数から月の名前を取得することはできません。文字列は難読化して計算できますが、GetMonthString(4)などの標準関数を使用することはできません。その関数を記述するか、説明されているように月名を出力する方法を見つける必要があります。
簡略化された日付が不正な日付を生成するケースは考えられませんが、途中で不正な日付を生成した場合は、出力してください:
Illegal Date
ただし、これが発生しないことが確実な場合は、このケースをカバーするコードを用意する必要はありません。出力される日付は、上記の説明に従って常に有効である必要があります(言うまでもなく、月と日は1から始まります)。
アルゴリズム:
各反復で、分子と分母を除算する最小数で除算します。
つまり、分子と分母の両方をこの数で除算すると、両方とも整数(共通因子)である新しい分子と分母が生成されるように、すべての数を見つけます。最小のものを選択し、分子と分母を個別に除算して新しい分数を生成します。割り切れる唯一の数が1の場合、可能な限り簡略化して停止します。
これが明確であることを願っています。
どの言語でも使用できます。これはコードゴルフです、最短のコードが勝ちます!
12/18
toから6/9
ではないの4/6
ですか?