And yet in Free Pascal, I read the full set.
This is the program I used to validate the input. What have I missed?
program Wtpz2001G;
// www.spoj.com/problems/WTPZ2001G
// someone believes bad input data - let's check it
{$ASSERTIONS ON}
uses
SysUtils;
const
MaxNumRows = 10;
MaxNumColumns = 10;
MaxNumTurns = 1000;
type
StringArray = array of string;
function OnlyDigits(const s: string): boolean;
var
i: longint;
begin
OnlyDigits := false;
for i := 1 to Length(s) do
if (s[i] < '0') or (s[i] > '9') then exit;
OnlyDigits := true;
end;
function OnlyDigitsAndSpaces(const s: string): boolean;
var
i: longint;
begin
OnlyDigitsAndSpaces := false;
for i := 1 to Length(s) do begin
if s[i] = ' ' then continue;
if (s[i] < '0') or (s[i] > '9') then exit;
end;
OnlyDigitsAndSpaces := true;
end;
procedure Split(str: string; const delimiter: string; var fields: StringArray);
procedure AddField(const f: string);
var
c: integer;
begin
c := Length(fields);
SetLength(fields, c + 1);
fields[c] := f;
end;
var
p: integer;
f: string;
begin
SetLength(fields, 0);
p := Pos(delimiter, str);
while p > 0 do begin
f := Copy(str, 1, p - 1);
AddField(f);
Delete(str, 1, p + length(delimiter) - 1);
p := Pos(delimiter, str);
end;
if str <> '' then
AddField(str);
end;
var
numTests, t, numRows, numColumns, numTurns, r, c, i: longint;
s: string;
fields: StringArray;
begin
readln(s);
Assert(not EOF);
Assert(OnlyDigits(s));
Split(s, ' ', fields);
Assert(Length(fields) = 1);
numTests := StrToInt(fields[0]);
Assert((1 <= numTests) and (numTests <= 10));
for t := 1 to numTests do begin
readln(s);
Assert(not EOF);
Assert(Trim(s) = s);
Assert(Trim(s) <> '');
Assert(Pos(' ', s) = 0);
Assert(OnlyDigitsAndSpaces(s));
Split(s, ' ', fields);
Assert(Length(fields) = 3);
numRows := StrToInt(fields[0]);
numColumns := StrToInt(fields[1]);
numTurns := StrToInt(fields[2]);
Assert((1 <= numRows) and (numRows <= MaxNumRows));
Assert((1 <= numColumns) and (numColumns <= MaxNumColumns));
Assert((1 <= numTurns) and (numTurns <= MaxNumTurns));
for i := 1 to numTurns do begin
readln(s);
if (t < numTests) or (i < numTurns) then
Assert(not EOF);
Assert(Trim(s) = s);
Assert(Trim(s) <> '');
Assert(Pos(' ', s) = 0);
Assert(OnlyDigitsAndSpaces(s));
Split(s, ' ', fields);
Assert(Length(fields) = 2);
r := StrToInt(fields[0]);
c := StrToInt(fields[1]);
Assert((1 <= r) and (r <= numRows));
Assert((1 <= c) and (c <= numColumns));
end;
end;
writeln('Done');
end.