public void TestCalculateDiagnosticChecksum() { TuringState a = new TuringState(false, true, -1, 1, "B", "B"); TuringState b = new TuringState(true, true, 1, -1, "A", "A"); Dictionary <string, TuringState> states = new Dictionary <string, TuringState>(); states.Add("A", a); states.Add("B", b); var sut = new DayTwentyFive(); var result = sut.CalculateDiagnosticChecksum(states, 6, "A"); Assert.Equal(3, result); }
public int StateA() { int value = GetValue(Cursor); if (value == 0) { Tape[Cursor] = 1; Cursor++; State = TuringState.B; } else { Tape[Cursor] = 0; Cursor--; State = TuringState.B; } return(value); }
/// <summary> /// Инициализирует операцию указанными параметрами. /// </summary> /// <param name="id">Уникальный идентификатор операции машины Тьюринга.</param> /// <param name="args">Аргументы операции.</param> public TuringOperation(TuringOperationId id, TuringState args) : base((byte)id, new object[1]) { Args[0] = args as object; }
/// <summary> /// Проверяет состояния на корректность. Если состояния не прошли проверку, генерируется исключение. /// </summary> /// <param name="states">Список проверяемых состояний.</param> private void StatesOK(TuringState[] states) { if (states[0].Converts[0].Input.Length != _tapes.Count) throw new Exception("Описанные переходы для состояний должны соответствовать текущему количеству лент машины Тьюринга"); }