Beispiel #1
0
        public void Test7()
        {
            var cm1 = CharMatrix.Create($"####{Environment.NewLine}#  #{Environment.NewLine}####", 0, 0, 4, 3);
            var cm2 = CharMatrix.Create($"?".Pastel(Color.Green), 1, 1, 1, 1);
            var cms = new CharMatrixStack(2);

            cms.Add(cm1);
            cms.Add(cm2);
            Assert.AreEqual(cms.X, 0);
            Assert.AreEqual(cms.Y, 0);
            Assert.AreEqual(cms.W, 4);
            Assert.AreEqual(cms.H, 3);

            Assert.AreEqual(ColoredStringExt.End + '#', cms[0, 0]);
            Assert.AreEqual(ColoredStringExt.End + '#', cms[1, 0]);
            Assert.AreEqual(ColoredStringExt.End + '#', cms[2, 0]);
            Assert.AreEqual(ColoredStringExt.End + '#', cms[3, 0]);

            Assert.AreEqual(ColoredStringExt.End + '#', cms[0, 1]);
            Assert.AreEqual(EnumerateWithColorInfoTests.BeginGreen + '?', cms[1, 1]);
            Assert.AreEqual(ColoredStringExt.End + ' ', cms[2, 1]);
            Assert.AreEqual(ColoredStringExt.End + '#', cms[3, 1]);

            Assert.AreEqual(ColoredStringExt.End + '#', cms[0, 2]);
            Assert.AreEqual(ColoredStringExt.End + '#', cms[1, 2]);
            Assert.AreEqual(ColoredStringExt.End + '#', cms[2, 2]);
            Assert.AreEqual(ColoredStringExt.End + '#', cms[3, 2]);
        }
        public void Test9()
        {
            var actual = CharMatrix.Create($"1{Environment.NewLine}2".Pastel(Color.Red), 0, 0, 1, 2);

            Assert.AreEqual(BeginRed + '1', actual[0, 0]);
            Assert.AreEqual(BeginRed + '2', actual[0, 1]);
        }
Beispiel #3
0
        private static bool TryParseMessage(Point[] points, out string message)
        {
            // Don't "parse" as such, but just do a crude check for well-known
            // message patterns.
            var(minx, maxx)    = (points.Min(p => p.X), points.Max(p => p.X));
            var(miny, maxy)    = (points.Min(p => p.Y), points.Max(p => p.Y));
            var(width, height) = (maxx - minx + 1, maxy - miny + 1);
            var map = CharMatrix.Create(width, height, ' ');

            foreach (var p in points)
            {
                map[p.X - minx, p.Y - miny] = '#';
            }
            //map.ConsoleWrite();
            var parseable = new Dictionary <string, char[, ]>
            {
                {
                    "HI",
                    new string[]
                    {
                        "#   #  ###",
                        "#   #   # ",
                        "#   #   # ",
                        "#####   # ",
                        "#   #   # ",
                        "#   #   # ",
                        "#   #   # ",
                        "#   #  ###",
                    }.ToCharMatrix()
                },
                {
                    "PHLGRNFK",
                    new string[]
                    {
                        "#####   #    #  #        ####   #####   #    #  ######  #    #",
                        "#    #  #    #  #       #    #  #    #  ##   #  #       #   # ",
                        "#    #  #    #  #       #       #    #  ##   #  #       #  #  ",
                        "#    #  #    #  #       #       #    #  # #  #  #       # #   ",
                        "#####   ######  #       #       #####   # #  #  #####   ##    ",
                        "#       #    #  #       #  ###  #  #    #  # #  #       ##    ",
                        "#       #    #  #       #    #  #   #   #  # #  #       # #   ",
                        "#       #    #  #       #    #  #   #   #   ##  #       #  #  ",
                        "#       #    #  #       #   ##  #    #  #   ##  #       #   # ",
                        "#       #    #  ######   ### #  #    #  #    #  #       #    #"
                    }.ToCharMatrix()
                }
            };

            message = parseable
                      .Where(p => map.Match(p.Value))
                      .Select(x => x.Key)
                      .FirstOrDefault();
            return(message != null);
        }
        public void Test11()
        {
            var cm = CharMatrix.Create("!", 1, 1, 1, 1);

            Assert.AreEqual(cm.X, 1);
            Assert.AreEqual(cm.Y, 1);
            Assert.AreEqual(cm.W, 1);
            Assert.AreEqual(cm.H, 1);

            Assert.AreEqual(End + '!', cm[1, 1]);
        }
        public void Test2()
        {
            var cm = CharMatrix.Create("!", 0, 0, 2, 1);

            Assert.AreEqual(cm.X, 0);
            Assert.AreEqual(cm.Y, 0);
            Assert.AreEqual(cm.W, 2);
            Assert.AreEqual(cm.H, 1);

            Assert.AreEqual(End + '!', cm[0, 0]);
            Assert.AreEqual(End + ' ', cm[1, 0]);
        }
Beispiel #6
0
        public void Test1()
        {
            var cm  = CharMatrix.Create("!", 0, 0, 1, 1);
            var cms = new CharMatrixStack(1);

            cms.Add(cm);
            Assert.AreEqual(cms.X, 0);
            Assert.AreEqual(cms.Y, 0);
            Assert.AreEqual(cms.W, 1);
            Assert.AreEqual(cms.H, 1);

            Assert.AreEqual(ColoredStringExt.End + '!', cms[0, 0]);
        }
        public void Test5()
        {
            var cm = CharMatrix.Create($"12{Environment.NewLine}34".Pastel(Color.Red), 0, 0, 2, 2);

            Assert.AreEqual(cm.X, 0);
            Assert.AreEqual(cm.Y, 0);
            Assert.AreEqual(cm.W, 2);
            Assert.AreEqual(cm.H, 2);

            Assert.AreEqual(BeginRed + '1', cm[0, 0]);
            Assert.AreEqual(BeginRed + '2', cm[1, 0]);
            Assert.AreEqual(BeginRed + '3', cm[0, 1]);
            Assert.AreEqual(BeginRed + '4', cm[1, 1]);
        }
        public void Test4()
        {
            var cm = CharMatrix.Create("!".Pastel(Color.Red), 0, 0, 2, 2);

            Assert.AreEqual(cm.X, 0);
            Assert.AreEqual(cm.Y, 0);
            Assert.AreEqual(cm.W, 2);
            Assert.AreEqual(cm.H, 2);

            Assert.AreEqual(BeginRed + '!', cm[0, 0]);
            Assert.AreEqual(End + ' ', cm[1, 0]);
            Assert.AreEqual(End + ' ', cm[0, 1]);
            Assert.AreEqual(End + ' ', cm[1, 1]);
        }
        public void Test6()
        {
            var cm = CharMatrix.Create("0" + $"12{Environment.NewLine}34".Pastel(Color.Red) + "0", 0, 0, 3, 2);

            Assert.AreEqual(cm.X, 0);
            Assert.AreEqual(cm.Y, 0);
            Assert.AreEqual(cm.W, 3);
            Assert.AreEqual(cm.H, 2);

            Assert.AreEqual(End + '0', cm[0, 0]);
            Assert.AreEqual(BeginRed + '1', cm[1, 0]);
            Assert.AreEqual(BeginRed + '2', cm[2, 0]);
            Assert.AreEqual(BeginRed + '3', cm[0, 1]);
            Assert.AreEqual(BeginRed + '4', cm[1, 1]);
            Assert.AreEqual(End + '0', cm[2, 1]);
        }
Beispiel #10
0
        public void Test3()
        {
            var cm1 = CharMatrix.Create("\0!", 0, 0, 2, 1);
            var cm2 = CharMatrix.Create("?\0", 0, 0, 2, 1);
            var cms = new CharMatrixStack(2);

            cms.Add(cm1);
            cms.Add(cm2);
            Assert.AreEqual(cms.X, 0);
            Assert.AreEqual(cms.Y, 0);
            Assert.AreEqual(cms.W, 2);
            Assert.AreEqual(cms.H, 1);

            Assert.AreEqual(ColoredStringExt.End + '?', cms[0, 0]);
            Assert.AreEqual(ColoredStringExt.End + '!', cms[1, 0]);
        }
Beispiel #11
0
        public void Test5()
        {
            var cm1 = CharMatrix.Create("!!!".Pastel(Color.Red), 0, 0, 3, 1);
            var cm2 = CharMatrix.Create("\0?\0".Pastel(Color.Green), 0, 0, 3, 1);
            var cms = new CharMatrixStack(2);

            cms.Add(cm1);
            cms.Add(cm2);
            Assert.AreEqual(cms.X, 0);
            Assert.AreEqual(cms.Y, 0);
            Assert.AreEqual(cms.W, 3);
            Assert.AreEqual(cms.H, 1);

            Assert.AreEqual(EnumerateWithColorInfoTests.BeginRed + '!', cms[0, 0]);
            Assert.AreEqual(EnumerateWithColorInfoTests.BeginGreen + '?', cms[1, 0]);
            Assert.AreEqual(EnumerateWithColorInfoTests.BeginRed + '!', cms[2, 0]);
        }
Beispiel #12
0
        public void Test6()
        {
            var cm1 = CharMatrix.Create($"!!!{Environment.NewLine}!!!".Pastel(Color.Red), 0, 0, 3, 2);
            var cm2 = CharMatrix.Create($"\0?\0{Environment.NewLine}\0?\0".Pastel(Color.Green), 0, 0, 3, 2);
            var cms = new CharMatrixStack(2);

            cms.Add(cm1);
            cms.Add(cm2);
            Assert.AreEqual(cms.X, 0);
            Assert.AreEqual(cms.Y, 0);
            Assert.AreEqual(cms.W, 3);
            Assert.AreEqual(cms.H, 2);

            Assert.AreEqual(EnumerateWithColorInfoTests.BeginRed + '!', cms[0, 0]);
            Assert.AreEqual(EnumerateWithColorInfoTests.BeginGreen + '?', cms[1, 0]);
            Assert.AreEqual(EnumerateWithColorInfoTests.BeginRed + '!', cms[2, 0]);

            Assert.AreEqual(EnumerateWithColorInfoTests.BeginRed + '!', cms[0, 1]);
            Assert.AreEqual(EnumerateWithColorInfoTests.BeginGreen + '?', cms[1, 1]);
            Assert.AreEqual(EnumerateWithColorInfoTests.BeginRed + '!', cms[2, 1]);
        }
Beispiel #13
0
        private static char[,] ReadScreen(string[] input)
        {
            var screen = CharMatrix.Create(Width, Height, ' ');

            foreach (var line in input)
            {
                // rect 49x1
                // rotate row y=2 by 34
                // rotate column x=44 by 1
                if (line.IsRxMatch("rect %dx%d", out var captures))
                {
                    var(w, h) = captures.Get <int, int>();
                    for (var x = 0; x < w; x++)
                    {
                        for (var y = 0; y < h; y++)
                        {
                            screen[x, y] = '#';
                        }
                    }
                }
                else if (line.IsRxMatch("rotate row y=%d by %d", out captures))
                {
                    var(row, dx) = captures.Get <int, int>();
                    screen.ShiftRowRight(row, dx);
                }
                else if (line.IsRxMatch("rotate column x=%d by %d", out captures))
                {
                    var(col, dy) = captures.Get <int, int>();
                    screen.ShiftColDown(col, dy);
                }
                else
                {
                    throw new Exception($"Unhandled line '{line}'");
                }
            }
            return(screen);
        }
 protected internal override ICharMatrix GetCharMatrix(string value)
 {
     return(CharMatrix.Create(Value.Trim(), GetX(), GetY(), GetWidth(), GetHeight()));
 }
 public void Test8()
 {
     var actual = CharMatrix.Create("!".Pastel(Color.Red), 0, 0, 2, 1);
     Assert.AreEqual(BeginRed + '!', actual[0, 0]);
     Assert.AreEqual(End + ' ', actual[1, 0]);
 }