Пример #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
        static void P1()
        {
            var lines = Utilities.GetStringFromFile("Day13.txt").SplitLongArrayFromString(',');

            var vm = new IntCodeVM(new IntCodeVMConfiguration()
            {
            });

            vm.WriteProgram(lines);
            //vm.WriteMemory(0, 1);
            vm.RunProgram();
            processOutputs(vm);
            Draw(grid);

            var blockcount = 0;

            for (int i = 0; i < grid.GetLength(0); i++)
            {
                for (int j = 0; j < grid.GetLength(1); j++)
                {
                    if (grid[i, j] == 'B')
                    {
                        blockcount++;
                    }
                }
            }
        }
Пример #3
0
        public static void RunDay()
        {
            Console.WriteLine("Day 8");
            var lines = Utilities.GetStringFromFile("Day8.txt");

            var layerCount = lines.Length / 150;

            int skip = 0;

            List <KeyValuePair <int, int> > zerosinlayers = new List <KeyValuePair <int, int> >();

            var layers = new List <KeyValuePair <int, string> >();

            for (int i = 0; i < layerCount; i++)
            {
                layers.Add(new KeyValuePair <int, string>(i + 1, lines.Substring(skip, 150)));
                skip += 150;
            }

            var leastzeros = layers.Select(x => new { zeroes = x.Value.Count(x => x == '0'), ones = x.Value.Count(x => x == '1'), twos = x.Value.Count(x => x == '2'), x }).OrderBy(x => x.zeroes);

            char[] finaloutput = new char[150];

            foreach (var layer in layers)
            {
                for (int i = 0; i < 150; i++)
                {
                    if (finaloutput[i] != ' ' && finaloutput[i] != '█')
                    {
                        switch (layer.Value[i])
                        {
                        case '0':
                            finaloutput[i] = ' ';
                            break;

                        case '1':
                            finaloutput[i] = '█';
                            break;

                        case '2':
                        default:
                            break;
                        }
                    }
                }
            }

            for (int i = 0; i < 6; i++)
            {
                Console.WriteLine(string.Join("", finaloutput.ToList().Skip(i * 25).Take(25).ToList()));
            }

            Console.WriteLine("**************");
            Console.WriteLine(Environment.NewLine);
        }
Пример #4
0
        public static void RunDay()
        {
            Console.WriteLine("Day 6");

            var code = Utilities.GetStringFromFile("Day6.txt");



            Console.WriteLine("**************");
            Console.WriteLine(Environment.NewLine);
        }
Пример #5
0
        public static void P1()
        {
            var lines = Utilities.GetStringFromFile("Day17.txt").SplitLongArrayFromString(',');

            var vm = new IntCodeVM(new IntCodeVMConfiguration()
            {
            });

            vm.WriteProgram(lines);

            char[,] charmap = new char[41, 49];

            while (vm.RunProgram() == HALTTYPE.HALT_WAITING)
            {
                break;
            }

            string map = "";

            int J = 0;
            int I = 0;

            while (vm.outputs.Count > 0)
            {
                char tile;
                tile = (char)vm.outputs.Dequeue();
                map += tile;
                if (tile == 10)
                {
                    J++;
                    I = 0;
                }
                else
                {
                    charmap[J, I] = tile;
                    I++;
                }
            }

            int score = 0;

            for (int i = 1; i < charmap.GetLength(1) - 1; i++)
            {
                for (int j = 1; j < charmap.GetLength(0) - 1; j++)
                {
                    if (charmap[j, i] == '#' && (charmap[j, i - 1] == '#' && charmap[j, i + 1] == '#' && charmap[j - 1, i] == '#' && charmap[j + 1, i] == '#'))
                    {
                        score += i * j;
                    }
                }
            }

            Console.Write(map);
        }
Пример #6
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());
        }
Пример #7
0
        static int CheckBeam(int x, int y)
        {
            var lines = Utilities.GetStringFromFile("Day19.txt").SplitLongArrayFromString(',');

            var vm = new IntCodeVM(new IntCodeVMConfiguration()
            {
            });

            vm.WriteProgram(lines);
            while (vm.RunProgram() == HALTTYPE.HALT_WAITING)
            {
                vm.WriteInput(x);
                vm.WriteInput(y);
            }

            return((int)vm.outputs.Dequeue());
        }
Пример #8
0
        public static void RunDay()
        {
            Console.WriteLine("Day 2");

            var lines = Utilities.GetStringFromFile("Day2.txt");

            var output = mysterfunc(12, 2, lines);

            Console.WriteLine(output);

            var outputstr = RunAllComobos(lines);

            Console.WriteLine(outputstr);

            Console.WriteLine("**************");
            Console.WriteLine(Environment.NewLine);
        }
Пример #9
0
        public static void RunDay()
        {
            Console.WriteLine("Day 5");

            var code = Utilities.GetStringFromFile("Day5.txt").SplitIntArrayFromString(',');
            var vm   = new IntCodeVMDay5();

            vm.RunProgram(code, 1);
            Console.WriteLine(vm.outputs.Last());


            code = Utilities.GetStringFromFile("Day5.txt").SplitIntArrayFromString(',');
            vm.RunProgram(code, 5);
            Console.WriteLine(vm.outputs.Last());

            Console.WriteLine("**************");
            Console.WriteLine(Environment.NewLine);
        }
Пример #10
0
        public static void RunDay()
        {
            Console.WriteLine("Day 4");

            var lines = Utilities.GetStringFromFile("Day4.txt");

            var passwords2 = ParsePasswordsP1(new List <string>()
            {
                "112233", "123444", "111122"
            });
            var passwords = ParsePasswordsP1(GeneratePasswords(lines));

            Console.WriteLine($" Part 1 Password Count: {passwords.Count()}");

            passwords = ParsePasswordsP2(GeneratePasswords(lines));
            Console.WriteLine($" Part 2 Password Count: {passwords.Count()}");

            Console.WriteLine("**************");
            Console.WriteLine(Environment.NewLine);
        }
Пример #11
0
        static void P2()
        {
            var lines = Utilities.GetStringFromFile("Day13.txt").SplitLongArrayFromString(',');

            var vm = new IntCodeVM(new IntCodeVMConfiguration()
            {
            });

            vm.WriteProgram(lines);
            vm.WriteMemory(0, 2);
            processOutputs(vm);
            //Draw(grid);

            while (vm.RunProgram() == HALTTYPE.HALT_WAITING)
            {
                processOutputs(vm);

                if (ballPos < paddlepos)
                {
                    vm.WriteInput(-1);
                }
                else if (ballPos > paddlepos)
                {
                    vm.WriteInput(1);
                }
                else
                {
                    vm.WriteInput(0);
                }
                Draw(grid);

                if (blockcount == 0)
                {
                    break;
                }
            }
            processOutputs(vm);
            Draw(grid);
        }
Пример #12
0
        static void P1()
        {
            var lines = Utilities.GetStringFromFile("Day19.txt").SplitLongArrayFromString(',');



            char[,] charmap = new char[1200, 1200];

            Queue <KeyValuePair <int, int> > coords = new Queue <KeyValuePair <int, int> >();

            Queue <KeyValuePair <int, int> > usedcoords = new Queue <KeyValuePair <int, int> >();

            for (int i = 0; i < 1200; i++)
            {
                for (int j = 0; j < 1200; j++)
                {
                    coords.Enqueue(new KeyValuePair <int, int>(i, j));
                }
            }
            Queue <long> outputs = new Queue <long>();

            while (coords.Count > 0)
            {
                Console.WriteLine(coords.Count);
                var vm = new IntCodeVM(new IntCodeVMConfiguration()
                {
                });
                vm.WriteProgram(lines);
                var coord = coords.Dequeue();
                vm.WriteInput(coord.Key);
                vm.WriteInput(coord.Value);

                while (vm.RunProgram() == HALTTYPE.HALT_WAITING)
                {
                    if (coords.Count == 0)
                    {
                        break;
                    }
                }
                outputs.Enqueue(vm.outputs.Dequeue());
                usedcoords.Enqueue(new KeyValuePair <int, int>(coord.Key, coord.Value));
            }



            long count = 0;

            while (outputs.Count > 0)
            {
                var output   = outputs.Dequeue();
                var outcoord = usedcoords.Dequeue();
                charmap[outcoord.Key, outcoord.Value] = output.ToString()[0];
                count += output;
            }

            Draw(charmap);

            var strgen = new StringBuilder();

            for (int i = 0; i < charmap.GetLength(0); i++)
            {
                for (int j = 0; j < charmap.GetLength(1); j++)
                {
                    strgen.Append(charmap[i, j]);
                }
                strgen.Append(Environment.NewLine);
            }

            var s = strgen.ToString();
        }
Пример #13
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;
            }
        }
Пример #14
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);
        }
Пример #15
0
        public static void P2()
        {
            var lines = Utilities.GetStringFromFile("Day17.txt").SplitLongArrayFromString(',');

            var vm = new IntCodeVM(new IntCodeVMConfiguration()
            {
                FriendlyLogging = false
            });

            vm.WriteProgram(lines);
            vm.WriteMemory(0, 2);

            var input = "65,44,65,44,66,44,67,44,66,44,67,44,66,44,67,44,67,44,65,10,76,44,49,48,44,82,44,56,44,82,44,56,10,76,44,49,48,44,76,44,49,50,44,82,44,56,44,82,44,49,48,10,82,49,48,44,76,49,50,44,82,49,48,10".Split(",").Select(int.Parse).ToList();
            var main  = "65,44,65,44,66,44,67,44,66,44,67,44,66,44,67,44,67,44,65,10".Split(",").Select(int.Parse).ToList();
            var A     = "76,44,49,48,44,82,44,56,44,82,44,56,10".Split(",").Select(int.Parse).ToList();
            var B     = "76,44,49,48,44,76,44,49,50,44,82,44,56,44,82,44,49,48,10".Split(",").Select(int.Parse).ToList();
            var C     = "82,44,49,48,44,76,44,49,50,44,82,44,49,48,10".Split(",").Select(int.Parse).ToList();
            //foreach (var inp in input)
            //{
            //    vm.WriteInput(inp);
            //}
            //vm.WriteInput(110);
            //vm.WriteInput(10);

            var inpPhase = 0;

            while (vm.RunProgram() == HALTTYPE.HALT_WAITING)
            {
                while (vm.outputs.Count > 0)
                {
                    Console.Write((char)vm.outputs.Dequeue());
                }
                switch (inpPhase)
                {
                case 0:
                    foreach (var inp in main)
                    {
                        vm.WriteInput(inp);
                    }
                    inpPhase++;
                    break;

                case 1:
                    foreach (var inp in A)
                    {
                        vm.WriteInput(inp);
                    }
                    inpPhase++;
                    break;

                case 2:
                    foreach (var inp in B)
                    {
                        vm.WriteInput(inp);
                    }
                    inpPhase++;
                    break;

                case 3:
                    foreach (var inp in C)
                    {
                        vm.WriteInput(inp);
                    }
                    inpPhase++;
                    break;

                case 4:
                    vm.WriteInput((int)'Y');
                    vm.WriteInput(10);
                    inpPhase++;
                    break;
                }
            }

            var x = vm.outputs.First();
            var y = vm.outputs.Last();
            int e = 0;
            var s = "";

            while (vm.outputs.Count > 0)
            {
                s += (char)vm.outputs.Dequeue();
                e++;
                if (e == 2051)
                {
                    Console.Clear();
                    Console.WriteLine(s);
                    s = "";
                    e = 0;
                    Thread.Sleep(250);
                }
            }

            while (vm.RunProgram() == HALTTYPE.HALT_WAITING)
            {
            }
        }
Пример #16
0
        static void P1()
        {
            var lines = Utilities.GetStringFromFile("Day15.txt").SplitLongArrayFromString(',');

            var vm = new IntCodeVM(new IntCodeVMConfiguration()
            {
            });

            vm.WriteProgram(lines);
            grid[25, 25] = 'S';

            Draw(grid);



            vm.WriteInput((long)Facing.north);

            //vm.WriteMemory(0, 1);
            while (vm.RunProgram() == HALTTYPE.HALT_WAITING)
            {
                processOutputs(vm);

                if (complete)
                {
                    break;
                }

                //what type of step was taken?
                switch (stepType)
                {
                case StepType.forward:
                    //was step forward successful?  if not turn left
                    if (!stepSuccess)
                    {
                        TurnDirection(Direction.left);
                    }
                    //attempt to turn right now.
                    stepType = StepType.right;
                    vm.WriteInput((long)GetTurnDirection(Direction.right));
                    break;

                case StepType.right:
                    //if step was successful change facing and try to turn right again
                    if (stepSuccess)
                    {
                        TurnDirection(Direction.right);
                        stepType = StepType.right;
                        vm.WriteInput((long)GetTurnDirection(Direction.right));
                    }
                    //step unsuccessful, continue forward.
                    else
                    {
                        vm.WriteInput((long)currentFacing);
                        stepType = StepType.forward;
                    }
                    break;

                default:
                    break;
                }

                //Draw(grid);
            }

            Draw(grid);

            int[] target = new int[] { 0, 0 };

            for (int i = 0; i < grid.GetLength(0); i++)
            {
                for (int j = 0; j < grid.GetLength(1); j++)
                {
                    if (grid[i, j] == 'O')
                    {
                        target = new int[] { i, j };
                    }
                }
            }

            var s = new seeker(target, 0, grid, new int[] { 25, 25 }, Facing.north);

            var result = s.Seek();

            Console.WriteLine($"Min Steps to get to Oxygen Control: {result.Value}");
        }
Пример #17
0
        static void P2()
        {
            var lines = Utilities.GetStringFromFile("Day19.txt").SplitLongArrayFromString(',');

            var vm = new IntCodeVM(new IntCodeVMConfiguration()
            {
            });

            var rows = 500;

            char[,] charmap = new char[1200, 1200];

            bool hitbeam   = false;
            int  beamstart = 0;
            int  drawx     = 0;
            int  drawy     = 0;

            for (int i = 4; i < 1200; i++)
            {
                for (int j = 0; j < 1200; j++)
                {
                    var output = CheckBeam(j, i);
                    if (output == 1)
                    {
                        if (!hitbeam)
                        {
                            hitbeam   = true;
                            beamstart = j - 2;
                        }

                        charmap[i, j] = '#';
                        //Draw(charmap);

                        //check if 99 up is valid
                        //if (i > 100)
                        //{
                        //    output = CheckBeam(j, i - 9);
                        //    if (output == 1)
                        //    {
                        //        if (CheckBeam(j + 9, i - 9) == 1)
                        //        {
                        //            Draw(charmap, j - 5, i - 20, 12, 12);
                        //            Console.Write($"{j} , {i - 10}");
                        //            return;
                        //        }

                        //    }
                        //}
                    }
                    else
                    {
                        if (hitbeam)
                        {
                            hitbeam = false;
                            j       = beamstart;
                            i++;
                            if (i == 1200)
                            {
                                break;
                            }
                            continue;
                        }
                    }
                }
            }

            string map = "";

            for (int i = 0; i < charmap.GetLength(1); i++)
            {
                for (int j = 0; j < charmap.GetLength(0); j++)
                {
                    map += (charmap[j, i] == '\0' ? '.' : charmap[j, i]);
                }
                map += Environment.NewLine;
            }


            Console.WriteLine(map);
            //for (int i = 101; i < 120; i++)
            //{
            //    for (int j = 70; j < 100; j++)
            //    {
            //        var output = CheckBeam(j, i);
            //        if (output == 1)
            //        {
            //            charmap[i, j] = '#';
            //        }
            //    }
            //}

            //Draw(charmap, 101, 70, 20, 20);
        }