32 lines
1.1 KiB
C#
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();
|
|
}
|
|
}
|