public void GeraDigitosIniciais(SDMatrizModel matriz, int qtdeDigitosIniciais) { int digGerados = 0; if (qtdeDigitosIniciais > 0) { List <SDCelulaModel> listaAleatoriaCelulas = new List <SDCelulaModel>(); matriz.Celulas.ForEach(celula => { listaAleatoriaCelulas.Add(new SDCelulaModel(celula)); }); listaAleatoriaCelulas.Shuffle(); do { SDCelulaModel cel = listaAleatoriaCelulas.Where(celula => celula.Valor == 0 || celula.Valor == null).First(); do { cel.Valor = rng.Next(1, 10); } while (RetornaListaCelulasInvalidas(matriz, cel).Any()); matriz.Celulas.Where(celula => celula.Equals(cel)).First().Valor = cel.Valor; matriz.Celulas.Where(celula => celula.Equals(cel)).First().isCelulaDica = true; AjustaStatusCelula(matriz, cel); digGerados++; } while (digGerados < qtdeDigitosIniciais); } }
public void AlteraValorCelula(SDMatrizModel matriz, SDCelulaModel celulaAlterada, SDCelulaModel oldCelula) { using (ISDService sdService = new SDService()) { sdService.AlteraValorCelula(matriz, celulaAlterada, oldCelula); } }
public void ValidaAlteracaoCelula(SDMatrizModel matriz, SDCelulaModel celulaAlterada) { using (ISDService sdService = new SDService()) { sdService.AjustaStatusCelula(matriz, celulaAlterada); } }
private void SDMatrixGrid_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) { var celulaEmEdicao = this.Matriz.Celulas.Find(celula => celula.PosicaoLinha == e.RowIndex + 1 && celula.PosicaoColuna == e.ColumnIndex + 1); OldCelula = new SDCelulaModel(celulaEmEdicao); }
private void GeraPrimeirosNoveDigitos(SDMatrizModel matriz, List <SDCelulaModel> listaAleatoriaCelulas) { for (int i = 1; i <= 9; i++) { SDCelulaModel cel = listaAleatoriaCelulas.Where(celula => celula.Valor == 0 || celula.Valor == null).First(); cel.Valor = i; matriz.Celulas.Where(celula => celula.Equals(cel)).First().Valor = cel.Valor; matriz.Celulas.Where(celula => celula.Equals(cel)).First().isCelulaInicial = true; matriz.Celulas.Where(celula => celula.Equals(cel)).First().PossiveisValores.Add(cel.Valor); } }
private List <int?> RetornaListaValoresBloqueados(SDMatrizModel matriz, SDCelulaModel celulaVerificada) { List <int?> listaValoresBloqueados = new List <int?>(); matriz .Linhas .Find(linha => linha.NumeroSequencial == celulaVerificada.PosicaoLinha) .Celulas .Where(celula => celula.PosicaoColuna != celulaVerificada.PosicaoColuna && celula.Valor > 0 && celula.Valor != null) .ToList() .ForEach(celulaDaLinha => { if (!listaValoresBloqueados.Contains(celulaDaLinha.Valor)) { listaValoresBloqueados.Add(celulaDaLinha.Valor); } }); matriz .Colunas .Find(coluna => coluna.NumeroSequencial == celulaVerificada.PosicaoColuna) .Celulas .Where(celula => celula.PosicaoLinha != celulaVerificada.PosicaoLinha && celula.Valor > 0 && celula.Valor != null) .ToList() .ForEach(celulaDaColuna => { if (!listaValoresBloqueados.Contains(celulaDaColuna.Valor)) { listaValoresBloqueados.Add(celulaDaColuna.Valor); } }); matriz .Quadrantes .Find(quadrante => quadrante.Celulas.Contains(celulaVerificada)) .Celulas .Where(celula => !celula.Equals(celulaVerificada) && celula.Valor > 0 && celula.Valor != null) .ToList() .ForEach(celulaDoQuadrante => { if (!listaValoresBloqueados.Contains(celulaDoQuadrante.Valor)) { listaValoresBloqueados.Add(celulaDoQuadrante.Valor); } }); return(listaValoresBloqueados); }
public void ReavaliaCelulasAposAlteracao(SDMatrizModel matriz, SDCelulaModel oldCelula) { var listaCelulasParaReavaliar = new List <SDCelulaModel>(); listaCelulasParaReavaliar.AddRange(matriz.Linhas.Find(linha => linha.NumeroSequencial == oldCelula.PosicaoLinha) .Celulas.Where(celula => celula.Valor == oldCelula.Valor).ToList()); listaCelulasParaReavaliar.AddRange(matriz.Colunas.Find(coluna => coluna.NumeroSequencial == oldCelula.PosicaoColuna) .Celulas.Where(celula => celula.Valor == oldCelula.Valor).ToList()); listaCelulasParaReavaliar.AddRange(matriz.Quadrantes.Find(quadrante => quadrante.Celulas.Contains(oldCelula)) .Celulas.Where(celula => celula.Valor == oldCelula.Valor).ToList()); foreach (var celulaParaReavaliar in listaCelulasParaReavaliar) { AjustaStatusCelula(matriz, celulaParaReavaliar); } }
public void AjustaStatusCelula(SDMatrizModel matriz, SDCelulaModel celulaAlterada) { var listaCelulasInvalidas = RetornaListaCelulasInvalidas(matriz, celulaAlterada); if (listaCelulasInvalidas.Any()) { celulaAlterada.isCelulaValida = false; } else { celulaAlterada.isCelulaValida = true; } foreach (var celulaInvalida in listaCelulasInvalidas) { celulaInvalida.isCelulaValida = false; } }
private List <SDCelulaModel> RetornaListaCelulasInvalidas(SDMatrizModel matriz, SDCelulaModel celulaAlterada) { List <SDCelulaModel> listaCelulasInvalidas = new List <SDCelulaModel>(); listaCelulasInvalidas.AddRange(matriz.Linhas. Find(linha => linha.NumeroSequencial == celulaAlterada.PosicaoLinha). Celulas.Where(celula => celula.PosicaoColuna != celulaAlterada.PosicaoColuna && celula.Valor == celulaAlterada.Valor && (celula.Valor > 0 && celula.Valor != null)).ToList()); listaCelulasInvalidas.AddRange(matriz.Colunas. Find(coluna => coluna.NumeroSequencial == celulaAlterada.PosicaoColuna). Celulas.Where(celula => celula.PosicaoLinha != celulaAlterada.PosicaoLinha && celula.Valor == celulaAlterada.Valor && (celula.Valor > 0 && celula.Valor != null)).ToList()); listaCelulasInvalidas.AddRange(matriz.Quadrantes. Find(quadrante => quadrante.Celulas.Contains(celulaAlterada)). Celulas.Where(celula => celula.PosicaoLinha != celulaAlterada.PosicaoLinha && celula.PosicaoColuna != celulaAlterada.PosicaoColuna && celula.Valor == celulaAlterada.Valor && (celula.Valor > 0 && celula.Valor != null)).ToList()); return(listaCelulasInvalidas); }
public void AlteraValorCelula(SDMatrizModel matriz, SDCelulaModel celulaAlterada, SDCelulaModel oldCelula) { AjustaStatusCelula(matriz, celulaAlterada); ReavaliaCelulasAposAlteracao(matriz, oldCelula); }