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.