WolframLanguage (Mathematica) 187 bytes
Pode haver alguma redução no tamanho a ser encontrada. Explicação a seguir ...
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]&
Casos de teste
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"} *)
Explicação do código
DayRange[d@#,d@#2]
retorna todas as datas entre {10011, 10, 1}
e {10017, 1, 1}
. Nesse caso, ele retorna aproximadamente 5 anos, 4 meses de datas (precisamente 1920 datas). Os anos bissextos são levados em consideração.
As datas são retornadas na formatação padrão da Wolfram. Por exemplo, a primeira data aparecerá como DateObject[List[1,1,1],"Day","Gregorian",-5.
] `
#[[1]] & /@
removerá a parte da data, em cada data, que nos interessa. No exemplo, DateObject[List[1,3,7],"Day","Gregorian",-5.]
retorna a data abreviada {1,3,7}
,.
t/@p[#3,2]}
ou ToString/@Padleft[#3,2]
preenche o terceiro elemento, ou seja, o 7 em pé "para o 7º dia do mês" como "07"
. Preenchimento semelhante é fornecido para o símbolo de um dígito para o mês de março, ou seja, 3
é retornado como "03"
.
p[#, If[Length@# < 5, 4, 5]]
preenche o ano com zeros para atingir o comprimento de uma sequência de 4 ou 5 dígitos. Nesse caso, janeiro, ou seja 1
, é retornado como "" 00001 "'.
"" <>...
junta as cordas. Nesse caso, ele retorna "000010307"
.
Cases[...x_ /; PalindromeQ@x && PrimeQ@ToExpression@x]
retorna aqueles casos, entre as datas de 1920, que são palíndromos e primos.
02-29
existe apenas para os anos divisíveis por 400 ou (divisível por 4 e não divisível por 100).