private CarpakPoint StepsToLastLevel(int[,] carpark, CarpakPoint nextStart, List <string> result) { var lastStair = nextStart.Position; for (int level = nextStart.Level; level < _carParkLevel - 1;) { var stairIdx = -1; for (int i = 0; i < _carParkWidth; i++) { if (carpark[level, i] == 1) { stairIdx = i; } } var stepToStair = (stairIdx > lastStair ? "R" : "L") + Math.Abs(stairIdx - lastStair); result.Add(stepToStair); lastStair = stairIdx; for (var stair = level; stair < _carParkWidth; stair++) { if (carpark[stair, stairIdx] != 1) { result.Add("D" + (stair - level)); level += (stair - level); break; } } } return(new CarpakPoint() { Level = 0, Position = lastStair }); }
private CarpakPoint FindStart(int[,] carPark) { var nextStart = new CarpakPoint(); for (int level = 0; level < _carParkLevel - 1; level++) { var startIdx = FindStart(carPark, level); if (startIdx == -1) { continue; } nextStart = new CarpakPoint() { Level = level, Position = startIdx }; break; } return(nextStart); }