예제 #1
0
        public static void part1()
        {
            long output        = 0;
            var  outputs       = new List <long>();
            var  phasesettings = new long[] { 0, 1, 2, 3, 4 };

            var range = Enumerable.Range(0, 44444).ToList().Select(x => x.ToString("00000")).Where(x => !x.Contains("5") && !x.Contains("6") && !x.Contains("7") && !x.Contains("8") && !x.Contains("9")).ToList();

            range = range.Where(x => x.Count(s => s == '0') == 1 && x.Count(s => s == '1') == 1 && x.Count(s => s == '2') == 1 && x.Count(s => s == '3') == 1 && x.Count(s => s == '4') == 1).ToList();
            long finaloutput = 0;

            foreach (var r in range)
            {
                for (int i = 0; i < 5; i++)
                {
                    phasesettings = r.ToList()
                                    .Select(x => long.Parse(x.ToString()))
                                    .ToArray();
                    var code = Utilities.GetStringFromFile("Day7.txt").SplitLongArrayFromString(',');
                    //var code = new int[] { 3, 15, 3, 16, 1002, 16, 10, 16, 1, 16, 15, 15, 4, 15, 99, 0, 0 };
                    var amp = new IntCodeVMOLD();
                    amp.RunProgram(code, new long[] { phasesettings[i], output });
                    output = amp.outputs.Last();
                    outputs.Add(output);
                }

                if (finaloutput < outputs.Last())
                {
                    finaloutput = outputs.Last();
                }
                outputs.Clear();
                output = 0;
            }
            Console.WriteLine(finaloutput);
        }
예제 #2
0
        public static void P2()
        {
            var lines  = Utilities.GetStringFromFile("Day9.txt").SplitLongArrayFromString(',');
            var config = new IntCodeVMConfiguration();
            //config = new IntCodeVMConfiguration { Logging = true, FriendlyLogging = false };

            var vm = new IntCodeVMOLD(config);

            vm.RunProgram(lines, new long[] { 2 });

            Console.WriteLine(vm.outputs.Peek());
        }
예제 #3
0
        static void P1()
        {
            var code          = Utilities.GetStringFromFile("Day11.txt").SplitLongArrayFromString(',');
            var paintedPoints = new List <string>();

            var vm = new IntCodeVMOLD(new IntCodeVMConfiguration()
            {
            });
            var grid   = new int[100, 100];
            var curPos = new int[2] {
                50, 50
            };
            var currentColor = 0;
            var input        = new long[1] {
                1
            };
            var state  = 0;
            int facing = 90;

            while (true)
            {
                //get color to paint
                state = vm.RunProgram(code, input, true);
                if (state == 1)
                {
                    var ls = paintedPoints.Distinct().ToList();
                    Draw(grid);
                    break;
                }
                var paint = vm.outputs.Dequeue();


                //get direction to turn
                state = vm.RunProgram(code, input, true);
                if (state == 1)
                {
                    break;
                }
                var turnDir   = vm.outputs.Dequeue();
                var turnAngle = turnDir == 0 ? -90 : 90;
                //paint
                grid[curPos[0], curPos[1]] = (int)paint;

                //turn
                facing += turnAngle;
                facing  = facing < 0 ? facing + 360 : facing; //less than 0, add 360
                facing  = facing == 360 ? 0 : facing;         //360, set to 0

                //Move
                switch (facing)
                {
                case 90:
                    //up
                    curPos[0]++;
                    break;

                case 270:
                    //down
                    curPos[0]--;
                    break;

                case 180:
                    //right
                    curPos[1]++;
                    break;

                case 0:
                    //left
                    curPos[1]--;
                    break;

                default:
                    break;
                }

                paintedPoints.Add($"{curPos[0]}, {curPos[1]}");

                //check to make sure we are on the grid
                if (curPos[0] > 99 || curPos[0] < 0 || curPos[1] > 99 || curPos[1] < 0)
                {
                    throw new Exception("Fail!");
                }

                currentColor = grid[curPos[0], curPos[1]];
                input[0]     = currentColor;
            }
        }
예제 #4
0
        public static void part2()
        {
            long output        = 0;
            var  outputs       = new List <long>();
            var  phasesettings = new long[] { 0, 1, 2, 3, 4 };

            var range = Enumerable.Range(0, 99999).ToList().Select(x => x.ToString("00000")).Where(x => !x.Contains("0") && !x.Contains("1") && !x.Contains("2") && !x.Contains("3") && !x.Contains("4")).ToList();

            range = range.Where(x => x.Count(s => s == '5') == 1 && x.Count(s => s == '6') == 1 && x.Count(s => s == '7') == 1 && x.Count(s => s == '8') == 1 && x.Count(s => s == '9') == 1).ToList();
            long finaloutput = 0;

            foreach (var r in range)
            {
                phasesettings = r.ToList()
                                .Select(x => long.Parse(x.ToString()))
                                .ToArray();
                //phasesettings = new int[] { 9, 8, 7, 6, 5 };
                var amp1 = new IntCodeVMOLD();
                var amp2 = new IntCodeVMOLD();
                var amp3 = new IntCodeVMOLD();
                var amp4 = new IntCodeVMOLD();
                var amp5 = new IntCodeVMOLD();

                var code1 = Utilities.GetStringFromFile("Day7.txt").SplitLongArrayFromString(',');
                var code2 = Utilities.GetStringFromFile("Day7.txt").SplitLongArrayFromString(',');
                var code3 = Utilities.GetStringFromFile("Day7.txt").SplitLongArrayFromString(',');
                var code4 = Utilities.GetStringFromFile("Day7.txt").SplitLongArrayFromString(',');
                var code5 = Utilities.GetStringFromFile("Day7.txt").SplitLongArrayFromString(',');

                //var code1 = new int[] { 3,26,1001,26,-4,26,3,27,1002,27,2,27,1,27,26,27,4,27,1001,28,-1,28,1005,28,6,99,0,0,5 };
                //var code2 = new int[] { 3,26,1001,26,-4,26,3,27,1002,27,2,27,1,27,26,27,4,27,1001,28,-1,28,1005,28,6,99,0,0,5 };
                //var code3 = new int[] { 3,26,1001,26,-4,26,3,27,1002,27,2,27,1,27,26,27,4,27,1001,28,-1,28,1005,28,6,99,0,0,5 };
                //var code4 = new int[] { 3,26,1001,26,-4,26,3,27,1002,27,2,27,1,27,26,27,4,27,1001,28,-1,28,1005,28,6,99,0,0,5 };
                //var code5 = new int[] { 3,26,1001,26,-4,26,3,27,1002,27,2,27,1,27,26,27,4,27,1001,28,-1,28,1005,28,6,99,0,0,5 };

                bool initSetup = true;
                //var code = Utilities.GetStringFromFile("Day7.txt").SplitIntArrayFromString(',');
                while (true)
                {
                    var isdone = 0;

                    long[] inp1 = initSetup ? new long[] { phasesettings[0], output } : new long[] { output };
                    isdone += amp1.RunProgram(code1, inp1, true);
                    output  = amp1.outputs.Last();
                    //outputs.Add(output);

                    long[] inp2 = initSetup ? new long[] { phasesettings[1], output } : new long[] { output };
                    isdone += amp2.RunProgram(code2, inp2, true);
                    output  = amp2.outputs.Last();
                    //outputs.Add(output);

                    long[] inp3 = initSetup ? new long[] { phasesettings[2], output } : new long[] { output };
                    isdone += amp3.RunProgram(code3, inp3, true);
                    output  = amp3.outputs.Last();
                    //outputs.Add(output);

                    long[] inp4 = initSetup ? new long[] { phasesettings[3], output } : new long[] { output };
                    isdone += amp4.RunProgram(code4, inp4, true);
                    output  = amp4.outputs.Last();
                    //outputs.Add(output);

                    long[] inp5 = initSetup ? new long[] { phasesettings[4], output } : new long[] { output };
                    isdone += amp5.RunProgram(code5, inp5, true);
                    output  = amp5.outputs.Last();
                    outputs.Add(output);

                    if (initSetup)
                    {
                        initSetup = false;
                    }

                    if (isdone != 0)
                    {
                        break;
                    }
                }



                if (finaloutput < outputs.Last())
                {
                    finaloutput = outputs.Last();
                }
                outputs.Clear();
                output = 0;
            }

            Console.WriteLine(finaloutput);
        }