Skip to content

Instantly share code, notes, and snippets.

@pedrogk
Created November 17, 2015 05:00
Show Gist options
  • Save pedrogk/d048d13308dc47a623a8 to your computer and use it in GitHub Desktop.
Save pedrogk/d048d13308dc47a623a8 to your computer and use it in GitHub Desktop.
Prolog code for finding magic squares 3x3
/* condiciones iniciales */
numero(1).
numero(2).
numero(3).
numero(4).
numero(5).
numero(6).
numero(7).
numero(8).
numero(9).
ecuacion(X,Y,Z,R) :- R is X + Y + Z. /* la suma siempre debe dar R */
cuadrado:-
numero(A), numero(B), numero(C),
numero(D), numero(E), numero(F),
numero(G), numero(H), numero(I),
/* vienen las condiciones para los números: */
/* no debe haber números repetidos... */
A=\=B, A=\=C, A=\=D, A=\=E, A=\=F, A=\=G, A=\=H, A=\=I,
B=\=C, B=\=D, B=\=E, B=\=F, B=\=G, B=\=H, B=\=I,
C=\=D, C=\=E, C=\=F, C=\=G, C=\=H, C=\=I,
D=\=E, D=\=F, D=\=G, D=\=H, D=\=I,
E=\=F, E=\=G, E=\=H, E=\=I,
F=\=G, F=\=H, F=\=I,
G=\=H, G=\=I,
H=\=I,
/* condiciones necesarias para que sea cuadrado mágico */
ecuacion(A, B, C, R),
ecuacion(D, E, F, R),
ecuacion(G, H, I, R),
ecuacion(A, D, G, R),
ecuacion(B, E, H, R),
ecuacion(C, F, I, R),
ecuacion(A, E, I, R),
ecuacion(G, E, C, R),
write(A), write(' '), write(B), write(' '), write(C), nl,
write(D), write(' '), write(E), write(' '), write(F), nl,
write(G), write(' '), write(H), write(' '), write(I), nl,nl,
fail. /* dame todas las soluciones */
@masked928
Copy link

como corro el programa

@pedrogk
Copy link
Author

pedrogk commented Feb 23, 2022

Hola. Puedes ejecutarlo en un runner de Prolog, como por ejemplo Swish.
En el artículo donde esto originalmente se publicó, viene más explicación.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment