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); } }
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); } }