// A pandigital number is an integer that contains each digit from 0 to 9
// at least once, with the condition that the leading digit must be nonzero
// for example, 1023456987 is a pandigital number
program PandigitalCheck;
uses
crt;
function IsPandigitalRange(num: longint; startDigit: integer; endDigit: integer): boolean;
var
s, expected, sorted: string;
digits: array[1..20] of char;
i, j, len: integer;
temp: char;
begin
str(num, s);
// Build the expected digit string
expected := '';
for i := startDigit to endDigit do
expected := expected + chr(ord('0') + i);
// Sort digits of the number
len := length(s);
for i := 1 to len do
digits[i] := s[i];
// Simple bubble sort (Turbo Pascal friendly)
for i := 1 to len - 1 do
for j := i + 1 to len do
if digits[j] < digits[i] then
begin
temp := digits[i];
digits[i] := digits[j];
digits[j] := temp;
end;
sorted := '';
for i := 1 to len do
sorted := sorted + digits[i];
IsPandigitalRange := (sorted = expected);
end;
begin
writeln(IsPandigitalRange(123456789, 1, 9));
writeln(IsPandigitalRange(1023456789, 0, 9));
writeln(IsPandigitalRange(987654321, 1, 9));
writeln(IsPandigitalRange(123456780, 1, 9));
writeln(IsPandigitalRange(123456780, 1, 9));
writeln(IsPandigitalRange(123455789, 1, 9));
writeln(IsPandigitalRange(12345, 1, 9));
end.
(*
run:
TRUE
TRUE
TRUE
FALSE
FALSE
FALSE
FALSE
*)