protected override string SolvePartOne() { var instructions = Input.SplitByNewline().Select(Parse).ToList(); var program = new BootProgram(instructions); return(program.Accumulator.ToString()); }
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()); }