2016年5月11日 星期三

UVA 300 - Maya Calendar

Q300 - Maya Calendar

馬亞教授在研究馬雅文明的曆法上有了重大的發現,教授從繩結 上的訊息發現馬雅文明的一年有19個月共365天,這種曆制稱作"Haab",前18個月每月有20天,由0開始編號到19,而第19個月只有5天,分別 為0, 1, 2, 3, 4,另外,每個月都有一個名字,依序為:pop, no, zip, zotz, tzec, xul, yoxkin, mol, chen, yax, zac, ceh, mac, kankin, muan, pax, koyab, cumhu, uayet。馬雅人相信第19個月是不幸的月份,所在在該月所有經濟活動都會停止,甚至會避免從事家務,連地都不掃了。

另外,基於宗教上 的理由,馬雅人還會使用另一種曆制,該曆制稱為"Tzolkin",這種曆制的一年有260天,分為20種日子,每種日子13天,用13個整數與20個日 子的名稱來區分每一天,整數為1~13,20種日子的名稱為:imix, ik, akbal, kan, chicchan, cimi, manik, lamat, muluk, ok, chuen, eb, ben, ix, mem, cib, caban, eznab, canac, ahau。
注意,在Tzolkin這種曆制每一天的名稱不會衝突,例如一年前幾天的名稱如下所示:
1 imix, 2 ik, 3 akbal, 4 kan, 5 chicchan, 6 cimi, 7 manik, 8 lamat, 9 muluk, 10 ok, 11 chuen, 12 eb, 13 ben, 1 ix, 2 mem, 3 cib, 4 caban, 5 eznab, 6 canac, 7 ahau, 8 imix, 9 ik, 10 akbal...

每一年以整數表示,例如:0, 1, ...,由0開始表示,所以兩種歷制的第一天分別為:

Haab: 0. pop 0
Tzolkin: 1 imix 0

請寫一個程式幫助馬亞教授做日期的轉換,由Haab曆制轉到Tzolkin曆制。
Input
Haab的日期格式為:日 月 年
輸入的第一列為一個整數表示共有多少日期需要轉換,接下來有n列,每一列為一個以Haab曆制表示的日期,年份最多到5000。
Output
Tzolkin的日期格式為:數字 名稱 年
請在輸出的第一列顯示共有幾組日期,接下來的n列顯示對應的Tzolkin日期。


Sample InputSample Outpu
3
10. zac 0
0. pop 0
10. zac 1995
3
3 chuen 0
1 imix 0
9 cimi 2801

中文翻譯:Ruby兔的 ACM園地, 修改by Luckycat


import java.util.Scanner;
public class UVA_300 {
static String[] Haab={"pop", "no", "zip", "zotz", "tzec", "xul", "yoxkin", "mol", "chen", "yax", "zac", "ceh", "mac", "kankin"
, "muan", "pax", "koyab", "cumhu", "uayet"};
static String[] Tzolkin={"imix", "ik", "akbal", "kan", "chicchan", "cimi", "manik", "lamat", "muluk", "ok", "chuen", "eb"
, "ben", "ix", "mem", "cib", "caban", "eznab", "canac", "ahau"};

public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
System.out.println(n);
while(n-->0){
String s_day=sc.next();
String month=sc.next();
int year=sc.nextInt();
String s=s_day.substring(0,s_day.length()-1);
int day=Integer.parseInt(s)+1;
int index=0;
for(int i=0;i<Haab.length;i++)
if(Haab[i].equals(month))
index=i;
int Allday=year*365+index*20+day;
int T_year=Allday/260;
Allday%=260;
String T_month=Tzolkin[Allday%20-1];
Allday%=13;;
int T_day=Allday;
System.out.println(T_day+" "+T_month+" "+T_year);
}

}

}

沒有留言:

張貼留言