RosettaCodeData/Task/ABC-problem/Zonnon/abc-problem.zonnon

88 lines
1.5 KiB
Plaintext

module Main;
type
Block = record
l,r: char;
used: boolean;
end Block;
var
blocks: array 20 of Block;
procedure Exists(c: char): boolean;
var
i: integer;
r: boolean;
begin
r := false;i := 0;
while ~r & (i < len(blocks)) do
if ~(blocks[i].used) then
r := (blocks[i].l = cap(c)) or (blocks[i].r = cap(c));
blocks[i].used := r;
end;
inc(i)
end;
return r
end Exists;
procedure CanMakeWord(s: string);
var
i: integer;
made: boolean;
begin
made := true;
for i := 0 to len(s) - 1 do
made := made & Exists(s[i])
end;
writeln(s:20,"?",made);
Clean()
end CanMakeWord;
procedure Clean();
var
i: integer;
begin
for i := 0 to len(blocks) - 1 do
blocks[i].used := false
end
end Clean;
procedure InitBlock(i:integer;l,r:char);
begin
blocks[i].l := l;blocks[i].r := r;
blocks[i].used := false;
end InitBlock;
procedure Init;
begin
InitBlock(0,'B','O');
InitBlock(1,'X','K');
InitBlock(2,'D','Q');
InitBlock(3,'C','Q');
InitBlock(4,'N','A');
InitBlock(5,'G','T');
InitBlock(6,'R','E');
InitBlock(7,'T','G');
InitBlock(8,'Q','D');
InitBlock(9,'F','S');
InitBlock(10,'J','W');
InitBlock(11,'H','U');
InitBlock(12,'V','I');
InitBlock(13,'A','N');
InitBlock(14,'O','B');
InitBlock(15,'E','R');
InitBlock(16,'F','S');
InitBlock(17,'L','Y');
InitBlock(18,'P','C');
InitBlock(19,'Z','M')
end Init;
begin
Init();
CanMakeWord("A");
CanMakeWord("BARK");
CanMakeWord("BOOK");
CanMakeWord("TREAT");
CanMakeWord("COMMON");
CanMakeWord("confuse");
end Main.