public static BootCodeInstruction ParseBootCodeInstruction(string instructionLine) { var match = Regex.Match(instructionLine, @"^(\w+) ((\+|-)\d+)$"); if (!match.Success) { throw new Exception($"Unrecognized instruction line: {instructionLine}"); } var instruction = match.Groups[1].Value.Trim(); var value = int.Parse(match.Groups[2].Value.Trim()); var result = new BootCodeInstruction(instruction, value); return(result); }
public static IList <BootCode> GetPossiblyFixedBootCodes(BootCode bootCode) { var result = new List <BootCode>(); for (int i = 0; i < bootCode.Instructions.Count; i++) { var currentInstruction = bootCode.Instructions[i]; if ("jmp".Equals(currentInstruction.Instruction) || "nop".Equals(currentInstruction.Instruction)) { var instructionsCopy = bootCode.Instructions.ToList(); var newInstruction = "jmp".Equals(currentInstruction.Instruction) ? "nop" : "jmp"; instructionsCopy[i] = new BootCodeInstruction(newInstruction, currentInstruction.Value); var newBootCode = new BootCode(instructionsCopy); result.Add(newBootCode); } } return(result); }