Принцип работы машины
Машина принимает на вход кортеж символов, которые находятся под каретками. Кортеж формируется следующим образом: (символ с первой ленты, символ со второй ленты, ..., символ с последней ленты).
После чего берется состояние, в котором находится машина, и выбирается подходящая команда.
Если команда не была найдена, машина завершит свою работу.
Если команда была найдена, на каждой ленте каретка выполнит указанные действия: записать указанный символ и сдвинуться в указанную сторону (или остаться на месте).
Работа с таблицей ввода программы
Левая колонка таблицы содержит состояния машины. Последующие колонки описывают команды для каждого состояния.
Кнопка "+" в первой колонке добавляет новое состояние, а в других колоннах - новую команду (по умолчанию команда считывает пустой символ, записывает его и не перемещает каретки).
Для перехода в режим удаления нужно нажать на заголовок таблицы.
Настройки эмулятора
Кнопка "add tape" добавляет новую ленту, а "remove tape" - удаляет последнюю.
Уменьшение значения "Steps interval" ускоряет анимацию.
Поле "Maximum number of steps" меняет максимальное количество шагов, которое произведет эмулятор выполняя программу.
Для размещения символов на лентах нужно нажать на свободную ячейку и ввести строку, а для очистки ленты установить пустую строку.
Сохранение программ в файл
Кнопка "Add programm" добавит текущую программу в память. После данного действия она будет доступна для загрузки из секции "Programm list".
Для загрузки программы из секции "Programm list" используйте кнопку "Load"
Для удаления программы из секции "Programm list" используйте кнопку "Remove"
Для сохранения программ из секции "Programm list" в файл используйте кнопку "Save file"
Для загрузки программ в секции "Programm list" из файл используйте кнопку "Upload file"
Спецсимвол "."
В случае указания символа точки в качестве считываемого символа указывает машине, что на этом месте может быть любой символ. Т.е. если имеется кортеж (.11), а кортеж считанных символов равен (111) или (011) машина выполнит команду.
В случае указания символа точки в качестве символа для записи на ленту, машина запишет на ленту символ который считала с этой позиции. Т.е символ не будет изменен.
Приоритет кортежей
Наивысший приоритет установлен для кортежа не содержащего спецсимволов "."
Менее высокий приоритет установлен для кортежа содержащего один спецсимвол "."
Менее высокий приоритет, нежеди чем для кортежа содержащего один спецсимвол, установлен для кортежа содержащего два спецсимвола "."
И т.д.
Иными словами машина выбирает из всего набора указанных кортежей, тот, в котором содержится наименьшее количество спецсимволов.
Замечание
Не используйте символ пробела " " и нижнего подчеркивания "_" в своих программах
Важно, чтобы кортежи считываемых символов не содержали дубликатов.
Также не допустимо использование кортежей считываемых символов с одинаковым количеством спецсимвола ".", это обусловленно тем что невозможно разрешить какой из кортежей выбрать для выполнения команды. В случае наличия нескольких кортежей с одинаковым количеством спецсимволов ".", которые могут соответствовать текущей ленте, результат работы будет непредсказуем, и соответственно машина остановится.
Также стоит учитывать, что при добавлении программы в список программ в качестве лент будет записано текущее состояние лент, т.е. если сохранение происходило после работы программы, то будет сохранен результат работы программы, а не начальная лента.
Обратная связь
Интерфейс написан весьма криво, поэтому могут быть баги которые от меня ускользунили.
17.02.2026 последний раз проверялась работоспособность эмулятора и правильных сценраиев работы интерфейса. Кроме того был обнаружен и исправлен баг с некорректной загрузкой лент из файла.
Если вы столкнулись с какой-то ошибкой - создайте issue в репозитории эмулятора