示例#1
0
        protected override string SolvePartOne()
        {
            var instructions = Input.SplitByNewline().Select(Parse).ToList();
            var program      = new BootProgram(instructions);

            return(program.Accumulator.ToString());
        }
示例#2
0
        protected override string SolvePartTwo()
        {
            var acc          = 0;
            var instructions = Input.SplitByNewline().Select(Parse).ToList();

            for (var i = 0; i < instructions.Count; i++)
            {
                var newInstructions = JsonConvert.DeserializeObject <List <Instruction> >(JsonConvert.SerializeObject(instructions));
                switch (newInstructions[i].Operation)
                {
                case Operation.Jmp:
                    newInstructions[i].Operation = Operation.Nop;
                    break;

                case Operation.Nop:
                    newInstructions[i].Operation = Operation.Jmp;
                    break;

                case Operation.Acc:
                    continue;

                default:
                    continue;
                }

                var program = new BootProgram(newInstructions);
                if (program.InfiniteLoop)
                {
                    continue;
                }

                acc = program.Accumulator;
                break;
            }

            return(acc.ToString());
        }