public void Execute(AllRegisters registers) { if (Condition.IsSatisfiedBy(registers)) { Instruction.Execute(registers); } }
public bool IsSatisfiedBy(AllRegisters registers) { var value = registers.GetRegister(Register); var result = false; switch (Comparison) { case Comparison.Equal: result = value == Amount; break; case Comparison.NotEqual: result = value != Amount; break; case Comparison.GreaterThan: result = value > Amount; break; case Comparison.GreaterThanOrEqual: result = value >= Amount; break; case Comparison.LessThan: result = value < Amount; break; case Comparison.LessThanOrEqual: result = value <= Amount; break; } return(result); }
public void Execute(AllRegisters registers) { var value = registers.GetRegister(Register); switch (Operation) { case Operation.Increment: registers.SetRegister(Register, value + Amount); break; case Operation.Decrement: registers.SetRegister(Register, value - Amount); break; } }
static void Main(string[] args) { var parser = RegisterInstructionParser.Instance; var input = File.ReadAllLines("input.txt"); var instructions = Array.ConvertAll( input, line => { Console.WriteLine(line); return(parser.Parse(line)); } ); var registers = new AllRegisters(); foreach (var instruction in instructions) { instruction.Execute(registers); } Console.WriteLine(registers.MaximumValue); }