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;
using System.Text;

namespace _083_EraNameTransformation
{
	class Program
	{
		static void Main ( string[] args )
		{
			DateTime meiji = new DateTime (1868, 9, 8);
			DateTime taisho = new DateTime (1912, 7, 30);
			DateTime showa = new DateTime (1926, 12, 25);
			DateTime heisei = new DateTime (1989, 1, 8);

			string inputStr;
			StringBuilder output = new StringBuilder (15 * 50);

			while ((inputStr = Console.ReadLine ()) != null)
			{
				int[] tmp = Array.ConvertAll (inputStr.Split (' '), int.Parse);
				DateTime now = new DateTime (tmp[0], tmp[1], tmp[2]);

				// = pre-meiji
				if (now < meiji)
				{
					output.AppendLine ("pre-meiji");
				}
				// = meiji
				else if (now < taisho)
				{
					output.Append ("meiji ");
					output = AppendDate (output, now.Year - meiji.Year + 1, tmp[1], tmp[2]);
					output.AppendLine ();
				}
				// = taisyo
				else if (now < showa)
				{
					output.Append ("taisho ");
					output = AppendDate (output, now.Year - taisho.Year + 1, tmp[1], tmp[2]);
					output.AppendLine ();
				}
				// = showa
				else if (now < heisei)
				{
					output.Append ("showa ");
					output = AppendDate (output, now.Year - showa.Year + 1, tmp[1], tmp[2]);
					output.AppendLine ();
				}
				// = heisei
				else
				{
					output.Append ("heisei ");
					output = AppendDate (output, now.Year - heisei.Year + 1, tmp[1], tmp[2]);
					output.AppendLine ();
				}
			}

			Console.Write (output);
		}

		static StringBuilder AppendDate ( StringBuilder s, int year, int month, int day )
		{
			s.Append (year);
			s.Append (" ");
			s.Append (month);
			s.Append (" ");
			s.Append (day);

			return s;
		}
	}
}