WolframLanguage (Mathematica) 187 bayt
Bulunacak boyutta bir miktar azalma olabilir. Takip edilecek açıklama ...
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]&
Test senaryoları
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"} *)
Kod açıklaması
DayRange[d@#,d@#2]
{10011, 10, 1}
ve arasındaki tüm tarihleri döndürür {10017, 1, 1}
. Bu durumda, yaklaşık 5 yıl, 4 ay tarih (tam olarak 1920 tarih) döndürür. Artık yıllar dikkate alınır.
Tarihler Wolfram standart biçimlendirmesi ile döndürülür. Örneğin, ilk tarih DateObject[List[1,1,1],"Day","Gregorian",-5.
] `
#[[1]] & /@
tarihin, her tarihte bizi ilgilendiren kısmını kaldıracaktır. Örnekte, DateObject[List[1,3,7],"Day","Gregorian",-5.]
kısaltılmış tarihi döndürür {1,3,7}
.
t/@p[#3,2]}
veya ToString/@Padleft[#3,2]
üçüncü elemanı, yani 7 ayakta "ayın 7. günü" olarak doldurur "07"
. Mart ayı için tek haneli sembol için de benzer dolgu sağlanır, yani 3
olarak döndürülür "03"
.
p[#, If[Length@# < 5, 4, 5]]
4 veya 5 basamaklı bir dizenin uzunluğuna ulaşmak için yılı sıfırlarla doldurur. Bu durumda Ocak, yani 1
"00001" olarak döndürülür.
"" <>...
dizeleri birleştirir. Bu durumda geri döner "000010307"
.
Cases[...x_ /; PalindromeQ@x && PrimeQ@ToExpression@x]
1920 tarihleri arasında palindrom ve asal olan vakaları döndürür.
02-29
Sadece 400 ile bölünebilen veya 4 ile bölünebilen ve 100 ile bölünemeyen yıllar için vardır.