namespace MyCalendar
{
using System;
using System.Linq;
using System.Collections.Generic;
internal sealed class Calendar
{
private static readonly List<String> Wdays = new List<string>() { "日", "月", "火", "水", "木", "金", "土" };
private static readonly Int32 Nwdays = Wdays.Count;
private readonly DateTime dt;
internal Calendar(DateTime dt)
{
this.dt = dt;
}
internal void Show()
{
Console.WriteLine(" {0}年{1}月", dt.Year, dt.Month);
Wdays.ForEach(v => Console.Write("{0} ", v));
Console.WriteLine("");
Int32 sw = 1;
Int32 dow = (Int32)dt.DayOfWeek;
Int32 max = dow + DateTime.DaysInMonth(dt.Year, dt.Month);
Enumerable.Range(1, max)
.ToList()
.ForEach(i =>
{
if (i > dow)
{
Console.Write("{0, 2} ", sw++);
}
else
{
Console.Write(" ");
}
if (i % Nwdays == 0)
{
Console.WriteLine("");
}
});
Console.WriteLine("");
}
}
internal sealed class Program
{
static void Main(string[] args)
{
Int32 year;
while (true)
{
if (Int32.TryParse(Console.ReadLine(), out year))
{
var issuccess = false;
try
{
new DateTime(year, 1, 1);
issuccess = true;
}
catch (ArgumentOutOfRangeException)
{
}
if (issuccess)
{
break;
}
}
Console.WriteLine("正しい入力ではありません。");
}
Int32 month;
DateTime? dt = null;
while (true)
{
if (Int32.TryParse(Console.ReadLine(), out month))
{
var issuccess = false;
try
{
dt = new DateTime(year, month, 1);
issuccess = true;
}
catch (ArgumentOutOfRangeException)
{
}
if (issuccess)
{
break;
}
}
Console.WriteLine("正しい入力ではありません。");
};
(new Calendar((DateTime)dt)).Show();
}
}
}
bmFtZXNwYWNlIE15Q2FsZW5kYXIKewogICAgdXNpbmcgU3lzdGVtOwogICAgdXNpbmcgU3lzdGVtLkxpbnE7CiAgICB1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKCiAgICBpbnRlcm5hbCBzZWFsZWQgY2xhc3MgQ2FsZW5kYXIKICAgIHsKICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBMaXN0PFN0cmluZz4gV2RheXMgPSBuZXcgTGlzdDxzdHJpbmc+KCkgeyAi5pelIiwgIuaciCIsICLngasiLCAi5rC0IiwgIuacqCIsICLph5EiLCAi5ZyfIiB9OwogICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEludDMyIE53ZGF5cyA9IFdkYXlzLkNvdW50OwoKICAgICAgICBwcml2YXRlIHJlYWRvbmx5IERhdGVUaW1lIGR0OwogICAgICAgIAogICAgICAgIGludGVybmFsIENhbGVuZGFyKERhdGVUaW1lIGR0KQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy5kdCA9IGR0OwogICAgICAgIH0KCiAgICAgICAgaW50ZXJuYWwgdm9pZCBTaG93KCkKICAgICAgICB7CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCIgICAgIHswfeW5tHsxfeaciCIsIGR0LlllYXIsIGR0Lk1vbnRoKTsKICAgICAgICAgICAgV2RheXMuRm9yRWFjaCh2ID0+IENvbnNvbGUuV3JpdGUoInswfSAiLCB2KSk7CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCIiKTsKCiAgICAgICAgICAgIEludDMyIHN3ID0gMTsKICAgICAgICAgICAgSW50MzIgZG93ID0gKEludDMyKWR0LkRheU9mV2VlazsKICAgICAgICAgICAgSW50MzIgbWF4ID0gZG93ICsgRGF0ZVRpbWUuRGF5c0luTW9udGgoZHQuWWVhciwgZHQuTW9udGgpOwogICAgICAgICAgICBFbnVtZXJhYmxlLlJhbmdlKDEsIG1heCkKICAgICAgICAgICAgICAgICAgICAgIC5Ub0xpc3QoKQogICAgICAgICAgICAgICAgICAgICAgLkZvckVhY2goaSA9PgogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID4gZG93KQogICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZSgiezAsIDJ9ICIsIHN3KyspOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlKCIgICAiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpICUgTndkYXlzID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCIiKTsKICAgICAgICB9CiAgICB9CgogICAgaW50ZXJuYWwgc2VhbGVkIGNsYXNzIFByb2dyYW0KICAgIHsKICAgICAgICBzdGF0aWMgdm9pZCBNYWluKHN0cmluZ1tdIGFyZ3MpCiAgICAgICAgewogICAgICAgICAgICBJbnQzMiB5ZWFyOwogICAgICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKEludDMyLlRyeVBhcnNlKENvbnNvbGUuUmVhZExpbmUoKSwgb3V0IHllYXIpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHZhciBpc3N1Y2Nlc3MgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlVGltZSh5ZWFyLCAxLCAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWNjZXNzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKEFyZ3VtZW50T3V0T2ZSYW5nZUV4Y2VwdGlvbikKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoaXNzdWNjZXNzKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCLmraPjgZfjgYTlhaXlipvjgafjga/jgYLjgorjgb7jgZvjgpPjgIIiKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgSW50MzIgbW9udGg7CiAgICAgICAgICAgIERhdGVUaW1lPyBkdCA9IG51bGw7CiAgICAgICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoSW50MzIuVHJ5UGFyc2UoQ29uc29sZS5SZWFkTGluZSgpLCBvdXQgbW9udGgpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHZhciBpc3N1Y2Nlc3MgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGR0ID0gbmV3IERhdGVUaW1lKHllYXIsIG1vbnRoLCAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWNjZXNzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKEFyZ3VtZW50T3V0T2ZSYW5nZUV4Y2VwdGlvbikKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoaXNzdWNjZXNzKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCLmraPjgZfjgYTlhaXlipvjgafjga/jgYLjgorjgb7jgZvjgpPjgIIiKTsKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIChuZXcgQ2FsZW5kYXIoKERhdGVUaW1lKWR0KSkuU2hvdygpOwogICAgICAgIH0KICAgIH0KfQo=