


 
 
Oni povas peti trovi ajnan unu solvon; aŭ trovi ĉiujn solvojn; aŭ trovi ĉiujn neekvivalentajn solvojn, t.e. kiuj ne estas produkteblaj unuj el aliaj per simplaj rotacioj aŭ simetriaj speguladoj.
En komputoscienco tiun problemon detale studis N. Wirth; ĝi estas interesa kiel ekzemplo pri la metodo de provoj kaj malavancoj kaj instrua pri maniero prezenti ŝaktabulajn aranĝojn per racie elektitaj datumstrukturoj.
horVak[y] KAJ sinko[x + y] KAJ kresko[x − y]
PROGRAMO damoj(eligo); 
 
VAR horNro: TABELO [1..8] EL entjera; {damoj en la fakoj (x, horNro[x])} 
    horVak: TABELO [1..8] EL Bulea;   {horVak[y] SSE la vertikalo y vakas} 
    kresko: TABELO [-7..7] EL Bulea;  {la kreska (/) diag. x-y=i vakas} 
    sinko:  TABELO [2..16] EL Bulea;  {la sinka (\) diag. x+y=i vakas} 
    n:      entjera; 
 
PROCEDURO pretaTabulo; 
    VAR  x: entjera; 
STARTO 
    POR x:=1 SUPRE 8 FARU skribu(sgn(nro('a')-1+x):2, horNro[x]:-2); 
    skribuLin; 
FINO; 
 
PROCEDURO trovuHorizontalon(x: entjera); 
  VAR y:entjera; 
 
  PROCEDURO markuVakadon(vakstato: Bulea);      { ingita proceduro } 
    STARTO 
       horNro[x] := y; 
       horVak[y] := vakstato; 
       sinko[x + y] := vakstato; 
       kresko[x - y] := vakstato; 
    FINO; 
  STARTO                      { la korpo de "trovuHorizontalon": } 
    POR y := 1 SUPRE 8 FARU 
    SE horVak[y] KAJ sinko[x + y] KAJ kresko[x - y] TIAM STARTO 
    markuVakadon(malvero);              { okupu la fakon  (x, y) } 
    SE x < 8 TIAM trovuHorizontalon(x + 1) ALIE pretaTabulo; 
    markuVakadon(vero);               { malokupu la fakon (x, y) } 
  FINO 
FINO;                 { la proceduro "trovuHorizontalon" finitas } 
 
STARTO  { la korpo de la programo "damoj": } 
  POR n :=  1 SUPRE  8 FARU horVak[n] := vero;  { komencvalorizo } 
  POR n := -7 SUPRE  7 FARU kresko[n] := vero; 
  POR n :=  2 SUPRE 16 FARU sinko[n]  := vero; 
  trovuHorizontalon(1);                 { la radika procedurvoko } 
FINO.