public void Part1Test() { // Given var program = HandheldProgram.Parse(Input.Get(8)); var computer = new HandheldComputer(program); var accumulator = computer.Accumulator; var visited = new HashSet <int>(); // When while (!visited.Contains(computer.ProgramCounter)) { accumulator = computer.Accumulator; visited.Add(computer.ProgramCounter); computer.Step(); } // Then Assert.Equal(5, accumulator); }
private void MapRawDataToProgram(List <string> rawInstructions) { _program = new HandheldProgram() { Accumulator = 0, CurrentIndex = 0, Instructions = new List <Instruction>() }; foreach (var instruction in rawInstructions) { var newInstruction = new Instruction() { Opperation = GetOpperationFromRawData(instruction.Split()[0]), Offset = Int32.Parse(instruction.Split()[1]), TimesCalled = 0 }; _program.Instructions.Add(newInstruction); } }
public void Part2Test() { // Given var program = HandheldProgram.Parse(Input.Get(8)); for (var i = 0; i < program.Instructions.Count(); i++) { // When var modified = Day08.ModifyProgram(program, i); if (modified is null) { continue; } var computer = new HandheldComputer(modified); var accumulator = computer.Accumulator; var visited = new HashSet <int>(); while (!computer.IsHalted && !visited.Contains(computer.ProgramCounter)) { accumulator = computer.Accumulator; visited.Add(computer.ProgramCounter); computer.Step(); } // Then if (i == 7) { Assert.True(computer.IsHalted); Assert.Equal(8, accumulator); } else { Assert.False(computer.IsHalted); } } }