Reto 2. Sudoku Killer
Métodos públicos | Métodos privados | Atributos privados | Lista de todos los miembros
Referencia de la Clase Tablero

TDA Tablero Representa al sudoku en sí; es decir, al tablero 9x9 con las casillas y los grupos. Más...

#include <Tablero.h>

Métodos públicos

 Tablero ()
 Constructor sin argumentos.
 
 Tablero (const vector< Grupo > &grupos, const vector< vector< Casilla >> &sdk)
 Constructor con vector de grupos y vector de vectores de casillas. Más...
 
const Grupoget_grupo (int pos) const
 Devuelve el grupo correspondiente a la posición de este en el vector sudoku. Más...
 
void set_casilla (const Casilla &casilla_escrita, bool limpiar=true)
 Modifica el grupo de la casilla que escribe eliminándola de este, con el metodo quitar_casilla (Casilla cas) de la clase Grupo y modifica el sudoku colocando el valor a la casilla correspondiente. Más...
 
void escribir_vector (const vector< Casilla > &a_escribir)
 Escribe un vector de casillas en el tablero. Llama a Tablero::set_casilla() Más...
 
void escribir_inmediatos ()
 Escribe las casillas inmediatas obtenidas: Más...
 
void calcular_todas_combinaciones ()
 Rellena todas las combinaciones posibles (cada una con todas sus posiciones). LLama a calcular combinaciones de cada grupo de la clase Grupo.
 
void limpiar (const Casilla &cas)
 Actualiza el tablero. LLama a: Más...
 
void escribir_determinados ()
 Itera sobre cada grupo llamando a escribe_determinados()
 

Métodos privados

Grupoget_grupo (const Casilla &cas) const
 Devuelve el grupo al que esta casilla pertenece. Más...
 
vector< GrupogetGrupos_fila (const Casilla &fila) const
 Devuelve un vector de los grupos que tienen al menos una casilla en esa fila. Más...
 
vector< GrupogetGrupos_col (const Casilla &col) const
 Devuelve un vector de los grupos que tienen al menos una casilla en esa columna. Más...
 
vector< GrupogetGrupos_cubo (const Casilla &cubo) const
 Devuelve un vector de los grupos que tienen al menos una casilla en ese cubo. Más...
 
void rellenar_unitarias ()
 Rellena los grupos que tienen una sola casilla. Más...
 
void metodo_45 ()
 Escribe las casillas determinadas por el método del 45 (o derivados inmediatos). Más...
 
const Casillaunico_casillas_fuera_fil (const Casilla &fila, int desp=0) const
 Devuelve la casilla que se puede calcular (única fuera o única dentro). Devuelve casilla nula si no existe una única fuera o dentro de la estructura. Más...
 
const Casillaunico_casillas_fuera_col (const Casilla &col, int desp=0) const
 Devuelve la casilla que se puede calcular (única fuera o única dentro). Devuelve casilla nula si no existe una única fuera o dentro de la estructura. Más...
 
const Casillaunico_casillas_fuera_cubo (Casilla cubo, bool desp_dcha=false, bool desp_abj=false) const
 Devuelve la casilla que se puede calcular (única fuera o única dentro). Devuelve casilla nula si no existe una única fuera o dentro de la estructura. Más...
 
void limpiar_basico (const Casilla &cas)
 Dada la última casilla escrita en el tablero, limpia todas las combinaciones y posiciones de cada estructura que contenga a cas. Más...
 
void limpiar_fila (const Casilla &cas)
 Dada la última casilla escrita en el tablero (o simulada), itera sobre todos los grupos con casillas dentro de la fila a la que cas pertenece. Más...
 
void limpiar_col (const Casilla &cas)
 Dada la última casilla escrita (o simulada) en el tablero, itera sobre todos los grupos con casillas dentro de la col a la que cas pertenece. Más...
 
void limpiar_cubo (const Casilla &cas)
 Dada la última casilla escrita (o simulada) en el tablero, itera sobre todos los grupos con casillas dentro del cubo al que cas pertenece. Más...
 
void limpiar_unic_comb (const Casilla &cas)
 Sobre cada uno de los grupos tocados por las estructuras a las que cas pertenece se comprobará: Más...
 

Atributos privados

vector< Grupogrupos
 Vector de los grupos que quedan en el sudoku. Más...
 
vector< vector< Casilla > > sudoku
 Matriz de Casillas que representan el tablero del sudoku en sí.
 

Descripción detallada

TDA Tablero Representa al sudoku en sí; es decir, al tablero 9x9 con las casillas y los grupos.

Una instancia tab del tipo de dato abstracto Tablero es una matriz 9x9 con casillas que identifican las distintas estructuras, es decir, a las filas, columnas y cubo. Esto es de vital importancia, pues tomaremos en muchas ocasiones el nombre estructura para identificar estos tres términos, ya que en ninguno de ellos se podrán repetir casillas con mismo valor.

Lo representaremos como un vector de grupos, que a su vez identifica todas las casillas que tiene el Tablero del Sudoku Killer.

Invariante
Todas las casillas deben ser válidas
Num_Casillas = 81
Todos los grupos del vector deben cumplir con su invariante de representación

Documentación del constructor y destructor

◆ Tablero()

Tablero::Tablero ( const vector< Grupo > &  grupos,
const vector< vector< Casilla >> &  sdk 
)

Constructor con vector de grupos y vector de vectores de casillas.

Parámetros
gruposVector de grupos del tablero
sdkTabla de casillas del tablero

Documentación de las funciones miembro

◆ escribir_inmediatos()

void Tablero::escribir_inmediatos ( )

Escribe las casillas inmediatas obtenidas:

◆ escribir_vector()

void Tablero::escribir_vector ( const vector< Casilla > &  a_escribir)

Escribe un vector de casillas en el tablero. Llama a Tablero::set_casilla()

Parámetros
a_escribirVector de casillas a escribir en el sudoku.

◆ get_grupo() [1/2]

Grupo& Tablero::get_grupo ( const Casilla cas) const
private

Devuelve el grupo al que esta casilla pertenece.

Parámetros
casCasilla cuyo grupo se devuelve
Devuelve
Referencia al grupo al que cas pertenece

◆ get_grupo() [2/2]

const Grupo& Tablero::get_grupo ( int  pos) const

Devuelve el grupo correspondiente a la posición de este en el vector sudoku.

Parámetros
posPosición del grupo que se quiere tener
Devuelve
Objeto de la clase Grupo, que ocupa dicha pos

◆ getGrupos_col()

vector<Grupo> Tablero::getGrupos_col ( const Casilla col) const
private

Devuelve un vector de los grupos que tienen al menos una casilla en esa columna.

Parámetros
colColumna del sudoku en la que buscar grupos
Devuelve
Vector de Grupos que cumplen dicha condicion.

◆ getGrupos_cubo()

vector<Grupo> Tablero::getGrupos_cubo ( const Casilla cubo) const
private

Devuelve un vector de los grupos que tienen al menos una casilla en ese cubo.

Parámetros
cuboCubo del sudoku en el que buscar grupos
Devuelve
Vector de Grupos que cumplen dicha condicion.

◆ getGrupos_fila()

vector<Grupo> Tablero::getGrupos_fila ( const Casilla fila) const
private

Devuelve un vector de los grupos que tienen al menos una casilla en esa fila.

Parámetros
filaFila del sudoku en la que buscar grupos
Devuelve
Vector de Grupos que cumplen dicha condicion.

◆ limpiar()

void Tablero::limpiar ( const Casilla cas)

Actualiza el tablero. LLama a:

Parámetros
casCasilla cuyo valor se limpiará

◆ limpiar_basico()

void Tablero::limpiar_basico ( const Casilla cas)
private

Dada la última casilla escrita en el tablero, limpia todas las combinaciones y posiciones de cada estructura que contenga a cas.

LLama a Tablero::limp_{estructura}(Casilla cas)

Parámetros
casÚltima casilla escrita

◆ limpiar_col()

void Tablero::limpiar_col ( const Casilla cas)
private

Dada la última casilla escrita (o simulada) en el tablero, itera sobre todos los grupos con casillas dentro de la col a la que cas pertenece.

Esto se da porque la manera de limpiar un grupo de imposibilidades es notablemente distinta en los casos en los que los grupos afectados estén o no enteramente contenidos dentro de la estructura afectada

Parámetros
casúltima casilla escrita (o simulada)

◆ limpiar_cubo()

void Tablero::limpiar_cubo ( const Casilla cas)
private

Dada la última casilla escrita (o simulada) en el tablero, itera sobre todos los grupos con casillas dentro del cubo al que cas pertenece.

Esto se da porque la manera de limpiar un grupo de imposibilidades es notablemente distinta en los casos en los que los grupos afectados estén o no enteramente contenidos dentro de la estructura afectada

Parámetros
casúltima casilla escrita (o simulada)

◆ limpiar_fila()

void Tablero::limpiar_fila ( const Casilla cas)
private

Dada la última casilla escrita en el tablero (o simulada), itera sobre todos los grupos con casillas dentro de la fila a la que cas pertenece.

Esto se da porque la manera de limpiar un grupo de imposibilidades es notablemente distinta en los casos en los que los grupos afectados estén o no enteramente contenidos dentro de la estructura afectada

Parámetros
casúltima casilla escrita (o simulada)

◆ limpiar_unic_comb()

void Tablero::limpiar_unic_comb ( const Casilla cas)
private

Sobre cada uno de los grupos tocados por las estructuras a las que cas pertenece se comprobará:

  • Si ese grupo está contenido entero dentro de una estructura
  • Si ese grupo tan solo conserva una de sus combinaciones Si ambas condiciones se cumplen, ejecutará este método de la siguiente manera:
for (int i = 0; i < tam_unica_comb; i++) {
Casilla cas(grupo[0].getCoord(),grupo.getComb[0][i]); // Solo hay una comb. ([0]) (con i sumandos)
limpiar_{esctructura}(cas); // Donde {estructura} será la fila, col. o cubo
// en el que grupo esté enteramente contenido (guión 1)
}
TDA Casilla Representa una única posición de sudoku que puede contener un único valor numérico.
Definition: Casilla.h:29

La motivación de este uso del método reside en que si en cierta estructura encontramos un grupo con una única combinación, aunque no sepamos el orden en el que esta aparecerá (su posición) y por tanto no podamos escribirla, sabemos que todos esos dígitos aparecerán en las casillas asociadas al grupo, y por tanto no aparecerán en ninguna otra casilla de la estructura que lo contenga Por tanto, llamamos a limpiar_{estructura} con una casilla simulada

Parámetros
casÚlima casilla escrita

◆ metodo_45()

void Tablero::metodo_45 ( )
private

Escribe las casillas determinadas por el método del 45 (o derivados inmediatos).

MÉTODO DE LOS 45

Iterando sobre cada una de las estructuras del tablero (todas las filas, columnas y cubos de 3x3) examinamos si todos los grupos con casillas en esa estructura están totalmente contenidos menos uno de ellos. En ese caso, si el grupo no-enteramente-contenido tiene fuera de la estructura 1 sola casilla, o size_grupo-1 casillas, podremos determinar de manera inmediata una casilla del grupo. (Tablero::unico_casillas_fuera_{estructura})

  • En el caso de una sola casilla fuera:
    • casilla = suma_todos_grupos_de_la_estructura - 45
  • En el caso de size-1 casillas fuera:
    • casilla = 45 - suma_grupos_enteros_dentro

Nótese que el método es fácilmente aplicable al caso en el que tengamos una estructura compuesta de dos o más de las estructuras anteriormente consideradas (sea n) usando 45*n en las fórmulas.

Obtiene un vector con las casillas a escribir y las escribe con Tablero::escribir_vector.

◆ rellenar_unitarias()

void Tablero::rellenar_unitarias ( )
private

Rellena los grupos que tienen una sola casilla.

Las guarda en un vector y las escribe con Tablero::escribir_vector()

◆ set_casilla()

void Tablero::set_casilla ( const Casilla casilla_escrita,
bool  limpiar = true 
)

Modifica el grupo de la casilla que escribe eliminándola de este, con el metodo quitar_casilla (Casilla cas) de la clase Grupo y modifica el sudoku colocando el valor a la casilla correspondiente.

Además, llamará a limpiar (por defecto) para quitar las combinaciones posibles de otros grupos.

Parámetros
casilla_escritaCasilla cuyo valor se escribe
limpiarPor defecto limpia. En el caso que no queramos, pasar un booleano igual a false.

◆ unico_casillas_fuera_col()

const Casilla& Tablero::unico_casillas_fuera_col ( const Casilla col,
int  desp = 0 
) const
private

Devuelve la casilla que se puede calcular (única fuera o única dentro). Devuelve casilla nula si no existe una única fuera o dentro de la estructura.

Parámetros
colCasilla de la cual solo tomaremos la segunda coordenada
despNúmero de columnas que hemos utilizado en el método 45. (
Ver también
metodo_45())
Devuelve
Casilla que se puede calcular

◆ unico_casillas_fuera_cubo()

const Casilla& Tablero::unico_casillas_fuera_cubo ( Casilla  cubo,
bool  desp_dcha = false,
bool  desp_abj = false 
) const
private

Devuelve la casilla que se puede calcular (única fuera o única dentro). Devuelve casilla nula si no existe una única fuera o dentro de la estructura.

Parámetros
cuboCasilla que utilizaremos para identificar el cubo
desp_dchaPredeterminado false, ya que solo en el caso de querer tomar dos grupos hacia la derecha la llamaremos con booleano igual a true. (
Ver también
metodo_45())
Parámetros
desp_abjPredeterminado false, ya que solo en el caso de querer tomar dos grupos hacia abajo la llamaremos con booleano igual a true. (
Ver también
metodo_45())
Devuelve
Casilla que se puede calcular

◆ unico_casillas_fuera_fil()

const Casilla& Tablero::unico_casillas_fuera_fil ( const Casilla fila,
int  desp = 0 
) const
private

Devuelve la casilla que se puede calcular (única fuera o única dentro). Devuelve casilla nula si no existe una única fuera o dentro de la estructura.

Parámetros
filaCasilla de la cual solo tomaremos la primera coordenada
despNúmero de filas que hemos utilizado en el método 45 (
Ver también
metodo_45())
Devuelve
Casilla que se puede calcular

Documentación de los datos miembro

◆ grupos

vector<Grupo> Tablero::grupos
private

Vector de los grupos que quedan en el sudoku.

Inicialmente, abarca el tablero completo.


La documentación para esta clase fue generada a partir del siguiente fichero: