<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://www.glc.us.es/~jalonso/LCyTM2018/index.php?action=history&amp;feed=atom&amp;title=Bag_puzzle</id>
	<title>Bag puzzle - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://www.glc.us.es/~jalonso/LCyTM2018/index.php?action=history&amp;feed=atom&amp;title=Bag_puzzle"/>
	<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LCyTM2018/index.php?title=Bag_puzzle&amp;action=history"/>
	<updated>2026-07-22T04:52:29Z</updated>
	<subtitle>Historial de revisiones para esta página en el wiki</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://www.glc.us.es/~jalonso/LCyTM2018/index.php?title=Bag_puzzle&amp;diff=108&amp;oldid=prev</id>
		<title>Mjoseh: Página creada con «&lt;source lang = &quot;prolog&quot;&gt; %% Bag puzzle.  %% Juego que consiste en hacer un camino que rodee todos los números del tablero %% siguiendo unas reglas:  %% R1: El camino tiene…»</title>
		<link rel="alternate" type="text/html" href="https://www.glc.us.es/~jalonso/LCyTM2018/index.php?title=Bag_puzzle&amp;diff=108&amp;oldid=prev"/>
		<updated>2019-02-18T09:21:09Z</updated>

		<summary type="html">&lt;p&gt;Página creada con «&amp;lt;source lang = &amp;quot;prolog&amp;quot;&amp;gt; %% Bag puzzle.  %% Juego que consiste en hacer un camino que rodee todos los números del tablero %% siguiendo unas reglas:  %% R1: El camino tiene…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;source lang = &amp;quot;prolog&amp;quot;&amp;gt;&lt;br /&gt;
%% Bag puzzle.&lt;br /&gt;
&lt;br /&gt;
%% Juego que consiste en hacer un camino que rodee todos los números del tablero&lt;br /&gt;
%% siguiendo unas reglas:&lt;br /&gt;
&lt;br /&gt;
%% R1: El camino tiene que ser cerrado.&lt;br /&gt;
%% R2: Todos los números tienen que estar rodeados por el camino.&lt;br /&gt;
%% R3: El número de casillas visibles en toda dirección de una casilla enumerada&lt;br /&gt;
%% tiene que ser igual al número de la casilla.&lt;br /&gt;
&lt;br /&gt;
x(0..n). y(0..m). direccion(v;h).&lt;br /&gt;
pos(X,Y) :- x(X), y(Y).&lt;br /&gt;
%% Generación.&lt;br /&gt;
&lt;br /&gt;
{linea(S,X,Y)} :- direccion(S), x(X), y(Y). &lt;br /&gt;
:- linea(h,n,Y), y(Y).&lt;br /&gt;
:- linea(v,X,m), x(X).&lt;br /&gt;
&lt;br /&gt;
%% Restricciones:&lt;br /&gt;
&lt;br /&gt;
%% R1: El camino tiene que ser cerrado.&lt;br /&gt;
%% Cada punto del camino esta conectado exactamente a otros dos&lt;br /&gt;
&lt;br /&gt;
:- 3 {linea(h,X-1,Y); linea(h,X,Y); linea(v,X,Y); linea(v,X,Y-1)}, en(X,Y).&lt;br /&gt;
:- {linea(h,X-1,Y); linea(h,X,Y); linea(v,X,Y); linea(v,X,Y-1)} 1, en(X,Y).&lt;br /&gt;
&lt;br /&gt;
en(X,Y) :- linea(S,X,Y).&lt;br /&gt;
en(X+1,Y) :- linea(h,X,Y).&lt;br /&gt;
en(X,Y+1) :- linea(v,X,Y).&lt;br /&gt;
&lt;br /&gt;
%% Todo punto del camino es alcanzable por cualquier otro.&lt;br /&gt;
&lt;br /&gt;
:- en(X,Y), en(Z,W), not alcanzable(X,Y,Z,W).&lt;br /&gt;
&lt;br /&gt;
adj(X,Y,X,Y+1) :- linea(v,X,Y).&lt;br /&gt;
adj(X,Y,X+1,Y) :- linea(h,X,Y).&lt;br /&gt;
adj(X,Y,Z,W) :- adj(Z,W,X,Y).&lt;br /&gt;
&lt;br /&gt;
alcanzable(X,Y,X,Y) :- en(X,Y).&lt;br /&gt;
alcanzable(X,Y,Z,W) :- alcanzable(I,J,Z,W), adj(X,Y,I,J).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%% R3: El número de casillas visibles en toda dirección de una casilla enumerada&lt;br /&gt;
%% tiene que ser igual al número de la casilla.&lt;br /&gt;
&lt;br /&gt;
:- N {visible(X,Y,Z,T): pos(Z,T)}, numero(N,X,Y).&lt;br /&gt;
:- {visible(X,Y,Z,T): pos(Z,T)} N-2, numero(N,X,Y). &lt;br /&gt;
&lt;br /&gt;
% Visibilidad en casillas adyacentes.&lt;br /&gt;
&lt;br /&gt;
visible0(X,Y,X,Y+1) :- pos(X,Y), not linea(h,X,Y+1), Y&amp;lt;m-1.&lt;br /&gt;
visible0(X,Y,X,Y-1) :- pos(X,Y), not linea(h,X,Y), Y&amp;gt;0.&lt;br /&gt;
visible0(X,Y,X+1,Y) :- pos(X,Y), not linea(v,X+1,Y), X&amp;lt;n-1.&lt;br /&gt;
visible0(X,Y,X-1,Y) :- pos(X,Y), not linea(v,X,Y), X&amp;gt;0.&lt;br /&gt;
&lt;br /&gt;
% Visibilidad general&lt;br /&gt;
&lt;br /&gt;
visible(X,Y,Z,T) :- visible0(X,Y,Z,T).&lt;br /&gt;
visible(X,Y,Z,Y) :- visible(X,Y,Z+1,Y), visible0(Z,Y,Z+1,Y), Z&amp;lt;X-1, X&amp;gt;1, X&amp;lt;n, Y&amp;lt;m.&lt;br /&gt;
visible(X,Y,Z,Y) :- visible(X+1,Y,Z,Y), visible0 (X,Y,X+1,Y), Z&amp;gt;X+1, X&amp;lt;n-2, Y&amp;lt;m.&lt;br /&gt;
visible(X,Y,X,T) :- visible(X,Y+1,X,T), visible0(X,Y,X,Y+1), T&amp;gt;Y+1, Y&amp;lt;m-2, X&amp;lt;n.&lt;br /&gt;
visible(X,Y,X,T) :- visible(X,Y,X,T+1), visible0(X,T,X,T+1), T&amp;lt;Y-1, Y&amp;gt;1, Y&amp;lt;m, X&amp;lt;n.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%% R2: Todos los números tienen que estar rodeados por el camino.&lt;br /&gt;
&lt;br /&gt;
:- numero(M,X,Y), fuera(X,Y).&lt;br /&gt;
&lt;br /&gt;
fuera(X,Y) :- Y=m-1, X&amp;lt;n, numero(M,X,Y), not linea(h,X,Y+1).&lt;br /&gt;
fuera(X,Y) :- Y=0, X&amp;lt;n, numero(M,X,Y), not linea(h,X,Y).&lt;br /&gt;
fuera(X,Y) :- X=n-1, Y&amp;lt;m, numero(M,X,Y), not linea(v,X+1,Y).&lt;br /&gt;
fuera(X,Y) :- X=0, Y&amp;lt;m, numero(M,X,Y), not linea(v,X,Y).&lt;br /&gt;
&lt;br /&gt;
fuera(X,Y) :- X&amp;lt;n-1, X&amp;gt;0, Y&amp;lt;m-1, Y&amp;gt;0, numero(M,X,Y),visible(X,Y,0,Y), not linea(v,0,Y).&lt;br /&gt;
fuera(X,Y) :- X&amp;lt;n-1, X&amp;gt;0, Y&amp;lt;m-1, Y&amp;gt;0, Z=n-1, numero(M,X,Y),visible(X,Y,Z,Y), not linea(v,n,Y).&lt;br /&gt;
fuera(X,Y) :- X&amp;lt;n-1, X&amp;gt;0, Y&amp;lt;m-1, Y&amp;gt;0, numero(M,X,Y),visible(X,Y,X,0), not linea(h,X,0).&lt;br /&gt;
fuera(X,Y) :- X&amp;lt;n-1, X&amp;gt;0, Y&amp;lt;m-1, Y&amp;gt;0, T=m-1, numero(M,X,Y),visible(X,Y,X,T), not linea(h,X,m).&lt;br /&gt;
&lt;br /&gt;
%Presentación.&lt;br /&gt;
&lt;br /&gt;
#show linea/3.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mjoseh</name></author>
		
	</entry>
</feed>