Considere um puzzle de palavras cruzadas vazio. Um exemplo pode ser o especificado pelos factos
dimensao(5). % trata-se sempre de um puzzle quadrado
preto(1,3). % significa que o quadrado 1,3 e' preto
preto(2,3).
preto(3,2).
preto(4,3).
preto(5,1).
preto(5,5).
que representam o puzzle vazio:
| ;SPMamp; | ||||
| SPMamp; | ||||
| SPMamp; | ||||
| #770#> | <#774#> | |||
| #780#> | #784#> | |||
& &
& & & &
SPMamp; & & & & & & &
SPMamp; & & & & & & &
& & & & & & & &
Considere depois uma lista de palavras. Por exemplo
& & & &
& & & &
Considere depois uma lista de palavras. Por exemplo
palavras([do,ore,ma,lis,ur,as,po,so,pirus,oker,al,adam,ik]).
& & & &
Considere depois uma lista de palavras. Por exemplo
palavras([do,ore,ma,lis,ur,as,po,so,pirus,oker,al,adam,ik]).
& & & &
Considere depois uma lista de palavras. Por exemplo
palavras([do,ore,ma,lis,ur,as,po,so,pirus,oker,al,adam,ik]). odas as palavras têm pelo
menos dois caracteres. O objectivo é preencher o puzzle usando todas as palavras
exactamente uma vez. Se isso for impossí
& & & &
Considere depois uma lista de palavras. Por exemplo
palavras([do,ore,ma,lis,ur,as,po,so,pirus,oker,al,adam,ik]). odas as palavras têm pelo
menos dois caracteres. O objectivo é preencher o puzzle usando todas as palavras
exactamente uma vez. Se isso for impossvel, o predicado palavrasCruzadas/1 que
irá desenvolver deve falhar. O seu programa deve dar a solução no argumento de saída
do predicado palavrasCruzadas/1 e na forma de uma lista de palavras na seguinte
ordem: primeiro todas as palavras na horizontal, linha por linha, conforme elas ocorrem da
esquerda para a direita; depois todas as palavras na vertical, coluna por coluna.
Para o exemplo dado acima, teremos
?- palavrasCruzadas(L).
L = [as,po,do,ik,ore,ma,ur,lis,adam,so,al,pirus,oker]
significando que o puzzle é preenchido da seguinte maneira:
| ;SPMamp; | A |
S | ||
| A | S | P | O | |
| D | O | I | K | |
| SPMamp; | A |
|||
| A | O | R | E | |
| SPMamp; | M |
A | ||
| M | A | U | R | |
| #830#> | <#834#> | |||
| M | A | U | R | |
| #840#> | #844#> | |||
| L | I | S | ||
& &
M & A & & U & R
SPMamp; & & & & L & I & S &
SPMamp; & & & & L & I & S &
& & & & & L & I & S &
Se existir mais do que uma solução, o seu programa deve ser capaz de as produzir por
backtracking. Cada quadrado não preto pertence a uma palavra de 2 ou mais caracteres.