WolframLanguage (Mathematica) 187 octets
Il peut y avoir une certaine réduction de taille à trouver. Explication à suivre ...
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]&
Cas de test
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"} *)
Explication du code
DayRange[d@#,d@#2]
renvoie toutes les dates entre {10011, 10, 1}
et {10017, 1, 1}
. Dans ce cas, il renvoie environ 5 ans, 4 mois de dates (précisément 1920 dates). Les années bissextiles sont prises en compte.
Les dates sont renvoyées au format standard Wolfram. Par exemple, la première date apparaîtra comme DateObject[List[1,1,1],"Day","Gregorian",-5.
] `
#[[1]] & /@
supprimera la partie de la date, à chaque date, qui nous concerne. Dans l'exemple, DateObject[List[1,3,7],"Day","Gregorian",-5.]
renvoie la date abrégée {1,3,7}
.
t/@p[#3,2]}
ou ToString/@Padleft[#3,2]
garnit le troisième élément, à savoir, le 7 debout "pour le 7e jour du mois" comme "07"
. Un rembourrage similaire est fourni pour le symbole à un chiffre du mois de mars, à savoir, 3
est renvoyé sous la forme "03"
.
p[#, If[Length@# < 5, 4, 5]]
remplit l'année de zéros pour atteindre la longueur d'une chaîne de 4 ou 5 chiffres. Dans ce cas, janvier, à savoir 1
, est renvoyé sous la forme "" 00001 "".
"" <>...
rejoint les cordes. Dans ce cas, il revient "000010307"
.
Cases[...x_ /; PalindromeQ@x && PrimeQ@ToExpression@x]
renvoie les cas, parmi les 1920 dates, qui sont des palindromes et des nombres premiers.
02-29
n'existe que pour les années divisibles par 400 ou (divisible par 4 et non divisible par 100).