comment De geit, de kool en de wolf. L. Meertens, R 799, LM 070862/2099; begin integer wv, zv, lv, mv, uv, wt, zt, lt, mt, ut, k, j, q, deadend; integer procedure IN; IN:= read; begin integer array van, tot[0 : 1, 0 : IN], mog[0 : IN]; procedure OUT (sit); value sit; integer sit; begin integer h, b, g, k, w; if sit = 0 then begin NLCR; PRINTTEXT ("oever rivier oever"); NLCR end; h:= sit % 2; w:= sit - h - h; sit:= h % 2; k:= h - sit - sit; b:= sit % 2; g:= sit - b - b; NLCR; h:= 0; ZZZ: if g = h then PRINTTEXT ("geit "); if k = h then PRINTTEXT ("kool "); if w = h then PRINTTEXT ("wolf "); if h = 1 then goto Q1lwoO; TAB; if b = 1 then SPACE (10); PRINTTEXT ("boot "); h:= 1; goto ZZZ; Q1lwoO: end; procedure TOT (sit, mog); value sit; integer sit; integer array mog; begin integer b, g, k, w; procedure z (b, g, k, w); integer b, g, k, w; if b = g | k != g & g != w then begin mog[0]:= mog[0] + 1; mog[mog[0]]:= 8 * b + 4 * g + k + k + w end; b:= sit % 2; w:= sit - b - b; g:= b % 2; k:= b - g - g; b:= g % 2; g:= g - b - b; mog[0]:= 0; z (1 - b, g, k, w); if b = g then z (1 - b, 1 - g, k, w); if b = k then z (1 - b, g, 1 - k, w); if b = w then z (1 - b, g, k, 1 - w) end; procedure VAN (sit, mog); value sit; integer sit; integer array mog; TOT (sit, mog); STANDARD: van[0, 0]:= IN; tot[0, 0]:= IN; deadend:= IN; mv:= zv:= mt:= zt:= 0; uv:= ut:= -1; COMPARE: lv:= mv; lt:= mt; mv:= uv + 1; mt:= ut + 1; uv:= zv; ut:= zt; k:= lv; q:= mt; if (uv - lv + 1) * (ut - mt + 1) > (ut - lt + 1) * (uv - mv + 1) then begin k:= mv; q:= lt end; for k:= k step 1 until uv do for j:= q step 1 until ut do if van[0, k] = tot[0, j] then go to SOLUTION; SEARCH: for wv:= mv step 1 until uv do begin TOT (van[0, wv], mog); for k:= 1 step 1 until mog[0] do begin q:= mog[k]; for j:= 0 step 1 until zv do if van[0, j] = q then go to V reject; zv:= zv + 1; van[0, zv]:= q; van[1, zv]:= wv; V reject: end end; for wt:= mt step 1 until ut do begin VAN (tot[0, wt], mog); for k:= 1 step 1 until mog[0] do begin q:= mog[k]; for j:= 0 step 1 until zt do if tot[0, j] = q then go to T reject; zt:= zt + 1; tot[0, zt]:= q; tot[1, zt]:= wt; T reject: end end; if zv != uv & zt != ut then go to COMPARE; OUT (deadend); go to END; SOLUTION: if k != 0 then begin OUT (van[0, 0]); for q:= van[1, k] while q != 0 do begin van[1, k]:= -1; k:= q end; van[1, k]:= -1; k:= k - 1; for k:= k + 1 while van[0, k] != tot[0, j] do if van[1, k] = -1 then OUT (van[0, k]) end; if j != 0 then for j:= j, tot[1, j] while j != 0 do OUT (tot[0, j]); OUT (tot[0, 0]); END: end end