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 C# (judge verdict: Accepted)

using System;

public class Hello
{
    public static void Main()
    {
        var a = new string[] { "19890108", "19261225", "19120730", "18680908" };
        var b = new string[] { "heisei", "showa", "taisho", "meiji" };
        var c = new int[] { 1989, 1926, 1912, 1868 };
        string L;
        for (; (L = Console.ReadLine()) != null;)
        {
            string[] line = L.Trim().Split(' ');
            var yyyy = int.Parse(line[0]);
            var mm = int.Parse(line[1]);
            var dd = int.Parse(line[2]);
            var targ = string.Format("{0}{1:00}{2:00}", yyyy, mm, dd);
            var p = 0; var res = "pre-meiji";
            while (p < 4)
            {
                if (targ.CompareTo(a[p]) >= 0) { res = string.Format("{0} {1} {2} {3}", b[p], yyyy - c[p] + 1, mm, dd); break; }
                p++;
            }
            Console.WriteLine(res);
        }
    }
}