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

TDA Grupo Representa los conjuntos contiguos de celdas marcados con línea discontinua en un Sudoku Killer. Más...

#include <Grupo.h>

Métodos públicos

const vector< Casilla > & getCasillas () const
 Recupera las casillas de grupo. Más...
 
int getSuma () const
 Recupera la suma asociada al grupo. Más...
 
const vector< vector< vector< int > > > & getCombinaciones () const
 Recupera las combinaciones posibles del grupo (basadas en el instante del tablero) Más...
 
void setCasillas (const vector< Casilla > &cas)
 Fija las casillas de grupo. Más...
 
void setSuma (int sum)
 Fija la suma asociada al grupo. Más...
 
void setCombinaciones (const vector< vector< vector< int >>> &comb)
 Fija las combinaciones posibles del grupo (basadas en el instante del tablero) Más...
 
bool InFila () const
 Informa sobre si el grupo está enteramente contenido en una fila. Más...
 
bool InCubo () const
 Informa sobre si el grupo está enteramente contenido en un cubo. Más...
 
bool InCol () const
 Informa sobre si el grupo está enteramente contenido en una columna. Más...
 
void quitar_casilla (const Casilla &cas)
 Se ejecutará al escribir una casilla para quitarla del grupo Esto tiene como propósito ir simplificando los grupos lo máximo posible para aumentar la posibilidad de que el grupo entero caiga dentro de cierta estructura (este caso nos da mucha información sobre los dígitos posibles en la estructura) Más...
 
void rellena_comb_y_pos ()
 Rellena las todas las posibles sumas del grupo con cada una de sus posiciones posibles. Más...
 
void limp_comb_en_fila (const Casilla &cas)
 Limpia todas las combinaciones de la fila que contengan el dígito de la casilla cas. Más...
 
void limp_comb_no_en_fila (const Casilla &cas)
 Limpia todas las posiciones que tengan al dígito de cas en una casilla en la fila en la que se encuentra cas (reglas del Sudoku) Más...
 
void limp_comb_en_col (const Casilla &cas)
 Limpia todas las combinaciones de la columna que contengan el dígito de la casilla cas. Más...
 
void limp_comb_no_en_col (const Casilla &cas)
 Limpia todas las posiciones que tengan al dígito de cas en una casilla en la col en la que se encuentra cas (reglas del Sudoku) Más...
 
void limp_comb_en_cubo (const Casilla &cas)
 Limpia todas las combinaciones del cubo que contengan el dígito de la casilla cas. Más...
 
void limp_comb_no_en_cubo (const Casilla &cas)
 Limpia todas las posiciones que tengan al dígito de cas en una casilla en el cubo en la que se encuentra cas (reglas del Sudoku) Más...
 
const vector< Casilla > & obtener_determinados () const
 Obtiene las casillas totalmente determinadas por un proceso de eliminación de posiciones. Los casos de determinación son los siguientes: Más...
 

Métodos privados

int CuantasFuera_cubo (const Casilla &cubo) const
 Devuelve cuántas casillas se quedan fuera de "cubo". Más...
 
int CuantasFuera_fila (const Casilla &fila) const
 Devuelve cuántas casillas se quedan fuera de "fila". Más...
 
int CuantasFuera_col (const Casilla &col) const
 Devuelve cuántas casillas se quedan fuera de "col". Más...
 
bool esta_en_el_borde (const Casilla &cas)
 Controla si cierta casilla del grupo está en el borde de éste (puede eliminarse sin desconectar el grupo) Más...
 

Atributos privados

int suma
 Suma de los valores de las casillas del grupo. Más...
 
vector< Casillagrupo
 Array de casillas que tiene el grupo. Más...
 
vector< vector< vector< int > > > combinaciones
 Vector de matrices, donde cada matriz representa una combinación y dentro de esa matriz cada columna representa distintas posiciones precisas de dicha combinación. Más...
 

Descripción detallada

TDA Grupo Representa los conjuntos contiguos de celdas marcados con línea discontinua en un Sudoku Killer.

Una instancia grupo del tipo de dato abstracto Grupo es un objeto dotado un conjunto de casillas contiguas; la suma de los valores de estas, y el conjunto de combinaciones posibles.

Lo representamos como una estructura con un vector de casillas y un entero como suma, aparte de un vector matrices, donde cada una de esas matrices está asociada a un conjunto de enteros positivos que suma suma, y cada una de las columnas de esas matrices, que tendrán tantas filas como elementos tenga el grupo, será una posible ordenación de los elementos del grupo (fijada cada casilla para cada una de las filas)

Invariante
El invariante de representación es grupo[i] in {Casillas Válidas de Sudoku}
0 < suma <= 81

Documentación de las funciones miembro

◆ CuantasFuera_col()

int Grupo::CuantasFuera_col ( const Casilla col) const
private

Devuelve cuántas casillas se quedan fuera de "col".

Parámetros
colUna casilla de la columna
Devuelve
Número de casillas que se quedan fuera

◆ CuantasFuera_cubo()

int Grupo::CuantasFuera_cubo ( const Casilla cubo) const
private

Devuelve cuántas casillas se quedan fuera de "cubo".

Parámetros
cuboLa esquina superior izquierda del cubo
Devuelve
Número de casillas que se quedan fuera

◆ CuantasFuera_fila()

int Grupo::CuantasFuera_fila ( const Casilla fila) const
private

Devuelve cuántas casillas se quedan fuera de "fila".

Parámetros
filaUna casilla de la fila
Devuelve
Número de casillas que se quedan fuera

◆ esta_en_el_borde()

bool Grupo::esta_en_el_borde ( const Casilla cas)
private

Controla si cierta casilla del grupo está en el borde de éste (puede eliminarse sin desconectar el grupo)

Procederá simulando iterando sobre cada una de las otras casillas del grupo y comprobando si para cada una de éstas existe al menos una de las otras casillas del grupo (no contando sobre la que nos estamos planteando) tal que ésta esté en la misma fila y a una sola columna de distancia, o en la misma columna y a una sola fila de distancia

Parámetros
cascasilla que se comprobara si está en el borde, para poder recortar el grupo
Devuelve
true si la casilla está en el grupo y está en el borde

◆ getCasillas()

const vector<Casilla>& Grupo::getCasillas ( ) const

Recupera las casillas de grupo.

Devuelve
vector con las casillas que pertenecen al grupo

◆ getCombinaciones()

const vector<vector<vector<int> > >& Grupo::getCombinaciones ( ) const

Recupera las combinaciones posibles del grupo (basadas en el instante del tablero)

Devuelve
Combinaciones posibles

◆ getSuma()

int Grupo::getSuma ( ) const

Recupera la suma asociada al grupo.

Devuelve
La suma del grupo

◆ InCol()

bool Grupo::InCol ( ) const

Informa sobre si el grupo está enteramente contenido en una columna.

Devuelve
true si todas las casillas del grupo quedan dentro de cierta columna

◆ InCubo()

bool Grupo::InCubo ( ) const

Informa sobre si el grupo está enteramente contenido en un cubo.

Devuelve
true si todas las casillas del grupo quedan dentro de cierto cubo

◆ InFila()

bool Grupo::InFila ( ) const

Informa sobre si el grupo está enteramente contenido en una fila.

Devuelve
true si todas las casillas del grupo quedan dentro de cierta fila

◆ limp_comb_en_col()

void Grupo::limp_comb_en_col ( const Casilla cas)

Limpia todas las combinaciones de la columna que contengan el dígito de la casilla cas.

Precondición
InCol() == true
Parámetros
casÚltima casilla escrita
Postcondición
El grupo elimina las combinaciones precisadas

◆ limp_comb_en_cubo()

void Grupo::limp_comb_en_cubo ( const Casilla cas)

Limpia todas las combinaciones del cubo que contengan el dígito de la casilla cas.

Precondición
InCubo() == true
Parámetros
casÚltima casilla escrita
Postcondición
El grupo elimina las combinaciones precisadas

◆ limp_comb_en_fila()

void Grupo::limp_comb_en_fila ( const Casilla cas)

Limpia todas las combinaciones de la fila que contengan el dígito de la casilla cas.

Precondición
InFila() == true
Parámetros
casÚltima casilla escrita
Postcondición
El grupo elimina las combinaciones precisadas

◆ limp_comb_no_en_col()

void Grupo::limp_comb_no_en_col ( const Casilla cas)

Limpia todas las posiciones que tengan al dígito de cas en una casilla en la col en la que se encuentra cas (reglas del Sudoku)

Precondición
InCol() == false
Parámetros
casÚltima casilla escrita
Postcondición
El grupo elimina las posiciones precisadas

◆ limp_comb_no_en_cubo()

void Grupo::limp_comb_no_en_cubo ( const Casilla cas)

Limpia todas las posiciones que tengan al dígito de cas en una casilla en el cubo en la que se encuentra cas (reglas del Sudoku)

Precondición
InCubo() == false
Parámetros
casÚltima casilla escrita
Postcondición
El grupo elimina las posiciones precisadas

◆ limp_comb_no_en_fila()

void Grupo::limp_comb_no_en_fila ( const Casilla cas)

Limpia todas las posiciones que tengan al dígito de cas en una casilla en la fila en la que se encuentra cas (reglas del Sudoku)

Precondición
InFila() == false
Parámetros
casÚltima casilla escrita
Postcondición
El grupo elimina las posiciones precisadas

◆ obtener_determinados()

const vector<Casilla>& Grupo::obtener_determinados ( ) const

Obtiene las casillas totalmente determinadas por un proceso de eliminación de posiciones. Los casos de determinación son los siguientes:

  • El grupo tiene una única combinación posible (sumandos) y en todas las posiciones posibles el dígito de cierta casilla (cierta posición del vector) coincide
  • El grupo tiene más de una única combinación posible, pero todas comparten un dígito y ese dígito siempre se encuentra en la misma casilla (posición del vector) en todas las posiciones posibles

    Notemos que el caso de la obtención de un grupo unitario por la reducción de los grupos tras escritura queda considerado en el primer guion.

    Devuelve
    un vector con las casillas totalmente determinadas del grupo, para que se escriban.

◆ quitar_casilla()

void Grupo::quitar_casilla ( const Casilla cas)

Se ejecutará al escribir una casilla para quitarla del grupo Esto tiene como propósito ir simplificando los grupos lo máximo posible para aumentar la posibilidad de que el grupo entero caiga dentro de cierta estructura (este caso nos da mucha información sobre los dígitos posibles en la estructura)

Se eliminará la casilla del vector grupo, y se ajustarán los sumandos y posiciones adecuadamente.

Parámetros
casla casilla que se borra del grupo
Precondición
La casilla solo se eliminará si está en alguno de los bordes del grupo (pues en caso contrario se dividiría un grupo en dos o más sin saber cuál sería su suma).
Postcondición
La suma del grupo disminuye por la cantidad que guarde que la casilla eliminada y el vector de combinaciones cambia correspondientemente

◆ rellena_comb_y_pos()

void Grupo::rellena_comb_y_pos ( )

Rellena las todas las posibles sumas del grupo con cada una de sus posiciones posibles.

Postcondición
El grupo queda inicializado. Se usa solo su suma

◆ setCasillas()

void Grupo::setCasillas ( const vector< Casilla > &  cas)

Fija las casillas de grupo.

Parámetros
casvector de casillas
Postcondición
Casillas cambiadas

◆ setCombinaciones()

void Grupo::setCombinaciones ( const vector< vector< vector< int >>> &  comb)

Fija las combinaciones posibles del grupo (basadas en el instante del tablero)

Postcondición
Quedan alteradas las combinaciones posibles

◆ setSuma()

void Grupo::setSuma ( int  sum)

Fija la suma asociada al grupo.

Parámetros
sumsuma que asigno al grupo
Postcondición
Suma cambiada (no debería tener sentido hacer esto)

Documentación de los datos miembro

◆ combinaciones

vector<vector<vector<int> > > Grupo::combinaciones
private

Vector de matrices, donde cada matriz representa una combinación y dentro de esa matriz cada columna representa distintas posiciones precisas de dicha combinación.

Es decir, la combinación 154, tendrá en sus columnas las distintas posiciones a las que llamamos 154, 145, 415, 451, 514 y 541.

Recalquemos que cada índice del vector grupo fija una fila de esa matriz.

Precondición
combinaciones[i][j].size() == grupo.size() para todo i, j donde i es la matriz y j es la columna

◆ grupo

vector<Casilla> Grupo::grupo
private

Array de casillas que tiene el grupo.

Precondición
Cada casilla que contenga el vector debe estar en el grupo, es decir, cada valor de la casilla es un sumando de suma

◆ suma

int Grupo::suma
private

Suma de los valores de las casillas del grupo.

Precondición
0 < suma <= 81

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