turing-machine/Implementation/Core/Transition.cs

32 lines
1.1 KiB
C#

namespace TuringMachine.Core
{
public enum MoveDirection
{
Left,
Right,
Stay
}
public record TransitionKey(string State, char ReadSymbol);
public record TransitionResult(string NewState, char WriteSymbol, MoveDirection MoveDirection, string Comment = "");
public class TransitionTable
{
private readonly Dictionary<TransitionKey, TransitionResult> _transitions = new();
public void Add(string state, char readSymbol, string newState, char writeSymbol, MoveDirection moveDirection, string comment = "")
{
_transitions[new TransitionKey(state, readSymbol)] = new TransitionResult(newState, writeSymbol, moveDirection, comment);
}
public bool TryGetTransition(string state, char readSymbol, out TransitionResult? result)
{
return _transitions.TryGetValue(new TransitionKey(state, readSymbol), out result);
}
public IEnumerable<KeyValuePair<TransitionKey, TransitionResult>> Items => _transitions;
public void Clear() => _transitions.Clear();
}
}