public int FindLargestRegisterValue(string filePath) { List <Register> registers = new List <Register>(); string line; StreamReader file = new StreamReader(filePath); // Iterate over each line in the input while ((line = file.ReadLine()) != null) { RegisterCommandAttributes attribs = new RegisterCommandAttributes(line); // if register does not exist, add it first if (!registers.Any(r => r.Name == attribs.RegisterName)) { registers.Add(new Register(attribs.RegisterName)); } if (!registers.Any(r => r.Name == attribs.ConditionName)) { registers.Add(new Register(attribs.ConditionName)); } IRegisterCommand command = new RegisterCommandBuilder().Build(attribs); if (command.IsApplicable(registers)) { Register appliesTo = command.AppliesToRegister(registers); command.Execute(appliesTo); } } file.Close(); int largestValue = registers.OrderByDescending(r => r.Value).First().Value; return(largestValue); }
public IRegisterCommand Build(RegisterCommandAttributes attribs) { IRegisterCommand createdCommand; switch (attribs.CommandName) { case "inc": createdCommand = new IncreaseRegisterCommand(attribs); break; case "dec": createdCommand = new DecreaseRegisterCommand(attribs); break; default: throw new ArgumentException("Command requested not defined"); } return(createdCommand); }