예제 #1
0
        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
            });
        }
예제 #2
0
        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);
        }