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).