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