private string PartA(IEnumerable <string> data) { var gameKid = new GameKid(); var cart = GameKidCart.Parse(data); gameKid.RunCart(cart); return("Accumulator = " + gameKid.Accumulator); }
private string PartB(IEnumerable <string> data) { var gameKid = new GameKid(); var cart = GameKidCart.Parse(data); gameKid.RunCart(cart); var usedInstructions = gameKid.UsedInstructions.ToArray(); // narrow our search by only modifying instructions we actually use foreach (var i in usedInstructions) { var instruction = cart.Instructions[i]; var prevOp = instruction.Operation; if (prevOp == "jmp") { instruction.Operation = "nop"; } else if (prevOp == "nop") { instruction.Operation = "jmp"; } else { continue; } if (gameKid.RunCart(cart)) { return("Fixed Accumulator = " + gameKid.Accumulator); } // undo instruction.Operation = prevOp; } return("Failed"); }