J'ai un tableau unidimensionnel qui signifie table d'échecs. Je voudrais trouver toutes les positions que le chevalier pourrait attaquer. Par exemple, ont 3x3 table d'échecs (K est Knight, X est la position d'attaque):prologue, attaque de chevalier
---------------
| X | | |
---------------
| | | K |
---------------
| X | | |
---------------
et pour cette table, dans le programme de Prolog je voudrais avoir un tableau:
-------------------------------------
| X | | | | | K | X | | |
-------------------------------------
Je veux d'écrire le programme universel pour tous les cas - table 3x3, 4x4, 5x5, etc.
J'ai essayé:
control(Table, N, Pos, NewTable) :- insert(Table, Pos, 'k' , TempTable1, 1),
insert(TempTable1, Pos-N*2+1, 'x' , TempTable2, 1),
insert(TempTable2, Pos-N*2-1, 'x' , TempTable3, 1),
insert(TempTable3, Pos-N +2, 'x' , TempTable4, 1),
insert(TempTable4, Pos-N -2, 'x' , TempTable5, 1),
insert(TempTable5, Pos+N*2+1, 'x' , TempTable6, 1),
insert(TempTable6, Pos+N*2-1, 'x' , TempTable7, 1),
insert(TempTable7, Pos+N +2, 'x' , TempTable8, 1),
insert(TempTable8, Pos+N -2, 'x' , NewTable, 1).
Il ya N - est la taille de la table (3), position Pos - chevalier. "Insérer" est OK, mais "contrôle" ne fonctionne pas correctement:
?- control([0,0,0,0,0,0,0,0,0], 3, 6, R).
R = [x, 0, 0, 0, x, k, x, 0, 0].
devrait être R = [x, 0, 0, 0, 0, k, x, 0, 0]
.
Des idées, comment changer le prédicat "contrôle"?
Je suppose que cela sera beaucoup plus facile si vous modélisez la table en tant que tableau 2d et passez les coordonnées X et Y à 'control'. – Cephalopod