public static int CalculateResultForPartOne(string[] input) { var program = new MyProgram(input); program.Run(); return(program.Accumulator); }
public static int CalculateResultForPartTwo(string[] input) { var instructionList = input.ToList(); var instructionToAlter = instructionList.FindIndex(i => i.StartsWith("nop") || i.StartsWith("jmp")); while (instructionToAlter >= 0) { AlterInstruction(input, instructionToAlter); var program = new MyProgram(input); var programEndedSuccessfully = program.Run(); if (programEndedSuccessfully) { return(program.Accumulator); } // change altered instruction back AlterInstruction(input, instructionToAlter); // alter next nop or jmp instruction instructionToAlter = instructionList.FindIndex( ++instructionToAlter, i => i.StartsWith("nop") || i.StartsWith("jmp")); } return(int.MinValue); }