begin; comment pentomino, 130968 ; integer SCORE, NUMMER, LENGTE, BREEDTE, AANTALSTENEN, AANTALSTANDEN, I, J, K, TELLER, LB; LENGTE := READ; BREEDTE := READ; AANTALSTENEN := READ; AANTALSTANDEN := READ; LB := LENGTE (BREEDTE - 1); begin; integer array BORD[-39 : 100], STANDEN, WIJZER[1 : AANTALSTENEN], INFORMATIE[1 : 8 AANTALSTANDEN]; Boolean array ONGEBRUIKT[1 : AANTALSTENEN]; 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 AANTALSTENEN 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 = AANTALSTENEN 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 AANTALSTENEN 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 AANTALSTENEN do ONGEBRUIKT[I] := true; SCORE := NUMMER := 0; NLCR; PRINTTEXT("The first 7 solutions:"); NLCR; NLCR; NLCR; UP(1, 1); EX: ; end ; end;