Example #1
0
        public static CrossBoard ToCrossBoard(this CrossWordTimes self)
        {
            var board = new CrossBoard();

            int cols = (int)self.Size.Cols;
            int rows = (int)self.Size.Rows;

            board.SetBoardSize(cols, rows);

            int n = 0;

            for (int row = 0; row < rows; row++)
            {
                for (int col = 0; col < cols; col++)
                {
                    var val = self.Grid[n];
                    if (val == ".")
                    {
                        board.AddStartWord(col, row);
                    }

                    n += 1;
                }
            }

            // debug the generated template
            // using (StreamWriter writer = new StreamWriter("template.txt"))
            // {
            //     board.WriteTemplateTo(writer);
            // }

            return(board);
        }
Example #2
0
        public void CrossBoardPreprocessTest()
        {
            ICrossBoard cb = new CrossBoard(5, 5);

            for (int i = 0; i < 5; i++)
            {
                var sw = new StartWord();
                sw.StartX = i;
                sw.StartY = 0;
                cb.AddStartWord(sw);
                if (i > 0)
                {
                    sw.StartX = 0;
                    sw.StartY = i;
                    cb.AddStartWord(sw);
                }
                else
                {
                    sw.StartX = 2;
                    sw.StartY = 2;
                    cb.AddStartWord(sw);
                }
            }

            cb.Preprocess(new Dictionary(cb.MaxWordLength));
            Assert.Equal(8, cb.GetPatternCount());
        }
Example #3
0
 public void CrossBoardPreprocessTest()
 {
     ICrossBoard cb = new CrossBoard();
     cb.SetBoardSize(5, 5);
     for (int i = 0; i < 5; i++)
     {
         var sw = new StartWord();
         sw.StartX = i;
         sw.StartY = 0;
         cb.AddStartWord(sw);
         if (i > 0)
         {
             sw.StartX = 0;
             sw.StartY = i;
             cb.AddStartWord(sw);
         }
         else
         {
             sw.StartX = 2;
             sw.StartY = 2;
             cb.AddStartWord(sw);
         }
     }
     cb.Preprocess(new Dictionary(cb.MaxWordLength));
     Assert.Equal(8, cb.GetPatternCount());
 }
Example #4
0
        public IActionResult GetCrossWords()
        {
            // Start the stopwatch
            var watch = new Stopwatch();

            watch.Start();

            CrossBoard generated = GetCrossboard();

            CrossWordTimes crossword;

            if (generated == null)
            {
                return(NotFound());
            }
            else
            {
                crossword = generated.ToCrossWordModel(dictionary);
            }

            watch.Stop();
            var responseTimeForCompleteRequest = watch.ElapsedMilliseconds;

            crossword.Title = $"Generated in {responseTimeForCompleteRequest} milliseconds";

            // make sure we use the right json serializer settings
            return(new JsonResult(crossword, CrossWordTimesConverter.Settings));
        }
Example #5
0
        static void oldTest()
        {
            //prepare cross board
            ICrossBoard cb = new CrossBoard();

            CreateCross(cb);
            var dict = new Dictionary("../../../dict/cz", cb.MaxWordLength);

            cb.Preprocess(dict);

            CrossPattern        cp    = cb.GetCrossPattern(32);
            CrossTransformation trans = cp.TryFill(null, "ADELAVOJTAHELA".AsSpan(), dict); //length 14

            trans.Transform(cp);
        }
Example #6
0
    public static ICrossBoard CreateFromStream(Stream s)
    {
        var r     = new StreamReader(s, Encoding.UTF8);
        var lines = new List <string>();

        while (true)
        {
            var line = r.ReadLine();
            if (string.IsNullOrEmpty(line))
            {
                break;
            }
            lines.Add(line);
        }

        int lineLength = -1;

        for (int i = 0; i < lines.Count; i++)
        {
            if (lineLength == -1)
            {
                lineLength = lines[i].Length;
            }
            else if (lines[i].Length != lineLength)
            {
                throw new Exception(
                          $"Line {i} has different length ({lines[i]}) then previous lines ({lineLength})");
            }
        }

        ICrossBoard board = new CrossBoard(lineLength, lines.Count);

        for (int row = 0; row < lines.Count; row++)
        {
            var line = lines[row];
            for (int col = 0; col < lineLength; col++)
            {
                if (line[col] == '-')
                {
                    board.AddStartWord(col, row);
                }
            }
        }

        return(board);
    }
Example #7
0
    public ICrossBoard Clone()
    {
        var result = new CrossBoard(_sizeX, _sizeY);

        result._startWords.AddRange(_startWords);
        result._horizontalPatterns = new List <CrossPattern>();
        foreach (var patt in _horizontalPatterns)
        {
            result._horizontalPatterns.Add((CrossPattern)patt.Clone());
        }

        result._verticalPatterns = new List <CrossPattern>();
        foreach (var patt in _verticalPatterns)
        {
            result._verticalPatterns.Add((CrossPattern)patt.Clone());
        }

        result.BindAdjacentPatterns();

        return(result);
    }
Example #8
0
        static ICrossBoard CreateCross()
        {
            const int   sizex = 11;
            const int   sizey = 15;
            ICrossBoard cb    = new CrossBoard(sizex, sizey);

            for (int i = 0; i < sizey; i++)
            {
                cb.AddStartWord(0, i);
            }

            for (int i = 1; i < sizex; i++)
            {
                cb.AddStartWord(i, 0);
            }

            cb.AddStartWord(7, 1);
            cb.AddStartWord(4, 3);
            cb.AddStartWord(3, 4);
            cb.AddStartWord(6, 4);
            cb.AddStartWord(7, 5);
            cb.AddStartWord(4, 6);
            cb.AddStartWord(1, 7);
            cb.AddStartWord(5, 7);
            cb.AddStartWord(9, 7);
            cb.AddStartWord(10, 7);
            cb.AddStartWord(8, 8);
            cb.AddStartWord(3, 9);
            cb.AddStartWord(6, 9);
            cb.AddStartWord(4, 10);
            cb.AddStartWord(7, 10);
            cb.AddStartWord(8, 11);
            cb.AddStartWord(5, 12);
            cb.AddStartWord(6, 13);
            cb.AddStartWord(6, 14);
            cb.AddStartWord(10, 14);

            return(cb);
        }
Example #9
0
        static void oldTest()
        {
            //prepare cross board
            ICrossBoard cb = new CrossBoard();
            CreateCross(cb);
            var dict = new Dictionary("../../../dict/cz", cb.MaxWordLength);
            cb.Preprocess(dict);

            CrossPattern cp = cb.GetCrossPattern(32);
            CrossTransformation trans = cp.TryFill("ADELAVOJTAHELA", dict); //length 14
            trans.Transform(cp);
        }
Example #10
0
        private CrossBoard GetCrossboard()
        {
            ICrossBoard board = null;
            // var template = GetRandomCrosswordTemplateFromDb();
            CrosswordTemplate template = null;

            if (template != null)
            {
                board = new CrossBoard();

                int cols = (int)template.Cols;
                int rows = (int)template.Rows;

                board.SetBoardSize(cols, rows);

                int n = 0;
                for (int row = 0; row < rows; row++)
                {
                    for (int col = 0; col < cols; col++)
                    {
                        var val = template.Grid[n];
                        if (val == ".")
                        {
                            board.AddStartWord(col, row);
                        }

                        n += 1;
                    }
                }

                // debug the generated template
                // using (StreamWriter writer = new StreamWriter("template.txt"))
                // {
                //     board.WriteTemplateTo(writer);
                // }
            }
            else
            {
                var model = CrossBoardCreator.GetCrossWordModelFromUrl("http-random");
                board = model.ToCrossBoard();

                // add in database
                var newTemplate = new CrosswordTemplate()
                {
                    Rows = model.Size.Rows,
                    Cols = model.Size.Cols,
                    Grid = model.Grid
                };

                db.CrosswordTemplates.Add(newTemplate);
                db.SaveChanges();
            }

            var gen = new CrossGenerator(dictionary, board);

            board.Preprocess(dictionary);

            var generated = gen.Generate().FirstOrDefault() as CrossBoard;

            return(generated);
        }