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 Carlos Trevino (México):
function CarlosTrevino_NumberOfPalindromes(const maxNumber : int64) : int64;
var
N,j, Mult: Int64;
k: Integer;
Even: Boolean;
Digits: Array[1..20] of Integer;
NDigits: Integer;
Mid,Top: Integer;
TopPal: Integer;
MultI, LowNum, HighNum,HighNumPal: Integer;
begin
if MaxNumber<1 then
begin
result:=0;
exit;
end;
N:=MaxNumber div 10;
result:=0;
j:=9;
Even:=False;
Ndigits:=1;
Digits[NDigits]:=MaxNumber mod 10;
while N>0 do
begin
result:=result+j;
if Even then j:=j*10;
Even:=Not Even;
Inc(Ndigits) ;
Digits[Ndigits]:=N mod 10;
N:=N div 10;
end;
if NDigits=1 then
result:=MaxNumber
else
begin
Mid:=Ndigits div 2;
Top:=NDigits;
LowNum:=0;
HighNum:=0;
HighNumPal:=0;
Top:=Mid +(NDigits mod 2) ;
TopPal:=NDigits;
MultI:=1;
for k := 1 to Mid do
begin
Inc(Top) ;
LowNum:=LowNum+Digits[k]*MultI;
HighNum:=HighNum+Digits[Top]*MultI;
HighNumPal:=HighNumPal+Digits[TopPal]*MultI;
Dec(TopPal) ;
MultI:=MultI * 10;
end;
J:=(HighNum-(MultI div 10)) ;
if (NDigits mod 2)=1 then
J:=j*10+Digits[Mid+1];
if HighNumPal<=LowNum then
J:=j+1;
result:=result+j;
end;
end;
Test data: MAXNUMBER = 10 000 000
Carlos's speed result: 1550 nanoseconds.
Explore the list of all accepted entries for the Number of Palindromic Numbers Delphi Challenge.

