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: Accepted)

import java.util.*;

class Main {
  public static void main (String[] args) {

    Calendar m = Calendar.getInstance();
    Calendar t = Calendar.getInstance();
    Calendar s = Calendar.getInstance();
    Calendar h = Calendar.getInstance();

    m.set(1868, 9, 8);
    t.set(1912, 7, 30);
    s.set(1926, 12, 25);
    h.set(1989, 1, 8);

    Scanner scanner = new Scanner(System.in);
    String out = "";
    while (scanner.hasNext()) {
      int yyyy = scanner.nextInt();
      int mm = scanner.nextInt();
      int dd = scanner.nextInt();
      Calendar in = Calendar.getInstance();
      in.set(yyyy, mm, dd);
      if (in.compareTo(m) < 0) {
        out += "pre-meiji\n";
        continue;
      }
      if (in.compareTo(t) < 0) {
        out += "meiji " + ((yyyy - 1868) + 1) + " " + mm + " " + dd + "\n";
        continue;
      }
      if (in.compareTo(s) < 0) {
        out += "taisho " + ((yyyy - 1912) + 1) + " " + mm + " " + dd + "\n";
        continue;
      }
      if (in.compareTo(h) < 0) {
        out += "showa " + ((yyyy - 1926) + 1) + " " + mm + " " + dd + "\n";
        continue;
      }
      out += "heisei " + ((yyyy - 1989) + 1) + " " + mm + " " + dd + "\n";
      continue;
    }
    System.out.print(out);
  }
}