Exemplo n.º 1
0
        public static void Part1(string codeFile)
        {
            var phases        = new int[] { 0, 1, 2, 3, 4 };
            var output        = 0;
            var outputs       = new List <int>();
            var phasesettings = new int[] { 0, 1, 2, 3, 4 };

            List <string> range = new List <string>();

            GetPermutations(phases, ref range);
            int finaloutput = 0;

            foreach (var r in range)
            {
                for (int i = 0; i < 5; i++)
                {
                    phasesettings = r.ToList()
                                    .Select(x => int.Parse(x.ToString()))
                                    .ToArray();
                    var code = Utilities.ReadFileAsString(codeFile).Split(',').Select(int.Parse).ToArray();
                    var amp  = new IntCodeMachine();
                    amp.RunProgram(code, new int[] { phasesettings[i], output });
                    output = amp.outputs.Last();
                    outputs.Add(output);
                }
                finaloutput = Math.Max(finaloutput, outputs.Last());
                outputs.Clear();
                output = 0;
            }
            Console.WriteLine(finaloutput);
        }
Exemplo n.º 2
0
        public static void Part2(string codeFile)
        {
            var output        = 0;
            var outputs       = new List <int>();
            var phasesettings = new int[] { 9, 8, 7, 6, 5 };

            List <string> range = new List <string>();

            GetPermutations(phasesettings, ref range);
            int finaloutput = 0;

            foreach (var r in range)
            {
                phasesettings = r.ToList()
                                .Select(x => int.Parse(x.ToString()))
                                .ToArray();

                var amp1 = new IntCodeMachine();
                var amp2 = new IntCodeMachine();
                var amp3 = new IntCodeMachine();
                var amp4 = new IntCodeMachine();
                var amp5 = new IntCodeMachine();

                var code1 = Utilities.ReadFileAsString(codeFile).Split(',').Select(int.Parse).ToArray();
                var code2 = Utilities.ReadFileAsString(codeFile).Split(',').Select(int.Parse).ToArray();
                var code3 = Utilities.ReadFileAsString(codeFile).Split(',').Select(int.Parse).ToArray();
                var code4 = Utilities.ReadFileAsString(codeFile).Split(',').Select(int.Parse).ToArray();
                var code5 = Utilities.ReadFileAsString(codeFile).Split(',').Select(int.Parse).ToArray();

                bool initSetup = true;
                while (true)
                {
                    var isdone = 0;

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

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

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

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

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

                    if (initSetup)
                    {
                        initSetup = false;
                    }

                    if (isdone != 0)
                    {
                        break;
                    }
                }
                finaloutput = Math.Max(finaloutput, outputs.Last());
                outputs.Clear();
                output = 0;
            }

            Console.WriteLine(finaloutput);
        }