Problem:
西暦和暦変換

西暦で表された年月日を、元号を用いた和暦に変換し、その年月日を出力するプログラムを作成してください。入力は例に示すように 3 つの整数であり、順に西暦年、月、日です。これを、出力例に示すように変換してください。なお、明治以前の年月日が入力された場合は「pre-meiji」と表示してください。

各年号の最初の年は「元年」ではなく「１年」と出力することとします。

元号

期間

meiji

1868. 9. 8 〜 1912. 7.29

taisho

1912. 7.30 〜 1926.12.24

showa

1926.12.25 〜 1989. 1. 7

heisei

1989. 1. 8 〜

入力

複数のデータが与えられます。各データとして年、月、日を表す３つの整数が空白区切りで１行に与えられます。

入力の終わりまで処理してください。データの数は 50 を超えません。

出力

空白区切りの元号、年、月、日、または「pre-meiji」を１行に出力してください。

Sample Input

2005 9 3
1868 12 2
1868 9 7

Output for the Sample Input

heisei 17 9 3
meiji 1 12 2
pre-meiji

Solution in JAVA (judge verdict: Wrong Answer)


import static java.lang.Math.abs;
import static java.lang.Math.atan2;
import static java.lang.Math.sqrt;
import static java.util.Arrays.deepToString;

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		new Main().run();
	}
	void tr(Object... os) {
		System.err.println(deepToString(os));
	}

	Scanner sc = new Scanner(System.in);
	public void run() {
		for (;sc.hasNext();) {
			int y = sc.nextInt();
			int m = sc.nextInt();
			int d = sc.nextInt();
			
			final int premeiji = 0;
			final int meiji = 1;
			final int taisho = 2;
			final int showa = 3;
			final int heisei = 4;

			int res = -1;
			if (y < 1868 || 
				(y == 1868 && m < 9) ||
				(y == 1868 && m == 9 && d < 8)) {
				res = premeiji;
			}
			else if (y < 1912 || 
					(y == 1912 && m < 7) ||
					(y == 1912 && m == 7 && d < 30)) {
				res = meiji;
			}
			else if (y < 1926 || 
					(y == 1926 && m < 12) ||
					(y == 1926 && m == 12 && d < 25)) {
				res = taisho;
			}
			else if (y < 1 || 
					(y == 1989 && m < 1) ||
					(y == 1989 && m == 1 && d < 8)) {
				res = showa;
			}
			else {
				res = heisei;
			}
			
			if (res == premeiji) {
				System.out.println("pre-meiji");
			} else {
				int yy = 0;
				String nengou = "";
				if (res == meiji) { nengou = "meiji"; yy = y - 1868 + 1; }
				if (res == taisho) { nengou = "taisho"; yy = y - 1912 + 1; }
				if (res == showa) { nengou = "showa"; yy = y - 1926 + 1; }
				if (res == heisei) { nengou = "heisei"; yy = y - 1989 + 1; }
				System.out.printf("%s %d %d %d\n", nengou, yy, m, d);
			}
		}
	}
	boolean premeiji(int y, int m, int d) {
		if (y < 1868) return true;
		if (y >= 1869) return false;
		if (m < 9) return true;
		if (m >= 10) return false;
		if (d < 8) return true;
		return false;
	}
}