private void CalculateNumbersToShow(ref SudokuSchemaDTO sudoku) { int position = 0; Random random = new Random(); while (position < NUMBER_OF_ELEMENTS) { int nextStp = random.Next(0, 5); if (nextStp == 0) { continue; } position += nextStp; if (position > NUMBER_OF_ELEMENTS) { break; } var divMod = position % 9; var div = (position / 9); BaseCellDTO cell = new BaseCellDTO(div, divMod); sudoku.CellsToShow.Add(cell); } }
public SudokuSchemaDTO Generate() { SudokuSchemaDTO result = new SudokuSchemaDTO(); CalculateNumbersToShow(ref result); GenerateBasicSchema(ref result); return(result); }
private void GenerateBasicSchema(ref SudokuSchemaDTO sudoku) { ColumnsLogic columns = new ColumnsLogic(); LinesLogic lines = new LinesLogic(); while (sudoku.Solution.Count < 9) { string row = lines.GenerateNew(); if (sudoku.Solution.Contains(row)) { continue; } if (columns.IsValid(sudoku.Solution, row)) { var chars = row.ToCharArray(); for (int i = 0; i < chars.Length; i++) { var cell = new CellDTO(sudoku.Solution.Count, i) { Value = chars[i].ToString(), IsVisible = false, }; foreach (var item in sudoku.CellsToShow) { if (item.Row != sudoku.Solution.Count) { continue; } if (item.Column != i) { continue; } cell.IsVisible = true; } sudoku.SolutionMatrix.Add(cell); } sudoku.Lines.Add(new LineDTO(sudoku.Solution.Count, row)); sudoku.Solution.Add(row); } } }