public void FindsAll() { const string givens = "3..1....9...4..26..7..298..9....5......812......9....1..469..3..87..3...1....8..2"; var grid = GridSerializerFactory.Make(GridSerializerName.Hodoku).Deserialize(givens); var techniques = _finder.FindAll(grid).OfType <HiddenSingle>().ToList(); (int r, int c, int value)[] expected = new[]
public void NoSolution() { const string givens = "9.....2.....2.761917269...429.5763..6.384279.7.8931.628..729.53529........7...92."; var grid = GridSerializerFactory.Make(GridSerializerName.Hodoku).Deserialize(givens); grid.FillAllLegalCandidates(); var results = _finder.FindAll(grid); Assert.Empty(results); }
public void FindBlock() { const string givens = "816..9247537..216.2..17683546972.5.332.9.467.7.1.63924.736954.26..2.739...2...756"; var grid = GridSerializerFactory.Make(GridSerializerName.Hodoku).Deserialize(givens); var results = _finder.FindAll(grid).OfType <FullHouse>().ToList(); Assert.Single(results); var result = results[0]; Assert.Equal(Value.Nine, result.Value); Assert.True(result.Position.Equals((8, 1))); }
public void FindCol() { const string givens = "..4156728215873496678249513....21367.61387.4...769.18.1.3.628747...3.651.4671.239"; var grid = GridSerializerFactory.Make(GridSerializerName.Hodoku).Deserialize(givens); var results = _finder.FindAll(grid).OfType <FullHouse>().ToList(); Assert.Single(results); var result = results[0]; Assert.Equal(Value.Nine, result.Value); Assert.True((6, 4) == (result.Position.X, result.Position.Y)); }
public void StartNewGame(string givens) { var serializer = GridSerializerFactory.Make(GridSerializerName.Default); if (!serializer.IsValidFormat(givens)) { throw new SudokuCoreException($"Game can not start. Givens can not be deserialized to valid grid. Passed givens = {givens}"); } var grid = serializer.Deserialize(givens); StartNewGame(grid, Difficulty.Unknown); }
public void FindSingle() { const string givens = "EIRgDqW22GMovaU8am095lFCgjGUAQqGGCBYgQLEysDUGwEzEuCABYbUAQYKdKQEICYg1thbbghGIAgTiGoJQMq1BSDFNAA"; var grid = GridSerializerFactory.Make(GridSerializerName.Base64).Deserialize(givens); var results = _finder.FindAll(grid).OfType <TwoStringKite>().ToList(); Assert.Single(results); var result = results[0]; Assert.Equal(Value.Five, result.Value); var expectedLegalPositions = new (int x, int y)[] { (5, 5), (1, 6) };
public void FindAll() { const string givens = "....3.2.4.....19.6.4.5..37.6...5..23.82...1955......678273.564.4.56..7...69.8.5.."; var grid = GridSerializerFactory.Make(GridSerializerName.Hodoku).Deserialize(givens); grid.FillAllLegalCandidates(); var results = _finder.FindAll(grid).OfType <LockedCandidatesClaiming>().ToList(); Assert.Equal(2, results.Count); Assert.Contains(results, result => result.Value == 4); Assert.Contains(results, result => result.Value == 9); (int r, int c)[] expectedPositions = new[]
public void FindAll() { const string givens = "...91...7..1..6394.694..15..94.3.2.....6.1943..3.4978..18.67439..6......9...84..."; var grid = GridSerializerFactory.Make(GridSerializerName.Hodoku).Deserialize(givens); grid.FillAllLegalCandidates(); var results = _finder.FindAll(grid).OfType <LockedCandidatesPointing>().ToList(); Assert.Equal(3, results.Count); var expectedValues = new[] { 3, 5, 8 }; Assert.True(expectedValues.All(value => results.Any(t => t.Value == value))); }
public void FindsOne() { const string givens = ".9...283.....45.1.........7..723...1....6....4...876..8.........1.92.....597...8."; var grid = GridSerializerFactory.Make(GridSerializerName.Hodoku).Deserialize(givens); grid.FillAllLegalCandidates(); var finder = new NakedQuadrupleFinder(); var results = finder.FindAll(grid).OfType <NakedSubset>().ToList(); Assert.Single(results); var result = results[0]; var expectedValues = new[] { 4, 5, 6, 9 }; var expectedPositions = new (int x, int y)[]
public void FindsOne() { const string givens = "2..364975369..2184......263........79.723.5466.......1793.2.418846193752125487639"; var grid = GridSerializerFactory.Make(GridSerializerName.Hodoku).Deserialize(givens); grid.FillAllLegalCandidates(); var results = _finder.FindAll(grid).OfType <HiddenSingle>().ToList(); Assert.Equal(2, results.Count); var result = results[0]; Assert.Equal(Value.Seven, result.Value); Assert.True(result.House == House.Block || result.House == House.Col); Assert.True((1, 2) == (result.Position.X, result.Position.Y)); }
public void FindOne() { const string givens = "38..59...5..3.1....91...53.1..2....446.598.179..413..6..5...62......2..5...1.5.43"; var grid = GridSerializerFactory.Make(GridSerializerName.Hodoku).Deserialize(givens); grid.FillAllLegalCandidates(); var finder = new HiddenTripleFinder(); var results = finder.FindAll(grid).OfType <HiddenSubset>().ToList(); Assert.Equal(2, results.Count); var values = new Value[] { 1, 3, 4 }; Assert.Contains(results, result => values.All(value => result.Values.Contains(value))); }
public void NoExceptions() { var givens = new string[] { ".....58...4.........7428.6.71..64..5....1....9..38..76.2.1536.........4...52.....", "............8.1247..426.1...619.....9.7...5.2.....596...2.978..7356.2............", "52...8....6..235....15.......5.1..797...8...534..9.1.......28....285..9....4...23", "..487..5......3..639......8......53...39526...69......8......459..7......2..381..", "62...47......1.....456...2.8.....4...6.9.3.5...1.....7.7...184.....9......65...71", }; foreach (var given in givens) { var grid = GridSerializerFactory.Make(GridSerializerName.Hodoku).Deserialize(given); grid.FillAllLegalCandidates(); _finder.FindAll(grid).ToList(); } }
public void FindOne() { const string givens = "1.....5973...2.....4.9...1....58......83.26......14....5...9.8.....5...4739.....2"; var grid = GridSerializerFactory.Make(GridSerializerName.Hodoku).Deserialize(givens); grid.FillAllLegalCandidates(); var finder = new XWingFinder(); var result = finder.FindAll(grid).OfType <XWing>().ToList(); Assert.Single(result); var first = result[0]; Assert.Equal(Value.Four, first.Value); Assert.Equal(House.Row, first.House); var points = new[]
public void FindsOne() { const string givens = ".7.......8..745...5.2.893.........712.7...6.445.........542.1.3...651..8.......2."; var grid = GridSerializerFactory.Make(GridSerializerName.Hodoku).Deserialize(givens); grid.FillAllLegalCandidates(); (int x, int y)expectedPositions = (3, 2); Value expectedValue = 1; var finder = new NakedSingleFinder(); var results = finder.FindAll(grid).OfType <NakedSingle>(); Assert.Single(results); var result = results.Single(); Assert.Equal(expectedValue, result.Value); Assert.True(expectedPositions == (result.Position.X, result.Position.Y)); }
public async Task <Grid> Make(Difficulty difficulty) { if (difficulty == Difficulty.Unknown) { throw new SudokuCoreException($"Can not use difficulty = {difficulty} to create make new grid."); } using HttpClient _httpClient = new HttpClient(); try { var sudoku = await _httpClient.GetFromJsonAsync <Sudoku>($"http://andzej-002-site2.ftempurl.com/sudokugenerator/{difficulty}"); var serializer = GridSerializerFactory.Make(GridSerializerName.Hodoku); return(serializer.Deserialize(sudoku.Given)); } catch (Exception ex) { throw new SudokuCoreException($"Failed to make grid with difficulty = {difficulty}.", ex); } }
public StorageManager(IStorageProvider storageProvider) { _gridSerializer = GridSerializerFactory.Make(GridSerializerName.Base64); _storageProvider = storageProvider; }