Пример #1
0
        public string CalculatePart1(string inputFile)
        {
            var program = GetProgram(inputFile);

            var max        = 0;
            var i          = new int[5];
            var lastOutput = 0;

            for (i[0] = 0; i[0] < 5; i[0]++)
            {
                for (i[1] = 0; i[1] < 5; i[1]++)
                {
                    for (i[2] = 0; i[2] < 5; i[2]++)
                    {
                        for (i[3] = 0; i[3] < 5; i[3]++)
                        {
                            for (i[4] = 0; i[4] < 5; i[4]++)
                            {
                                if (i.Distinct().Count() < 5)
                                {
                                    continue;
                                }


                                for (int ampIndex = 0; ampIndex < 5; ampIndex++)
                                {
                                    var a = new IntCodeRunner(program);
                                    a.Run(i[ampIndex]);
                                    lastOutput = (int)a.Run(lastOutput);
                                }

                                if (lastOutput > max)
                                {
                                    max = lastOutput;
                                }
                                lastOutput = 0;
                            }
                        }
                    }
                }
            }

            return(max.ToString());
        }
Пример #2
0
        public string CalculatePart2(string inputFile)
        {
            var program = GetProgram(inputFile);

            var max        = 0;
            var i          = new int[5];
            var lastOutput = 0;
            var start      = 5;
            var end        = 10;

            for (i[0] = start; i[0] < end; i[0]++)
            {
                for (i[1] = start; i[1] < end; i[1]++)
                {
                    for (i[2] = start; i[2] < end; i[2]++)
                    {
                        for (i[3] = start; i[3] < end; i[3]++)
                        {
                            for (i[4] = start; i[4] < end; i[4]++)
                            {
                                if (i.Distinct().Count() < 5)
                                {
                                    continue;
                                }

                                var a = new IntCodeRunner(program);
                                var b = new IntCodeRunner(program);
                                var c = new IntCodeRunner(program);
                                var d = new IntCodeRunner(program);
                                var e = new IntCodeRunner(program);
                                a.Run(i[0]);
                                b.Run(i[1]);
                                c.Run(i[2]);
                                d.Run(i[3]);
                                e.Run(i[4]);
                                int?result = null;

                                lastOutput = 0;
                                do
                                {
                                    try
                                    {
                                        var resultA = a.Run(lastOutput);
                                        var resultB = b.Run((int)resultA);
                                        var resultC = c.Run((int)resultB);
                                        var resultD = d.Run((int)resultC);
                                        var resultE = e.Run((int)resultD);
                                        result = resultE;

                                        if (result.HasValue)
                                        {
                                            lastOutput = result.Value;
                                        }
                                    }
                                    catch
                                    {
                                        //Console.WriteLine(exception);
                                        break;
                                        //throw;
                                    }
                                } while (result.HasValue);

                                if (lastOutput > max)
                                {
                                    max = lastOutput;
                                }
                            }
                        }
                    }
                }
            }

            return(max.ToString());
        }