Exemplo n.º 1
0
        public string CalculatePart1(string inputFile)
        {
            var program = GetProgram(inputFile);

            long?result = 0;
            var  runner = new IntCodeRunner9(program);

            var counter  = 0;
            var counter1 = 0;

            while (result != null)
            {
                result = runner.Run(0);
                if (counter == 2)
                {
                    counter = 0;
                    if (result.HasValue && result.Value == 2)
                    {
                        counter1++;
                    }
                }
                else
                {
                    counter++;
                }
            }

            return((counter1).ToString());
        }
Exemplo n.º 2
0
        private static Dictionary <ScaffoldPoint, PointType> GetMap(IntCodeRunner9 computer, StringBuilder sb)
        {
            var map = new Dictionary <ScaffoldPoint, PointType>();

            var x = 0;
            var y = 0;

            var result = computer.Run(null);

            while (result.HasValue)
            {
                if (result == 10)
                {
                    x = 0;
                    y++;
                    sb.Append((char)result);
                    result = computer.Run(null);
                    continue;
                }

                var type = GetPointType((char)result);
                map.Add(new ScaffoldPoint(x, y), type);

                sb.Append((char)result);

                x++;
                result = computer.Run(null);
            }

            return(map);
        }
Exemplo n.º 3
0
        public string CalculatePart1(string inputFile)
        {
            var program = GetProgram(inputFile);

            var computer = new IntCodeRunner9(program);
            var sb       = new StringBuilder();

            sb.AppendLine();
            var map = GetMap(computer, sb);

            long intersectionSum = 0;

            foreach (var scaffold in map
                     .Where(x => x.Value == PointType.Scaffold)
                     .Select(x => x.Key))
            {
                var values = Enum.GetValues(typeof(Direction)).Cast <Direction>();

                var isIntersection = values
                                     .Select(x => scaffold.GetPoint(x))
                                     .All(x => map.ContainsKey(x) && map[x] == PointType.Scaffold);

                if (isIntersection)
                {
                    intersectionSum += scaffold.X * scaffold.Y;
                }
            }

            sb.AppendLine(intersectionSum.ToString());

            var path = GetPath(map);

            sb.AppendLine(path);
            return(sb.ToString());
        }
Exemplo n.º 4
0
        public string CalculatePart2(string inputFile)
        {
            var program = GetProgram(inputFile);

            var runner  = new IntCodeRunner9(program);
            var painted =
                new IntCodeRunner9.DefaultableDictionary <PanelPoint, long>(new Dictionary <PanelPoint, long>(), 0);


            var currentPoint = new PanelPoint(0, 0);

            painted[currentPoint] = 1;
            var currentDirection = Direction.Up;

            while (true)
            {
                var color = painted[currentPoint];

                var paint = runner.Run(color);
                var turn  = runner.Run(color);

                if (!paint.HasValue || !turn.HasValue)
                {
                    break;
                }

                painted[currentPoint] = paint.Value;
                if (turn == 0)
                {
                    currentDirection = TurnLeft(currentDirection);
                }
                else if (turn == 1)
                {
                    currentDirection = TurnRight(currentDirection);
                }

                currentPoint = currentPoint.GetPoint(currentDirection);
            }

            var whites = painted.Where(x => x.Value == 1).OrderByDescending(x => x.Key.Y).GroupBy(x => x.Key.Y);

            var minX = painted.Min(x => x.Key.X);
            var maxX = painted.Max(x => x.Key.X);

            var sb = new StringBuilder();

            sb.AppendLine();
            foreach (var whiteLine in whites)
            {
                for (int i = minX; i < maxX + 1; i++)
                {
                    sb.Append(whiteLine.Any(x => x.Key.X == i) ? "*" : " ");
                }

                sb.AppendLine();
            }

            return(sb.ToString());
        }
Exemplo n.º 5
0
        public string CalculatePart2(string inputFile)
        {
            var program = GetProgram(inputFile);

            program[0] = 2;

            long score  = 0;
            long input  = 0;
            long paddle = 0;
            long ball   = 0;
            var  runner = new IntCodeRunner9(program);

            while (true)
            {
                var resultX = runner.Run(input);
                var resultY = runner.Run(input);
                var resultT = runner.Run(input);

                if (resultX == null || resultY == null || resultT == null)
                {
                    break;
                }

                if (resultX.Value == -1 && resultY.Value == 0)
                {
                    score = resultT.Value;
                    Console.WriteLine(score);
                }

                if (resultT == 3)
                {
                    paddle = resultX.Value;
                }
                if (resultT == 4)
                {
                    ball = resultX.Value;
                }

                if (ball < paddle)
                {
                    input = -1;
                }
                else if (ball > paddle)
                {
                    input = 1;
                }
                else
                {
                    input = 0;
                }
            }

            return(score.ToString());
        }
Exemplo n.º 6
0
        public string CalculatePart2(string inputFile)
        {
            var program = GetProgram(inputFile);

            var  sb     = new StringBuilder();
            long?result = 0;
            var  runner = new IntCodeRunner9(program);

            while (result.HasValue)
            {
                result = runner.Run(2);
                sb.AppendLine(result.ToString());
            }

            return(sb.ToString());
        }
Exemplo n.º 7
0
        public string CalculatePart2(string inputFile)
        {
            var program = GetProgram(inputFile);

            program[0] = 2;
            var solution = "A,A,B,C,B,C,B,C,C,A\nR,8,L,4,R,4,R,10,R,8\nL,12,L,12,R,8,R,8\nR,10,R,4,R,4\nn\n";

            var  computer  = new IntCodeRunner9(program);
            long?result    = 0;
            long numResult = 0;
            var  sb        = new StringBuilder();

            GetMap(computer, sb);

            foreach (var c in solution.ToCharArray())
            {
                var input = (long)c;
                result = computer.Run(input);
                if (c == '\n')
                {
                    sb.Append((char)result);
                    numResult = result.Value;
                    do
                    {
                        result = computer.Run(null);
                        if (result.HasValue)
                        {
                            sb.Append((char)result);
                            numResult = result.Value;
                        }
                    } while (result != null);

                    sb.AppendLine();
                }
            }

            sb.AppendLine(numResult.ToString());

            return(sb.ToString());
        }
Exemplo n.º 8
0
        public string CalculatePart1(string inputFile)
        {
            var program = GetProgram(inputFile);

            var runner  = new IntCodeRunner9(program);
            var painted =
                new IntCodeRunner9.DefaultableDictionary <PanelPoint, long>(new Dictionary <PanelPoint, long>(), 0);


            var currentPoint     = new PanelPoint(0, 0);
            var currentDirection = Direction.Up;

            while (true)
            {
                var color = painted[currentPoint];

                var paint = runner.Run(color);
                var turn  = runner.Run(color);

                if (!paint.HasValue || !turn.HasValue)
                {
                    break;
                }

                painted[currentPoint] = paint.Value;
                if (turn == 0)
                {
                    currentDirection = TurnLeft(currentDirection);
                }
                else if (turn == 1)
                {
                    currentDirection = TurnRight(currentDirection);
                }

                currentPoint = currentPoint.GetPoint(currentDirection);
            }

            return(painted.Count.ToString());
        }
Exemplo n.º 9
0
 public Droid(long[] program)
 {
     _runner = new IntCodeRunner9(program);
 }