这类似于简化分数,但带有日期!
程序的输入必须采用以下格式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,那么您已尽可能简化并停下来。
我希望这很清楚。
允许使用任何语言。这是Code Golf,最短的代码获胜!
我发布答案时问题已关闭。h!
—
t-clausen.dk
@ t-clausen.dk挑战已重新打开。
—
AdmBorkBork
为什么从
—
edc65
12/18
到6/9
,而不是4/6
(我没有得到所有的迭代混乱...当我简化了一小部分我immedialtely所产生的简化值)?