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);
        }
Esempio n. 3
0
        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)));
        }
Esempio n. 4
0
        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));
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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)));
        }
Esempio n. 9
0
        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)[]
Esempio n. 10
0
        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));
        }
Esempio n. 11
0
        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)));
        }
Esempio n. 12
0
        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();
            }
        }
Esempio n. 13
0
        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[]
Esempio n. 14
0
        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));
        }
Esempio n. 15
0
        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);
            }
        }
Esempio n. 16
0
 public StorageManager(IStorageProvider storageProvider)
 {
     _gridSerializer  = GridSerializerFactory.Make(GridSerializerName.Base64);
     _storageProvider = storageProvider;
 }