public State(char value, TuringMachineAction action0, TuringMachineAction action1) { Value = value; _actions = new Dictionary <byte, TuringMachineAction> { { action0.Value, action0 }, { action1.Value, action1 } }; }
public PuzzleSolver(string input) { _statesDictionary = new Dictionary <char, State>(); foreach (var match in Regex.Matches(input, "In state (?<state>\\w)[\\S\\s]*?" + "If the current value is (?<value0>\\d)[\\S\\s]*?" + "Write.*?(?<conditionValue01>\\d)[\\S\\s]*?" + "Move.*?(?<conditionValue02>((left)|(right)))[\\S\\s]*?" + "Continue.*?(?<conditionValue03>[A-Z])[\\S\\s]*?" + "If the current value is (?<value1>\\d)[\\S\\s]*?" + "Write.*?(?<conditionValue11>\\d)[\\S\\s]*?" + "Move.*?(?<conditionValue12>((left)|(right)))[\\S\\s]*?" + "Continue.*?(?<conditionValue13>[A-Z])[\\S\\s]*?") .OfType <Match>()) { var action0 = new TuringMachineAction(Convert.ToByte(match.Groups["value0"].Value), match.Groups["conditionValue03"].Value[0], match.Groups["conditionValue02"].Value.GetMoveDirection(), Convert.ToByte(match.Groups["conditionValue01"].Value)); var action1 = new TuringMachineAction(Convert.ToByte(match.Groups["value1"].Value), match.Groups["conditionValue13"].Value[0], match.Groups["conditionValue12"].Value.GetMoveDirection(), Convert.ToByte(match.Groups["conditionValue11"].Value)); var state = new State(match.Groups["state"].Value[0], action0, action1); _statesDictionary.Add(state.Value, state); } _initalState = Regex.Match(input, "(?<=Begin in state )[A-Z]").Value[0]; _diagnosticChecksumSteps = Convert.ToInt32(Regex.Match(input, "(?<=Perform a diagnostic checksum after )\\d+").Value); }