Today   (2020-02-02,   at the time of this writing)   happens to be a palindrome,   without the hyphens,   not only for those countries which express their dates in the   yyyy-mm-dd   format but,   unusually,   also for countries which use the   dd-mm-yyyy   format.



Task
Write a program which calculates and shows the next 15 palindromic dates for those countries which express their dates in the   yyyy-mm-dd   format.




on palindromeDates(startYear, targetNumber)
    script o
        property output : {}
    end script
 
    set counter to 0
    set y to startYear
    repeat until ((counter = targetNumber) or (y > 9999))
        -- Derive a month number from the last two digits of the current year number. It's valid if it's in the range 1 to 12.
        set m to y mod 10 * 10 + y mod 100 div 10
        if ((m > 0) and (m < 13)) then
            -- Derive a day number from the first two digits of the year number.
            set d to y div 100 mod 10 * 10 + y div 1000
            -- It's valid if it's between 1 and 28. Otherwise, if it's between 29 and 31, check that it fits the month and year.
            -- In fact though, it'll only ever be 2 or 12 in the period containing the 15 palindromic dates after 2020.
            if ((d > 0) and ¬
                ((d < 29) ¬
                    or ((d < 31) and ((m is not 2) or ((d is 29) and (y mod 4 is 0) and ((y mod 100 > 0) or (y mod 400 is 0))))) ¬
                    or ((d is 31) and (m is not in {2, 4, 9, 6, 11})))) then
                -- If the figures represent a valid date, add a yyyy-mm-dd format text to the end of the output list.
                tell ((100000000 + y * 10000 + m * 100 + d) as text) to ¬
                    set end of o's output to text 2 thru 5 & ("-" & text 6 thru 7) & ("-" & text 8 thru 9)
                set counter to counter + 1
            end if
        end if
        set y to y + 1
    end repeat
 
    return o's output
end palindromeDates
 
palindromeDates(2021, 15)