begin comment pentomino, 130968;
integer score, nummer, lengte, breedte, aantal stenen, aantal standen,
i, j, k, teller, lb;
lengte:= read; breedte:= read; aantal stenen:= read; aantal standen:= read;
lb:= lengte * (breedte - 1);
begin integer array bord [-39 : 100],
standen, wijzer [1 : aantal stenen],
informatie [1 : 8 * aantal standen];
boolean array ongebruikt [1 : aantal stenen];
procedure output;
begin integer i, j;
score:= score + 1;
SPACE (1);
for j:= 1 step 1 until 2 * lengte do
begin PRINTTEXT (|<-|>); SPACE (1) end ;
comment ABSFIXT (6, 2, time); NLCR;
for i:= 0 step lengte until lb do
begin PRINTTEXT(|<I|>);
for j:= 1 step 1 until lengte - 1 do
begin SPACE (3);
if bord [i + j] |= bord [i + j + 1]
then PRINTTEXT(|<I|>) else SPACE (1)
end ;
SPACE (3); PRINTTEXT(|<I|>); NLCR; SPACE (1);
if i < lb
then begin for j:= 1 step 1 until lengte do
begin if bord [i + j] |= bord [i + j + lengte]
then begin PRINTTEXT (|<-|>); SPACE (1);
PRINTTEXT (|<-|>); SPACE (1)
end
else SPACE (4)
end
end
else for j:= 1 step 1 until 2 * lengte do
begin PRINTTEXT (|<-|>); SPACE (1) end ;
NLCR
end ;
NLCR; NLCR;
if score = 7 then goto ex
end output;
procedure up (veld, kolom); value veld, kolom;
integer veld, kolom;
begin integer i, j, k, r, w, steen, aantal;
nummer:= nummer + 1;
for steen:= 1 step 1 until aantal stenen do
if ongebruikt [steen] then
begin ongebruikt [steen]:= false ;
bord [veld]:= steen;
aantal:= standen [steen] - 1;
for i:= 0 step 1 until aantal do
begin w:= wijzer [steen] + 4 * i;
if bord [informatie [w] + veld] = 0 then
begin if bord [informatie [w + 1] + veld] = 0 then
begin if bord [informatie [w + 2] + veld] = 0 then
begin if bord [informatie [w + 3] + veld] = 0 then
begin for j:= 0, 1, 2, 3 do
bord [informatie [w + j] + veld]:= steen;
if nummer = aantal stenen
then output
else
begin
for k:= kolom step 1 until lengte do
for r:= 0 step lengte until lb do
if bord [r + k] = 0 then goto beet;
beet: up (r + k, k)
end ;
for j:= 0, 1, 2, 3 do
bord [informatie [w + j] + veld]:= 0
end
end
end
end
end ;
ongebruikt [steen]:= true
end ;
bord [veld]:= 0;
down: nummer:= nummer - 1
end up;
teller:= 1;
for i:= 1 step 1 until aantal stenen do
begin j:= read; comment steennummer, wordt niet gebruikt;
wijzer [i]:= teller; standen [i]:= read;
for j:= 1 step 1 until standen [i] do
begin for k:= 0 step 1 until 3 do
informatie [teller + k]:= read;
teller:= teller + 4
end
end ;
for i:= - 39 step 1 until 0,
61 step 1 until 100 do bord [i]:= - 1;
for i:= 1 step 1 until 60 do bord [i]:= 0;
for i:= 1 step 1 until aantal stenen do
ongebruikt [i]:= true ;
score:= nummer:= 0;
NLCR; PRINTTEXT (|<The first 7 solutions:|>); NLCR; NLCR; NLCR;
up (1, 1);
ex:
end
end