WolframLanguage (Mathematica) 187 байт
Можливо, буде знайдено деяке зменшення розміру. Пояснення до наступного ...
t=ToString;p=PadLeft;d=DateObject;Cases[""<>{t/@p[#,If[Length@#<5,4, 5]],t/@ p[#2,2],t/@p[#3,2]}&@@@(IntegerDigits/@#[[1]]&/@DayRange[d@#,d@#2]),x_/;PalindromeQ@x&&PrimeQ@ToExpression@x]&
Тестові справи
t = ToString; p = PadLeft; d = DateObject;
Cases["" <> {t /@ p[#, If[Length@# < 5, 4, 5]], t /@ p[#2, 2],
t /@ p[#3, 2]} & @@@ (IntegerDigits /@ #[[1]] & /@ DayRange[d@#, d@#2]),
x_ /; PalindromeQ@x && PrimeQ@ToExpression@x] &[{10011, 10, 1}, {10017, 1, 1}]
(* {"100111001", "100131001", "100161001"} *)
Пояснення коду
DayRange[d@#,d@#2]
повертає всі дати між {10011, 10, 1}
та {10017, 1, 1}
. У цьому випадку він повертається приблизно через 5 років, 4 місяці дат (саме 1920-і дати). Випускні роки враховуються.
Дати повертаються у стандартному форматі Wolfram. Наприклад, перша дата з’явиться як DateObject[List[1,1,1],"Day","Gregorian",-5.
] `
#[[1]] & /@
видалить частину дати в кожну дату, яка стосується нас. У прикладі, DateObject[List[1,3,7],"Day","Gregorian",-5.]
повертає скорочену дату, {1,3,7}
.
t/@p[#3,2]}
або ToString/@Padleft[#3,2]
прокладки третього елемента, а саме 7 стоячи "7 числа місяця" як "07"
. Аналогічні накладки передбачені для однозначного символу для березня місяця, а саме 3
повертаються як "03"
.
p[#, If[Length@# < 5, 4, 5]]
прокладки року з нулями, щоб досягти довжини 4 або 5-значного рядка. У цьому випадку січень 1
повертається як "00001".
"" <>...
приєднується до струн. У цьому випадку вона повертається "000010307"
.
Cases[...x_ /; PalindromeQ@x && PrimeQ@ToExpression@x]
повертає ті випадки серед дат 1920 р., що є паліндромами та праймерами.
02-29
існує лише роки, які діляться на 400 або (діляться на 4, а не діляться на 100).