예제 #1
0
        public void Part1()
        {
            var a  = (int[])Day5Input.Clone();
            var i  = 0;
            var op = a[i] % 100;

            while (op != 99)
            {
                var modes = a[i] / 100;
                switch (op)
                {
                case 1:
                    var term11 = modes % 10 == 1 ? a[i + 1] : a[a[i + 1]];
                    modes /= 10;
                    var term12 = modes % 10 == 1 ? a[i + 2] : a[a[i + 2]];
                    a[a[i + 3]] = term11 + term12;
                    i          += 4;
                    break;

                case 2:
                    var term21 = modes % 10 == 1 ? a[i + 1] : a[a[i + 1]];
                    modes /= 10;
                    var term22 = modes % 10 == 1 ? a[i + 2] : a[a[i + 2]];
                    a[a[i + 3]] = term21 * term22;
                    i          += 4;
                    break;

                case 3:
                    a[a[i + 1]] = 1;
                    i          += 2;
                    break;

                case 4:
                    var output = modes % 10 == 1 ? a[i + 1] : a[a[i + 1]];
                    TestContext.WriteLine(output.ToString());
                    i += 2;
                    break;
                }

                op = a[i] % 100;
            }
        }
예제 #2
0
        public void Part2()
        {
            var a  = (int[])Day5Input.Clone();
            var i  = 0;
            var op = a[i] % 100;

            while (op != 99)
            {
                var modes = a[i] / 100;
                switch (op)
                {
                case 1:
                    var term11 = modes % 10 == 1 ? a[i + 1] : a[a[i + 1]];
                    modes /= 10;
                    var term12 = modes % 10 == 1 ? a[i + 2] : a[a[i + 2]];
                    a[a[i + 3]] = term11 + term12;
                    i          += 4;
                    break;

                case 2:
                    var term21 = modes % 10 == 1 ? a[i + 1] : a[a[i + 1]];
                    modes /= 10;
                    var term22 = modes % 10 == 1 ? a[i + 2] : a[a[i + 2]];
                    a[a[i + 3]] = term21 * term22;
                    i          += 4;
                    break;

                case 3:
                    a[a[i + 1]] = 5;
                    i          += 2;
                    break;

                case 4:
                    var output = modes % 10 == 1 ? a[i + 1] : a[a[i + 1]];
                    TestContext.WriteLine(output.ToString());
                    i += 2;
                    break;

                case 5:
                    var param51 = modes % 10 == 1 ? a[i + 1] : a[a[i + 1]];
                    if (param51 != 0)
                    {
                        modes /= 10;
                        var param52 = modes % 10 == 1 ? a[i + 2] : a[a[i + 2]];
                        i = param52;
                    }
                    else
                    {
                        i += 3;
                    }

                    break;

                case 6:
                    var param61 = modes % 10 == 1 ? a[i + 1] : a[a[i + 1]];
                    if (param61 == 0)
                    {
                        modes /= 10;
                        var param62 = modes % 10 == 1 ? a[i + 2] : a[a[i + 2]];
                        i = param62;
                    }
                    else
                    {
                        i += 3;
                    }

                    break;

                case 7:
                    var param71 = modes % 10 == 1 ? a[i + 1] : a[a[i + 1]];
                    modes /= 10;
                    var param72 = modes % 10 == 1 ? a[i + 2] : a[a[i + 2]];
                    a[a[i + 3]] = param71 < param72 ? 1 : 0;
                    i          += 4;
                    break;

                case 8:
                    var param81 = modes % 10 == 1 ? a[i + 1] : a[a[i + 1]];
                    modes /= 10;
                    var param82 = modes % 10 == 1 ? a[i + 2] : a[a[i + 2]];
                    a[a[i + 3]] = param81 == param82 ? 1 : 0;
                    i          += 4;
                    break;
                }

                op = a[i] % 100;
            }
        }