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);
        }
Exemple #2
0
        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);
        }