#P1807. Mayan Dates
Mayan Dates
本题没有可用的提交语言。
描述
背景
NASA秘密建造了一台时间机器,可以穿越到过去。其首次应用是探索玛雅文明。他们从玛雅纪念碑上收集了一些重要日期,适合进一步研究。现在他们面临一个问题——需要将这些玛雅日期转换为格里高利历(公历)格式,因为这是时间机器唯一能理解的输入形式。
问题
编写一个转换程序,计算给定格里高利日期或玛雅长计数的格里高利日期、玛雅长计数和玛雅仪式日期。
玛雅长计数
玛雅历法的起始日期(第0天)是公元前3114年8月13日。从这个第0天开始,计算到某个日期的天数。1天称为,20为1,18为1,20为1,20为1。例如:表示自公元前3114年8月13日以来已经过去了个、个、个、个和个(天)。
玛雅仪式日期
玛雅人的太阳年为365天,没有闰日来修正日历。一年分为18个月,每月20天,外加一个5天的月份。月份名称如下:、、、、、、、、、、、、、、、、、、。月份的天数编号为1到19(或1到4),月份的最后一天记为下个月的第0天(例如,不写,而是写表示第一个月的最后一天,同样适用于5天的月,其最后一天记为)。此外,还有一种类似于我们的星期和工作日的表示法。每天由一个1到13的数字和以下20个名称之一标记:、、、、、、、、、、、、、、、、、、、。数字和名称循环运行,因此计数如下:、、、...、、、。因此,需要260天的周期(称为仪式年)才能再次计数到(参见下一页的图1)。
工作日和月份表示法一起使用,如下例:(工作日)(日和月)。公元前3114年8月13日的仪式日期为 。
格里高利日期
在我们的日历中,使用闰日。每4年插入一个闰日,但每100年不插入。此外,每400年仍会插入一个闰日。
还需要知道的是,没有公元0年。因此,公元前1年12月31日之后是公元1年1月1日。公元前最后一个闰年是公元前1年(此处适用400年规则),之后的第一个闰年是公元4年。
输入
第一行包含场景的数量。
对于每个场景,有一行包含玛雅长计数或格里高利日期,格式如下:
- 玛雅长计数由5个非负整数组成,用点分隔。
- 格里高利日期首先由三个整数、和组成,用斜杠分隔,且满足、和。这些值可能填充零,也可能不填充,但和永远不会超过两个字符,不会超过四个字符。此表示法后总是跟一个空格和“BC”或“AD”。
我们既不会询问早于公元前3114年8月13日的日期,也不会询问晚于(玛雅长计数日历的最后一天)的日期。此外,输入的日历中不会给出无效日期。
输出
每个场景的输出以一行“Scenario #i:”开始,其中是从1开始的场景编号。然后,无论输入格式如何,都需要打印三行,按以下顺序表示给定日期:
- 格里高利日期,格式与输入描述相同,但不填充零;
- 玛雅长计数表示法,如前所述;
- 玛雅仪式日期,由四个部分组成,用单个空格分隔:工作日表示法(数字和名称),然后是月份的天数和月份名称。
在这三行之后,必须始终打印一个空行。
输入数据 1
2
13/08/3114 BC
12.19.10.6.14
输出数据 1
Scenario #1:
13/8/3114 BC
0.0.0.0.0
4 Ahaw 8 Kumk'u
Scenario #2:
28/6/2003 AD
12.19.10.6.14
9 Ix 2 Tzek
提示
来源
TUD Programming Contest 2003, Darmstadt, Germany