Я пытался выполнить это соревнование по код-гольфу в Java 7. Только для тех, кто не знает знать: code-golf должен выполнить определенную задачу как можно меньшим количеством байтов. Очевидно, что Java не является подходящим языком программирования для этого, особенно с такими языками, как Jelly; 05АВ1Е; пиф; и тому подобное, которые выполняют задачи в 1-15 байт, что будет 75-300 в Java, но я просто делаю это для удовольствия.
Вот мой текущий ответ по Java 7. Просто для справки, я также скопирую его сюда:
import java.util.*;String c(int y){String r="";Calendar c=Calendar.getInstance();c.set(1,y);c.set(2,0);for(int i=0;i++<11;c.add(2,1)){c.set(5,c.getActualMaximum(5));if(c.get(7)==2)r+=i+" ";}return r;}
import java.util.*;
class M{
static String c(int year){
String r = "";
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, 0);
for(int i = 0; i++ < 11; calendar.add(Calendar.MONTH, 1)){
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
if(calendar.get(Calendar.DAY_OF_WEEK) == 2){
r += i+" ";
}
}
return r;
}
public static void main(String[] a){
System.out.println(c(1));
System.out.println(c(297));
System.out.println(c(1776));
System.out.println(c(2000));
System.out.println(c(2016));
System.out.println(c(3385));
}
}
Который выводит все 1-индексированные месяцы, последний день месяца которых является понедельником:
1 2 10 **
5
9
1 7
2 10
1 2 10
Как вы, возможно, заметили, когда вы сравниваете мои результаты с результатами связанного испытания, результаты за год 1 неверны.
Кто-нибудь знает, почему? Первоначально я думал, что Calendar.getInstance()
имеет неправильный календарь по умолчанию, поэтому я изменил его на new GregorianCalendar()
, как указано в задаче. Но я уже понял, что это календарь по умолчанию.
Почему за первый год получены неверные результаты?