using System.Collections.Generic; namespace TuringMachine.Core { public class Tape { private readonly Dictionary _data = new(); private readonly char _blankSymbol; public int MinIndex { get; private set; } = 0; public int MaxIndex { get; private set; } = 0; public Tape(char blankSymbol = '_') { _blankSymbol = blankSymbol; } public char this[int index] { get => _data.TryGetValue(index, out char value) ? value : _blankSymbol; set { if (value == _blankSymbol) { _data.Remove(index); } else { _data[index] = value; // Track min/max indices if (_data.Count == 1) { MinIndex = index; MaxIndex = index; } else { if (index < MinIndex) MinIndex = index; if (index > MaxIndex) MaxIndex = index; } } } } public void Clear() { _data.Clear(); MinIndex = 0; MaxIndex = 0; } public IEnumerable DefinedIndices => _data.Keys; } }