Skip to content

Instantly share code, notes, and snippets.

@alexjosesilva
Created February 22, 2024 18:27
Show Gist options
  • Save alexjosesilva/6d5064d125cf129540ed66095d198235 to your computer and use it in GitHub Desktop.
Save alexjosesilva/6d5064d125cf129540ed66095d198235 to your computer and use it in GitHub Desktop.
Programacao Logica
% Predicado para verificar se uma rainha pode ser colocada em uma posição.
pode_colocar(_, []).
pode_colocar(Rainha, [Coluna/Linha|OutrasRainhas]) :-
Rainha #\= Linha,
Rainha + Coluna #\= Linha,
Rainha - Coluna #\= Linha,
pode_colocar(Rainha, OutrasRainhas).
% Predicado principal para posicionar as oito rainhas.
oito_rainhas([], []).
oito_rainhas([Coluna/Linha|OutrasRainhas], [Rainha|Resto]) :-
oito_rainhas(OutrasRainhas, Resto),
member(Rainha, [1,2,3,4,5,6,7,8]),
pode_colocar(Rainha, [Coluna/Linha|OutrasRainhas]).
% Predicado para imprimir o tabuleiro.
imprimir_tabuleiro([]).
imprimir_tabuleiro([Coluna/Linha|OutrasRainhas]) :-
imprimir_tabuleiro(OutrasRainhas),
write('|'),
between(1, 8, X),
(member(X, [Coluna]), write('Q'); write('.')),
write('|'),
nl.
% Predicado para iniciar a resolução do problema.
resolver_oito_rainhas :-
oito_rainhas([1/_1, 2/_2, 3/_3, 4/_4, 5/_5, 6/_6, 7/_7, 8/_8], Tabuleiro),
imprimir_tabuleiro(Tabuleiro).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment