import java.util.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
class Koyomi2 {
static Scanner scanner
= new Scanner
(System.
in); static int[] maxDays = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
static int inputNumber
(String message,
int min,
int max
) { while(true) {
String str
= scanner.
nextLine(); try {
int number
= Integer.
parseInt(str
); if (min <= number && number <= max) {
return number;
}
System.
out.
println("正しい入力ではありません。"); }
}
}
static boolean isLeap(int year) {
return
(year % 400 == 0) ? true :
(year % 100 == 0) ? false :
(year % 4 == 0) ? true : false;
}
static int getLastDay(int year, int month) {
return (month == 2 && isLeap(year)) ? 29 : maxDays[month - 1];
}
static int getDayOfWeek(int year, int month, int day) {
}
public static void main
(String[] args
) { LocalDateTime now = LocalDateTime.now();
System.
out.
println(now.
format(DateTimeFormatter.
ofPattern("今日はyyyy年MM月dd日です。")));
int year = inputNumber("何年のカレンダーを見ますか?2000~2040までの数字を入力して下さい。> ", 2000, 2040);
int month = inputNumber("何月のカレンダーを見ますか?1~12までの数字を入力して下さい。> ", 1, 12);
System.
out.
println("日 月 火 水 木 金 土"); int youbi = getDayOfWeek(year, month, 1) - 1;
System.
out.
print(String.
format("%-" + (youbi
* 3) + "s",
"")); int lastDay = getLastDay(year, month);
for (int day = 1; day <= lastDay; day++) {
if (getDayOfWeek
(year, month, day
) == Calendar.
SATURDAY) { }
}
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CmltcG9ydCBqYXZhLnRpbWUuZm9ybWF0LkRhdGVUaW1lRm9ybWF0dGVyOwoKY2xhc3MgS295b21pMiB7CglzdGF0aWMgU2Nhbm5lciBzY2FubmVyID0gbmV3IFNjYW5uZXIoU3lzdGVtLmluKTsKCXN0YXRpYyBpbnRbXSBtYXhEYXlzID0geyAzMSwgMjksIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxIH07CgoJc3RhdGljIGludCBpbnB1dE51bWJlcihTdHJpbmcgbWVzc2FnZSwgaW50IG1pbiwgaW50IG1heCkgewoJCXdoaWxlKHRydWUpIHsKIAkJCVN5c3RlbS5vdXQucHJpbnQobWVzc2FnZSk7CgkJCVN0cmluZyBzdHIgPSBzY2FubmVyLm5leHRMaW5lKCk7CgkJCVN5c3RlbS5vdXQucHJpbnRsbihzdHIpOwoJCQl0cnkgewoJCQkJaW50IG51bWJlciA9IEludGVnZXIucGFyc2VJbnQoc3RyKTsKCQkJCWlmIChtaW4gPD0gbnVtYmVyICYmIG51bWJlciA8PSBtYXgpIHsKCQkJCQlyZXR1cm4gbnVtYmVyOwoJCQkJfQoJCQkJdGhyb3cgbmV3IE51bWJlckZvcm1hdEV4Y2VwdGlvbigpOwoJCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewoJICAgCQkJU3lzdGVtLm91dC5wcmludGxuKCLmraPjgZfjgYTlhaXlipvjgafjga/jgYLjgorjgb7jgZvjgpPjgIIiKTsKCQkJfQoJCX0KCX0KCQoJc3RhdGljIGJvb2xlYW4gaXNMZWFwKGludCB5ZWFyKSB7CgkJcmV0dXJuCgkJCSh5ZWFyICUgNDAwID09IDApID8gdHJ1ZSA6CgkJCSh5ZWFyICUgMTAwID09IDApID8gZmFsc2UgOgoJCQkoeWVhciAlIDQgPT0gMCkgPyB0cnVlIDogZmFsc2U7Cgl9CgkKCXN0YXRpYyBpbnQgZ2V0TGFzdERheShpbnQgeWVhciwgaW50IG1vbnRoKSB7CgkJcmV0dXJuIChtb250aCA9PSAyICYmIGlzTGVhcCh5ZWFyKSkgPyAyOSA6IG1heERheXNbbW9udGggLSAxXTsKCX0KCQoJc3RhdGljIGludCBnZXREYXlPZldlZWsoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSkgewoJCUNhbGVuZGFyIGNhbDIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOwoJCWNhbDIuc2V0KENhbGVuZGFyLllFQVIsIHllYXIpOwoJCWNhbDIuc2V0KENhbGVuZGFyLk1PTlRILCBtb250aCAtIDEpOwoJCWNhbDIuc2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCwgZGF5KTsKCQlyZXR1cm4gY2FsMi5nZXQoQ2FsZW5kYXIuREFZX09GX1dFRUspOwoJfQoKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKCQlMb2NhbERhdGVUaW1lIG5vdyA9IExvY2FsRGF0ZVRpbWUubm93KCk7CgkJU3lzdGVtLm91dC5wcmludGxuKG5vdy5mb3JtYXQoRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKCLku4rml6Xjga95eXl55bm0TU3mnIhkZOaXpeOBp+OBmeOAgiIpKSk7CgoJCWludCB5ZWFyID0gaW5wdXROdW1iZXIoIuS9leW5tOOBruOCq+ODrOODs+ODgOODvOOCkuimi+OBvuOBmeOBi++8nzIwMDDvvZ4yMDQw44G+44Gn44Gu5pWw5a2X44KS5YWl5Yqb44GX44Gm5LiL44GV44GE44CCPiAiLCAyMDAwLCAyMDQwKTsKCQlpbnQgbW9udGggPSBpbnB1dE51bWJlcigi5L2V5pyI44Gu44Kr44Os44Oz44OA44O844KS6KaL44G+44GZ44GL77yfMe+9njEy44G+44Gn44Gu5pWw5a2X44KS5YWl5Yqb44GX44Gm5LiL44GV44GE44CCPiAiLCAxLCAxMik7CgoJCVN5c3RlbS5vdXQucHJpbnRsbihTdHJpbmcuZm9ybWF0KCIgICAgICVk5bm0ICVk5pyIIiwgeWVhciwgbW9udGgpKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIuaXpSDmnIgg54GrIOawtCDmnKgg6YeRIOWcnyIpOwoJCWludCB5b3ViaSA9IGdldERheU9mV2Vlayh5ZWFyLCBtb250aCwgMSkgLSAxOwoJCVN5c3RlbS5vdXQucHJpbnQoU3RyaW5nLmZvcm1hdCgiJS0iICsgKHlvdWJpICogMykgKyAicyIsICIiKSk7CgkJaW50IGxhc3REYXkgPSBnZXRMYXN0RGF5KHllYXIsIG1vbnRoKTsKCQlmb3IgKGludCBkYXkgPSAxOyBkYXkgPD0gbGFzdERheTsgZGF5KyspIHsKCQkJU3lzdGVtLm91dC5wcmludChTdHJpbmcuZm9ybWF0KCIlMmQgIiwgZGF5KSk7CgkJCWlmIChnZXREYXlPZldlZWsoeWVhciwgbW9udGgsIGRheSkgPT0gQ2FsZW5kYXIuU0FUVVJEQVkpIHsKCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiIik7CgkJCX0KCQl9CgkJU3lzdGVtLm91dC5wcmludGxuKCIiKTsKCX0KfQo=