示例#1
0
        public void GetShortestPathThroughRecursiveMazeTest()
        {
            var testData = new List <Tuple <string[], int> >(new Tuple <string[], int>[] {
                //             Z L X W       C
                //             Z P Q B       K
                //  ###########.#.#.#.#######.###############
                //  #...#.......#.#.......#.#.......#.#.#...#
                //  ###.#.#.#.#.#.#.#.###.#.#.#######.#.#.###
                //  #.#...#.#.#...#.#.#...#...#...#.#.......#
                //  #.###.#######.###.###.#.###.###.#.#######
                //  #...#.......#.#...#...#.............#...#
                //  #.#########.#######.#.#######.#######.###
                //  #...#.#    F       R I       Z    #.#.#.#
                //  #.###.#    D       E C       H    #.#.#.#
                //  #.#...#                           #...#.#
                //  #.###.#                           #.###.#
                //  #.#....OA                       WB..#.#..ZH
                //  #.###.#                           #.#.#.#
                //CJ......#                           #.....#
                //  #######                           #######
                //  #.#....CK                         #......IC
                //  #.###.#                           #.###.#
                //  #.....#                           #...#.#
                //  ###.###                           #.#.#.#
                //XF....#.#                         RF..#.#.#
                //  #####.#                           #######
                //  #......CJ                       NM..#...#
                //  ###.#.#                           #.###.#
                //RE....#.#                           #......RF
                //  ###.###        X   X       L      #.#.#.#
                //  #.....#        F   Q       P      #.#.#.#
                //  ###.###########.###.#######.#########.###
                //  #.....#...#.....#.......#...#.....#.#...#
                //  #####.#.###.#######.#######.###.###.#.#.#
                //  #.......#.......#.#.#.#.#...#...#...#.#.#
                //  #####.###.#####.#.#.#.#.###.###.#.###.###
                //  #.......#.....#.#...#...............#...#
                //  #############.#.#.###.###################
                //               A O F   N
                //               A A D   M
                new Tuple <string[], int>(
                    new string[]
                {
                    "             Z L X W       C                 ",
                    "             Z P Q B       K                 ",
                    "  ###########.#.#.#.#######.###############  ",
                    "  #...#.......#.#.......#.#.......#.#.#...#  ",
                    "  ###.#.#.#.#.#.#.#.###.#.#.#######.#.#.###  ",
                    "  #.#...#.#.#...#.#.#...#...#...#.#.......#  ",
                    "  #.###.#######.###.###.#.###.###.#.#######  ",
                    "  #...#.......#.#...#...#.............#...#  ",
                    "  #.#########.#######.#.#######.#######.###  ",
                    "  #...#.#    F       R I       Z    #.#.#.#  ",
                    "  #.###.#    D       E C       H    #.#.#.#  ",
                    "  #.#...#                           #...#.#  ",
                    "  #.###.#                           #.###.#  ",
                    "  #.#....OA                       WB..#.#..ZH",
                    "  #.###.#                           #.#.#.#  ",
                    "CJ......#                           #.....#  ",
                    "  #######                           #######  ",
                    "  #.#....CK                         #......IC",
                    "  #.###.#                           #.###.#  ",
                    "  #.....#                           #...#.#  ",
                    "  ###.###                           #.#.#.#  ",
                    "XF....#.#                         RF..#.#.#  ",
                    "  #####.#                           #######  ",
                    "  #......CJ                       NM..#...#  ",
                    "  ###.#.#                           #.###.#  ",
                    "RE....#.#                           #......RF",
                    "  ###.###        X   X       L      #.#.#.#  ",
                    "  #.....#        F   Q       P      #.#.#.#  ",
                    "  ###.###########.###.#######.#########.###  ",
                    "  #.....#...#.....#.......#...#.....#.#...#  ",
                    "  #####.#.###.#######.#######.###.###.#.#.#  ",
                    "  #.......#.......#.#.#.#.#...#...#...#.#.#  ",
                    "  #####.###.#####.#.#.#.#.###.###.#.###.###  ",
                    "  #.......#.....#.#...#...............#...#  ",
                    "  #############.#.#.###.###################  ",
                    "               A O F   N                     ",
                    "               A A D   M                     ",
                }, 396),
            });

            foreach (var testExample in testData)
            {
                var maze       = new DonutMaze(testExample.Item1, isRecursive: true);
                var pathResult = Day20.GetShortestPathThroughMaze(maze);
                Assert.Equal(testExample.Item2, pathResult.TotalPathCost);
            }
        }
示例#2
0
        public void GetShortestPathThroughMazeTest()
        {
            // Test examples taken from here:
            // https://adventofcode.com/2019/day/20
            var testData = new List <Tuple <string[], int> >(new Tuple <string[], int>[] {
                //          A
                //          A
                //   #######.#########
                //   #######.........#
                //   #######.#######.#
                //   #######.#######.#
                //   #######.#######.#
                //   #####  B    ###.#
                // BC...##  C    ###.#
                //   ##.##       ###.#
                //   ##...DE  F  ###.#
                //   #####    G  ###.#
                //   #########.#####.#
                // DE..#######...###.#
                //   #.#########.###.#
                // FG..#########.....#
                //   ###########.#####
                //              Z
                //              Z
                new Tuple <string[], int>(
                    new string[]
                {
                    "         A         ",
                    "         A         ",
                    "  #######.#########",
                    "  #######.........#",
                    "  #######.#######.#",
                    "  #######.#######.#",
                    "  #######.#######.#",
                    "  #####  B    ###.#",
                    "BC...##  C    ###.#",
                    "  ##.##       ###.#",
                    "  ##...DE  F  ###.#",
                    "  #####    G  ###.#",
                    "  #########.#####.#",
                    "DE..#######...###.#",
                    "  #.#########.###.#",
                    "FG..#########.....#",
                    "  ###########.#####",
                    "             Z     ",
                    "             Z     "
                }, 23),

                //                   A
                //                   A
                //  #################.#############
                //  #.#...#...................#.#.#
                //  #.#.#.###.###.###.#########.#.#
                //  #.#.#.......#...#.....#.#.#...#
                //  #.#########.###.#####.#.#.###.#
                //  #.............#.#.....#.......#
                //  ###.###########.###.#####.#.#.#
                //  #.....#        A   C    #.#.#.#
                //  #######        S   P    #####.#
                //  #.#...#                 #......VT
                //  #.#.#.#                 #.#####
                //  #...#.#               YN....#.#
                //  #.###.#                 #####.#
                //DI....#.#                 #.....#
                //  #####.#                 #.###.#
                //ZZ......#               QG....#..AS
                //  ###.###                 #######
                //JO..#.#.#                 #.....#
                //  #.#.#.#                 ###.#.#
                //  #...#..DI             BU....#..LF
                //  #####.#                 #.#####
                //YN......#               VT..#....QG
                //  #.###.#                 #.###.#
                //  #.#...#                 #.....#
                //  ###.###    J L     J    #.#.###
                //  #.....#    O F     P    #.#...#
                //  #.###.#####.#.#####.#####.###.#
                //  #...#.#.#...#.....#.....#.#...#
                //  #.#####.###.###.#.#.#########.#
                //  #...#.#.....#...#.#.#.#.....#.#
                //  #.###.#####.###.###.#.#.#######
                //  #.#.........#...#.............#
                //  #########.###.###.#############
                //           B   J   C
                //           U   P   P
                new Tuple <string[], int>(
                    new string[]
                {
                    "                   A               ",
                    "                   A               ",
                    "  #################.#############  ",
                    "  #.#...#...................#.#.#  ",
                    "  #.#.#.###.###.###.#########.#.#  ",
                    "  #.#.#.......#...#.....#.#.#...#  ",
                    "  #.#########.###.#####.#.#.###.#  ",
                    "  #.............#.#.....#.......#  ",
                    "  ###.###########.###.#####.#.#.#  ",
                    "  #.....#        A   C    #.#.#.#  ",
                    "  #######        S   P    #####.#  ",
                    "  #.#...#                 #......VT",
                    "  #.#.#.#                 #.#####  ",
                    "  #...#.#               YN....#.#  ",
                    "  #.###.#                 #####.#  ",
                    "DI....#.#                 #.....#  ",
                    "  #####.#                 #.###.#  ",
                    "ZZ......#               QG....#..AS",
                    "  ###.###                 #######  ",
                    "JO..#.#.#                 #.....#  ",
                    "  #.#.#.#                 ###.#.#  ",
                    "  #...#..DI             BU....#..LF",
                    "  #####.#                 #.#####  ",
                    "YN......#               VT..#....QG",
                    "  #.###.#                 #.###.#  ",
                    "  #.#...#                 #.....#  ",
                    "  ###.###    J L     J    #.#.###  ",
                    "  #.....#    O F     P    #.#...#  ",
                    "  #.###.#####.#.#####.#####.###.#  ",
                    "  #...#.#.#...#.....#.....#.#...#  ",
                    "  #.#####.###.###.#.#.#########.#  ",
                    "  #...#.#.....#...#.#.#.#.....#.#  ",
                    "  #.###.#####.###.###.#.#.#######  ",
                    "  #.#.........#...#.............#  ",
                    "  #########.###.###.#############  ",
                    "           B   J   C               ",
                    "           U   P   P               ",
                }, 58),
            });

            foreach (var testExample in testData)
            {
                var maze       = new DonutMaze(testExample.Item1);
                var pathResult = Day20.GetShortestPathThroughMaze(maze);
                Assert.Equal(testExample.Item2, pathResult.TotalPathCost);
            }
        }