88 lines
1.5 KiB
Plaintext
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.
|