public void PlaceraSiffra_KontrollTabortKandidaterIRutaMedPlaceradSiffra()
        {
            //Setup
            int          rad        = 2;
            int          kolumn     = 2;
            int          siffra     = 5;
            SudokuPussel pussel     = SkapaEttPusselOchPlaceraEnSiffra(rad, kolumn, siffra);
            bool         korrekt    = true;
            var          kandidater = from k in pussel.AllaKandidater
                                      join s in pussel.SpelPlan on k.SudokuRutId equals s.Id
                                      where s.Rad == rad && s.Kolumn == kolumn
                                      select new
            {
                möjlig = k.Möjlig,
            };

            //Utför
            foreach (var kandidat in kandidater)
            {
                if (kandidat.möjlig)
                {
                    korrekt = false;
                }
            }
            // Kontroll
            Assert.AreEqual(true, korrekt);
        }
        private SudokuPussel SkapaEttPusselOchPlaceraEnSiffra(int rad, int kolumn, int siffra)
        {
            SudokuPussel pussel = new SudokuPussel(new Sudoku.Struct.Storlek(3, 3));

            pussel.PlaceraSiffra(rad, kolumn, siffra);
            return(pussel);
        }
        public void PlaceraSiffra_KontrollSiffraPlacerasRätt()
        {
            //Setup
            int          rad     = 2;
            int          kolumn  = 2;
            int          siffra  = 5;
            SudokuPussel pussel  = new SudokuPussel(new Sudoku.Struct.Storlek(3, 3));
            bool         korrekt = false;

            //Utför
            pussel.PlaceraSiffra(rad, kolumn, siffra);
            foreach (SudokuRuta ruta in pussel.SpelPlan)
            {
                if (ruta.Rad == rad && ruta.Kolumn == kolumn && ruta.Siffra == siffra)
                {
                    korrekt = true;
                }
                if ((ruta.Rad != rad || ruta.Kolumn != kolumn) && ruta.Siffra != 0)
                {
                    korrekt = false;
                    break;
                }
            }

            //Kontroll
            Assert.AreEqual(true, korrekt);
        }
        public void PlaceraSiffra_KontrollAvKandidaterIRutorSomIntePåverkasAvPlaceradSiffra()
        {
            //Setup
            int          rad        = 3;
            int          kolumn     = 1;
            int          box        = 3;
            int          siffra     = 7;
            SudokuPussel pussel     = SkapaEttPusselOchPlaceraEnSiffra(rad, kolumn, siffra);
            bool         korrekt    = true;
            var          kandidater = from k in pussel.AllaKandidater
                                      join s in pussel.SpelPlan on k.SudokuRutId equals s.Id
                                      where s.Rad != rad && s.Kolumn != kolumn && s.Box != box
                                      select new
            {
                möjlig = k.Möjlig
            };

            //Utför
            foreach (var kandidat in kandidater)
            {
                if (!kandidat.möjlig)
                {
                    korrekt = false;
                }
            }
            //Kontroll
            Assert.AreEqual(true, korrekt);
        }
            private SudokuPussel SkapaEttPusselMedSingel_I_Box()
            {
                SudokuPussel pussel = new SudokuPussel(new Sudoku.Struct.Storlek(3, 3));

                pussel.PlaceraSiffra(0, 0, 1);
                pussel.PlaceraSiffra(7, 1, 1);
                pussel.PlaceraSiffra(5, 2, 4);
                pussel.PlaceraSiffra(3, 2, 5);
                return(pussel);
            }
            private SudokuPussel SkapaEttPusselMedSingel_I_Kolumn()
            {
                SudokuPussel pussel = new SudokuPussel(new Sudoku.Struct.Storlek(3, 3));

                pussel.PlaceraSiffra(1, 4, 7);
                pussel.PlaceraSiffra(8, 3, 7);
                pussel.PlaceraSiffra(5, 5, 4);
                pussel.PlaceraSiffra(3, 5, 5);
                return(pussel);
            }
            private SudokuPussel SkapaEttPusselMedSingel_I_Rad()
            {
                SudokuPussel pussel = new SudokuPussel(new Sudoku.Struct.Storlek(3, 3));

                pussel.PlaceraSiffra(0, 0, 3);
                pussel.PlaceraSiffra(1, 3, 3);
                pussel.PlaceraSiffra(2, 7, 4);
                pussel.PlaceraSiffra(2, 8, 5);
                return(pussel);
            }
        public void Start_MedFelaktigtSudoku()
        {
            //Setup
            SudokuPussel pussel = SkapaEttFelaktigtSudoku();
            bool         resultat;

            //Utför
            resultat = pussel.Start();

            //kontroll
            Assert.AreEqual(false, resultat);
        }
        public void Start_MedKorrektSudoku()
        {
            //Setup
            SudokuPussel pussel = SkapaEttKorrektSudoku();
            bool         resultat;

            //Utför
            resultat = pussel.Start();

            //kontroll
            Assert.AreEqual(true, resultat);
        }
            public void Det_Finns_Ingen_Singel_I_Rad_Return_Tom_Lista()
            {
                //SetUp
                SudokuPussel             pussel   = new SudokuPussel(new Storlek(3, 3));
                List <SudokuSökResultat> resultat = new List <SudokuSökResultat>();

                //Utför
                SudokuLösare.FinnsDetSingelIRad(pussel, resultat);

                //Kontroll
                Assert.AreEqual(0, resultat.Count());
            }
            private SudokuPussel SkapaEttPusselMedSingelKandidat()
            {
                SudokuPussel pussel = new SudokuPussel(new Sudoku.Struct.Storlek(3, 3));

                pussel.PlaceraSiffra(0, 0, 1);
                pussel.PlaceraSiffra(0, 1, 2);
                pussel.PlaceraSiffra(0, 2, 3);
                pussel.PlaceraSiffra(0, 4, 5);
                pussel.PlaceraSiffra(0, 5, 6);
                pussel.PlaceraSiffra(0, 6, 7);
                pussel.PlaceraSiffra(0, 7, 8);
                pussel.PlaceraSiffra(1, 8, 9);
                return(pussel);
            }
        public void PlaceraSiffra_PlaceraSiffraTomBox()
        {
            //Setup
            int          rad    = 2;
            int          kolumn = 2;
            int          siffra = 5;
            SudokuPussel pussel = new SudokuPussel(new Sudoku.Struct.Storlek(3, 3));
            bool         returvärde;

            //Utför
            returvärde = pussel.PlaceraSiffra(rad, kolumn, siffra);

            //Kontroll
            Assert.AreEqual(true, returvärde);
        }
            public void Det_Finns_Ingen_Singel_I_Rad()
            {
                //Setup
                SudokuPussel pussel = new SudokuPussel(new Sudoku.Struct.Storlek(3, 3));
                bool         svar;

                //Utför
                pussel.PlaceraSiffra(0, 0, 3);
                pussel.PlaceraSiffra(1, 3, 3);
                pussel.PlaceraSiffra(2, 7, 4);
                svar = SudokuLösare.FinnsDetSingelIRad(pussel);

                //Kontroll
                Assert.AreEqual(false, svar);
            }
示例#14
0
        public static bool FinnsDetSingelKandidater(SudokuPussel pussel, List <SudokuSökResultat> resultat)
        {
            var sudokurutor = (from sudokuruta in pussel.SpelPlan
                               join kandidat in pussel.MöjligaKandidater on sudokuruta.Id equals kandidat.SudokuRutId
                               group kandidat by new { sudokuruta.Rad, sudokuruta.Kolumn } into ruta
                               select ruta).Where(x => x.Count() == 1);

            foreach (var ruta in sudokurutor)
            {
                foreach (var info in ruta)
                {
                    resultat.Add(new SudokuSökResultat {
                        Rad = ruta.Key.Rad, Kolumn = ruta.Key.Kolumn, Siffra = info.Siffra, Teknik = SudokuTekniker.SingelKandidater
                    });
                }
            }
            return(sudokurutor.Count() > 0);
        }
        public void PlaceraSiffra_KontrollTabortKandidaterIRutorSomPåverkasavPlaceradSiffra()
        {
            //Setup
            int          rad        = 3;
            int          kolumn     = 1;
            int          box        = 3;
            int          siffra     = 7;
            SudokuPussel pussel     = SkapaEttPusselOchPlaceraEnSiffra(rad, kolumn, siffra);
            bool         korrekt    = true;
            var          kandidater = from k in pussel.AllaKandidater
                                      join s in pussel.SpelPlan on k.SudokuRutId equals s.Id
                                      where s.Rad == rad || s.Kolumn == kolumn || s.Box == box
                                      select new
            {
                rad    = s.Rad,
                kolumn = s.Kolumn,
                möjlig = k.Möjlig,
                siffra = k.Siffra
            };

            //Utför
            foreach (var kandidat in kandidater)
            {
                if (kandidat.rad == rad && kandidat.kolumn == kolumn)
                {
                    continue;
                }
                if (kandidat.siffra == siffra)
                {
                    if (kandidat.möjlig)
                    {
                        korrekt = false;
                    }
                }
                else
                {
                    if (!kandidat.möjlig)
                    {
                        korrekt = false;
                    }
                }
            }
            Assert.AreEqual(true, korrekt);
        }
        public void BeräknaBox_KontrolleraSvar()
        {
            // Setup
            int               rad          = 5;
            int               kolumn       = 5;
            int               förväntadBox = 4;
            SudokuPussel      pussel       = new SudokuPussel(new Sudoku.Struct.Storlek(3, 3));
            List <SudokuRuta> spelPlan     = pussel.SpelPlan;
            int               box          = -1;

            //utför
            foreach (SudokuRuta ruta in spelPlan)
            {
                if (ruta.Rad == rad && ruta.Kolumn == kolumn)
                {
                    box = ruta.Box;
                }
            }
            Assert.AreEqual(förväntadBox, box, "Något går fel i beräkningen av boxar");
        }
        private SudokuPussel SkapaEttFelaktigtSudoku()
        {
            SudokuPussel             sudoku       = new SudokuPussel(new Storlek(3, 3));
            List <SudokuSökResultat> iFylladrutor = new List <SudokuSökResultat>();

            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 0, Kolumn = 4, Siffra = 8
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 1, Kolumn = 3, Siffra = 1
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 1, Kolumn = 8, Siffra = 9
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 2, Kolumn = 1, Siffra = 1
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 2, Kolumn = 8, Siffra = 3
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 3, Kolumn = 1, Siffra = 6
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 3, Kolumn = 3, Siffra = 2
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 3, Kolumn = 5, Siffra = 2
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 4, Kolumn = 0, Siffra = 3
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 4, Kolumn = 2, Siffra = 9
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 4, Kolumn = 4, Siffra = 5
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 4, Kolumn = 7, Siffra = 6
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 4, Kolumn = 8, Siffra = 7
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 5, Kolumn = 1, Siffra = 5
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 5, Kolumn = 6, Siffra = 2
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 5, Kolumn = 8, Siffra = 4
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 6, Kolumn = 1, Siffra = 3
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 6, Kolumn = 2, Siffra = 6
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 6, Kolumn = 5, Siffra = 5
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 6, Kolumn = 7, Siffra = 9
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 6, Kolumn = 8, Siffra = 8
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 7, Kolumn = 1, Siffra = 9
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 7, Kolumn = 4, Siffra = 3
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 7, Kolumn = 8, Siffra = 5
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 8, Kolumn = 0, Siffra = 7
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 8, Kolumn = 4, Siffra = 9
            });
            iFylladrutor.Add(new SudokuSökResultat()
            {
                Rad = 8, Kolumn = 7, Siffra = 1
            });
            sudoku.PlaceraSiffra(iFylladrutor);
            return(sudoku);
        }
示例#18
0
        public static bool FinnsDetSingelKandidater(SudokuPussel pussel)
        {
            List <SudokuSökResultat> sökresultat = new List <SudokuSökResultat>();

            return(FinnsDetSingelKandidater(pussel, sökresultat));
        }