WolframLanguage (Mathematica) 187 bajtów
Może wystąpić pewne zmniejszenie rozmiaru. Wyjaśnienie do naśladowania ...
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]&
Przypadki testowe
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”} *)
Objaśnienie kodu
DayRange[d@#,d@#2]
zwraca wszystkie daty pomiędzy {10011, 10, 1}
i {10017, 1, 1}
. W tym przypadku zwraca około 5 lat, 4 miesiące dat (dokładnie 1920 dat). Lata przestępne są brane pod uwagę.
Daty są zwracane w standardowym formacie Wolfram. Na przykład pierwsza data pojawi się jako DateObject[List[1,1,1],"Day","Gregorian",-5.
] `
#[[1]] & /@
usunie część daty, w każdej dacie, która nas dotyczy. W tym przykładzie DateObject[List[1,3,7],"Day","Gregorian",-5.]
zwraca skróconą datę {1,3,7}
.
t/@p[#3,2]}
lub ToString/@Padleft[#3,2]
wypełnia trzeci element, mianowicie 7, stojąc „na 7 dzień miesiąca” jak "07"
. Podobne wypełnienie jest zapewnione dla jednocyfrowego symbolu dla marca, mianowicie 3
jest zwracane jako "03"
.
p[#, If[Length@# < 5, 4, 5]]
wypełnia rok zerami, aby osiągnąć długość 4 lub 5 cyfr ciągu. W tym przypadku styczeń 1
jest zwrócony jako „00001”.
"" <>...
łączy struny. W takim przypadku zwraca "000010307"
.
Cases[...x_ /; PalindromeQ@x && PrimeQ@ToExpression@x]
zwraca te przypadki spośród dat z 1920 r., które są palindromami i liczbami pierwszymi.
02-29
istnieje tylko przez lata, które można podzielić przez 400 lub (podzielne przez 4 i niepodzielne przez 100).