Professional Documents
Culture Documents
discussions, stats, and author profiles for this publication at: https://www.researchgate.net/publication/282770018
CITATIONS READS
0 382
1 author:
SEE PROFILE
All content following this page was uploaded by Alexis Vsquez Garca on 12 October 2015.
asdfghjklzxcvbnmqwertyuiopasdfghjkl
Entrega Final
zxcvbnmqwertyuiopasdfghjklzxcvbnm
PUERTA ARCE, Juan Alberto.
Grupo:
qwertyuiopasdfghjklzxcvbnmqwertyui
VSQUEZ GARCA, Alexis
MAGALLANES SALVADOR, Miguel
opasdfghjklzxcvbnmqwertyuiopasdfgh
28 de Junio del 2013
jklzxcvbnmqwertyuiopasdfghjklzxcvb
nmqwertyuiopasdfghjklzxcvbnmqwer
tyuiopasdfghjklzxcvbnmqwertyuiopas
dfghjklzxcvbnmqwertyuiopasdfghjklzx
cvbnmrtyuiopasdfghjklzxcvbnmqwert 1
yuiopasdfxcvbnmqwertyuiopasdfghjkl
SOFTWARE PARA
INGENIERA
SUDOKU
2
NDICE
a) QU ES? .4
b) CMO SE JUEGA? 4
2. Proceso de resolucin .5
a) Pseudocdigos .7
b) Algoritmos ..8
c) Funciones ..15
Primarias 15
ElementoPosicion 15
Howmany .15
Para el sudoku 16
BuscaFalta 16
BuscaComun3 18
BarridoCuad 19
BarridoSud ..20
VerSudoku ..21
3. Pruebas y Resultados 23
4. Bibliografa ..24
3
SUDOKU
QU ES?
El sudoku es un pasatiempo que se public por primera vez a finales de la dcada de 1970
y se populariz en Japn en 1986, dndose a conocer en el mbito internacional en 2005
cuando numerosos peridicos empezaron a publicarlo en su seccin de pasatiempos.
CMO SE JUEGA?
Este juego se compone de una cuadrcula de 9x9 casillas, que est divida en cuadrculas
dentro de la ms grande que son de 3x3 casillas. Partiendo de algunos nmeros
dispuestos en algunas de las casillas, hay que completar las que estn vacas con dgitos
del 1 al 9. No se debe repetir ningn digito en una misma fila, columna o cuadro de 3x3.
Un sudoku est bien planteado si la solucin es nica.
4
PROCESO DE RESOLUCIN
Ahora que entendemos cmo se juega el sudoku, tenemos que buscar un mtodo de
resolucin para que podamos escribirlo en el programa Matlab y este lo interprete de forma
que pueda hacer sudokus fciles y normales. En este caso, no evaluaremos un sudoku para
que resuelva en modo difcil, esto lo explicaremos ms adelante.
Como sabemos, necesitamos hacer un script que siga las reglas bsicas del juego del
sudoku para que este se resuelva. Por lo tanto, lo que debemos tener en cuenta,
principalmente, es que al introducir un nmero dentro del tablero del sudoku, este no se
puede repetir en la misma columna, fila o cuadrcula de 3x3. A partir de estas simples
reglas tenemos que hacer una serie de pasos para que Matlab pueda interpretar los cdigos
que escribiremos y pueda resolver el sudoku.
Luego, seguiremos una serie de pasos recomendadas para la resolucin, es una de las ms
sencillas para poder terminar un sudoku:
5
FIGURA 1 Fuente: SUDOKU-ONLINE
Luego, el nmero que se repite en las 3 anteriores es el nmero 8; por consiguiente, ese
nmero es el que va en esa casilla.
Observemos que, en este caso, solo hay un nmero que se repite, en todo caso, si es que
hubiese 2 o ms, no se podra resolver esta casilla por el mtodo que estamos siguiendo;
por consiguiente, se debe analizar la siguiente casilla. As sucesivamente hasta encontrar
una casilla donde solo haya UN NUMERO FALTANTE que se repita.
Entonces, como hemos visto, debemos hacer este proceso para cada casilla en la que haya
un cero. Nuestro programa debe evaluar ese caso y detenerse cuando todas las casillas estn
resueltas con un nmero diferente de cero entre el 1 y el 9.
6
PSEUDOCDIGOS
Ahora que ya tenemos las ideas de qu proceso seguir para hacer nuestros scripts de
desarrollo para la resolucin de un sudoku, escribiremos pseudocdigos para estructurar
todo nuestro desarrollo y evaluacin del programa.
7
ALGORITMOS
ElementoPosicion
8
Howmany
9
BuscaFalta
10
BuscaComun3
11
BarridoCuad
12
VerSudoku
13
FINAL_SUDOKU
14
FUNCIONES
1. Primarias:
Como hemos visto en los algoritmos, necesitamos crear algunas funciones antes de realizar
nuestro script. A partir del anlisis para resolver el sudoku, se ha creado dos funciones
bsicas que apoyan esto. A continuacin se presentarn dichas funciones:
a) Elemento Posicin:
Esta funcin evala los elementos de un vector de tamao menor o igual a 9 de modo
que los coloca en la posicin igual al valor de cada elemento.
Por ejemplo, tenemos el vector:
[ ]
Entonces:
( ) [ ]
Proceso:
function z = ElementoPosicion(array)
%
%Funcion 'ElementoPosicion(array)' toma cada elemento de un vector y lo
% coloca en la posicion igual al valor del elemento.
%
m = zeros(1,9); vec = array(array ~= 0);
for n = 1:length(vec);
c = vec(n);
m(c) = vec(n);
end
z = m;
b) Howmany:
La funcin Howmany cuenta el nmero de veces que se repite un nmero dentro de una
matriz. Para ello nuestros valores de entrada sern el vector definido y el nmero que
quiero saber cuntas veces se repite.
Por ejemplo, tenemos el vector:
15
[ ]
Entonces:
( )
( )
Proceso:
1. Se extrae los elementos del vector que sean iguales al valor numrico
introducido.
2. El tamao del nuevo vector ser igual a la salida de cuntas veces se repite dicho
nmero en la matriz.
2. Para el Sudoku:
Luego de que hicimos nuestras funciones bsicas, creamos unas especiales para realizar
nuestro Sudoku, ayudndonos de las funciones anteriores.
a) BuscaFalta
Esta funcin busca los nmeros que faltan (del 1 al 9) dentro de un vector (en este caso
de la fila, columna o cuadrcula 3x3). La funcin BuscaFalta nos ayudar para la
resolucin del sudoku porque si evaluamos para la fila, columna y cuadrcula de 3x3 y
encontramos el elemento que se repite en estas 3, ya obtendremos el nmero que ir en
la casilla donde haya un cero.
Por ejemplo, si consideramos el sudoku de la figura 1:
16
El vector fila est dado por:
[ ]
[ ]
Proceso:
[ ]
( ) [ ]
[ ]
( ) [ ]
[ ]
17
Script de la funcin BuscaFalta:
b) BuscaComun3
[ ]
[ ]
[ ]
( ) [ ]
Proceso:
[ ]
( ) [ ]
( ( )) [ ]
[ ]
( ) [ ]
( ( )) [ ]
[ ]
( ) [ ]
( ( )) [ ]
18
Sumamos los 3 vectores elemento a elemento:
[ ]
[ ]
[ ]
[ ]
( ) [ ]
( ) [ ]
c) BarridoCuad
Esta funcin extrae las matrices o cuadrculas de 3x3 del sudoku de 9x9; por lo tanto,
tendremos 9 matrices y las convierte a vectores.
19
d) BarridoSud
Esta funcin hace el barrido para cada elemento cero que est dentro del tablero del
sudoku de 9x9.
Proceso:
function z = BarridoSud(M)
[a1 a2 a3 a4 a5 a6 a7 a8 a9] = BarridoCuad(M);
for i = 1:9;
for j = 1:9;
if M(i,j) == 0;
vec1 = ElementoPosicion(M(i,1:9));
vec2 = ElementoPosicion((M(1:9,j))');
if (j>=1 & j<=3) & (i>=1 & i<=3)
w = BuscaComun3(vec1,vec2,a1);
if length(w) == 1
M(i,j) = w;
end
elseif (j>=4 & j<=6) & (i>=1 & i<=3)
w = BuscaComun3(vec1,vec2,a2);
if length(w) == 1
M(i,j) = w;
end
elseif (j>=7 & j<=9) & (i>=1 & i<=3)
w = BuscaComun3(vec1,vec2,a3);
if length(w) == 1
M(i,j) = w;
end
elseif (j>=1 & j<=3) & (i>=4 & i<=6)
w = BuscaComun3(vec1,vec2,a4);
if length(w) == 1
M(i,j) = w;
end
elseif (j>=4 & j<=6) & (i>=4 & i<=6)
20
w = BuscaComun3(vec1,vec2,a5);
if length(w) == 1
M(i,j) = w;
end
elseif (j>=7 & j<=9) & (i>=4 & i<=6)
w = BuscaComun3(vec1,vec2,a6);
if length(w) == 1
M(i,j) = w;
end
elseif (j>=1 & j<=3) & (i>=7 & i<=9)
w = BuscaComun3(vec1,vec2,a7);
if length(w) == 1
M(i,j) = w;
end
elseif (j>=4 & j<=6) & (i>=7 & i<=9)
w = BuscaComun3(vec1,vec2,a8);
if length(w) == 1
M(i,j) = w;
end
elseif (j>=7 & j<=9) & (i>=7 & i<=9)
w = BuscaComun3(vec1,vec2,a9);
if length(w) == 1
M(i,j) = w;
end
end
end
end
end
z = M;
e) VerSudoku
Esta funcin genera una tabla de sudoku comn para la visualizacin en la Ventana de
Comandos de Matlab. Utilizaremos columnas y filas de separacin a base de los
smbolos: << | >> y << - - >>, respectivamente.
Proceso:
21
6. Como el vector general est dado por filas, haremos que para cada fila dentro de
nuestra matriz se muestre el vector general ya mencionado.
7. Sin embargo, necesitamos que haya tambin lneas de separacin horizontal las
cuales sern cada 3 filas. As que en el momento del proceso cuando el muestreo
llegue a la fila 3 o fila 6 se deber mostrar una lnea de separacin horizontal.
8. Finalmente, si introducimos la matriz de 9x9, la funcin nos debe mostrar la
misma dentro de una tabla con filas y columnas de separacin.
PROGRAMA_SUDOKU
Ahora ya estamos listos para generar el programa que dirigir todas las funciones para la
resolucin de cualquier sudoku en modo fcil o normal. En este caso, estamos exceptuando
los del modo difcil porque en un primer barrido nunca se encontrar un solo nmero
faltante que se repita en la fila, columna y cuadrcula de 3x3; por lo tanto, no se podr
resolver por el mtodo que estamos empleando.
A partir del diagrama de flujo que hicimos anteriormente para la solucin de nuestro
sudoku, obtenemos una ms simplificada con ayuda de nuestras funciones ya creadas.
Adems, debemos tener en cuenta que para obtener nuestra matriz de 9x9 donde
simularemos el sudoku de modo fcil o normal, la haremos en el software Microsoft Excel,
desde donde lo exportaremos hacia Matlab. Para ello usaremos el comando
xlsread(nombre_archivo) para exportarlo a nuestra ventana de comandos.
22
A continuacin, presentamos el script que se cre para el desarrollo del programa
FINAL_SUDOKU:
clear all
close all
clc
%%%%%%%%%%%%%%%%%%
PRUEBAS Y RESULTADOS
Durante las semanas 14 y 15 se hicieron muchas pruebas con diferentes scripts, se tuvieron
que modificar algunas funciones por la extensin que tenan las mismas. Una funcin tiene
que ser corta y ayudar a simplificar el script general donde se trabajar el proyecto.
Dentro del proyecto se cre un contador de celdas, el cual sirve para indicar cuntas celdas
faltan por rellenar. Adems, al exportar el archivo Excel a Matlab se gener una tabla
donde se coloquen todos los datos, de esta forma tomara la mejor forma que se asemeje a
23
un sudoku. Se colocaron pausas de 0.5 segundos para que el programa vaya mostrando
como se va resolviendo el sudoku en la ventana de comandos.
Cabe resaltar que en nuestro sudoku no tomamos en cuenta el hecho de que donde estn los
ceros deban ir espacios en blancos, pues para hacerlo se necesita de un proceso ms
complejo. Esto se debe a que al exportarlo de Excel hacia Matlab, este ltimo lo reconoce
como un NAN y lo que se quiere son espacios en blancos que para nuestro proyecto no ha
sido evaluado.
Al finalizar, se obtuvo un buen proyecto que hace que funcione la resolucin del sudoku.
Enlace:
(http://www.facebook.com/photo.php?v=3246197129543&set=vb.1705372136&type=2&theater)
BIBLIOGRAFIA
24