Question: Challenge: Number of Palindromic Numbers
Challenge: provide the implementation of a custom Delphi function to locate all palindromic numbers from 1 to maxNumber and return the number of found palindromes as a result of the function.
The code is submitted for the Number of Palindromic Numbers Delphi Challenge
Answer: Number of palindromic numbers entry by Philippe Guglielmetti (Switzerland):
function PhilippeGuglielmetti_NumberOfPalindromes(const maxNumber : int64) : int64;
const A050250:array[0..18] of integer
=(0,9, 18, 108, 198, 1098, 1998, 10998, 19998, 109998, 199998, 1099998,
1999998, 10999998, 19999998, 109999998, 199999998, 1099999998, 1999999998) ;
const pow10:array[0..9] of integer
=(1,10,100,1000,10000,100000, 1000000,10000000,10000000,1000000000) ;
var
n,m,j,k:Integer;
d:array[0..18] of Integer;
begin
m:=0; n:=maxNumber;
while n>0 do begin // extract digits
d[m]:=n mod 10;
n:=n div 10;
inc(m) ;
end;
n:=m-1; // n=Trunc(log10(maxNumber))
Result:=A050250[n];
m:=n; j:=0; k:=n div 2;
dec(d[n]) ; // because we counted palindromes to 1000..00
while m-j>=2 do begin // loop from outer digits to inner
Result:=result+d[m]*(pow10[k]) ;
dec(m) ; inc(j) ; dec(k) ;
end;
inc(Result,d[m]) ; // handle 1 or 2 center digits
if d[j]>=d[m] then inc(Result) ;
end;
Test data: MAXNUMBER = 10 000 000
Carlos's speed result: 950 nanoseconds.
Explore the list of all accepted entries for the Number of Palindromic Numbers Delphi Challenge.

