Другие языки программирования и технологии

Машина Тьюринга. помогите с задачей

https://alistat.eu/online/turingmachinesimulator или https://morphett.info/turing/turing.html

Реализуйте в эмуляторе программу, принимающую на вход унарную запись числа (на ленте записано столько единиц, чему равно это число) и возвращающую унарную запись этого числа, к которому прибавили число 2.

Затем реализуйте в эмуляторе программу, вычисляющую целую часть от деления этого числа на 2. Например, если на ленте записано 11111, то должно остаться 11. А если записано 11, то останется 1.
В общем очень интересная задачка вот деление на 2

 initial qs, 
accept finish,

qs _ finish _ r, // нет данных 0/2 = 0
qs 1 q1 i r, // отмечаем начало диапазона данных буквой i
q0 1 q1 1 r, //на четных позициях оставляем 1
q1 1 q0 _ r, //на нечетных позициях ставим пробел

//четный случай
q0 _ ql _ l, // дошли до конца ввода вовращаемся к i
//нечетный случай
q1 _ qd _ l, // дошли до конца ввода удаляем последнюю 1
qd 1 ql _ l,
qd i finish _ l, // случай 1/2 = 0 по условию деление целочисленое

//двигаемеся влево пока не найдем i
ql _ ql _ l,
ql 1 ql 1 l,
ql i qf 1 l,
qf _ s0 _ r, // переходим к алгоритму уплотнения

// алгоритм уплотнения пробелов
s0 1 s0 1 r,
s0 _ s1 1 r, //если нашли пробел меняем его на 1
// Два подряд пробела это конец строки
s1 _ dt _ l, //проверяем если нашли второй пробел подряд и поворачиваем обратно
s1 1 s0 _ r, //мы сместили эту 1 ку левее, удаляем ее из этой позиции

dt 1 sf _ l, // так как нашли окончание ввода значит предыдущая поставленная 1 ка лишняя

sf 1 finish 1 l, // если две подряд 1 встретились сразу после разворота заканчиваем уплотнение
sf _ s3 _ l, если найден пробел просто движемся до двух подряд единиц

s3 _ s4 _ l, // невозможный случай можно удалить.
s3 1 s4 1 l, // за пробелом следует 1

s4 1 s0 1 r, // если две 1 1 подряд мы дошли до начала уполтнения и разворачиваемся вперед
s4 _ s3 _ l, // за 1 следует _
Чтобы машина скушала алгоритм выше коментарии должны быть на отдельной строке и последний коммент нужно удалить.
Что касаемо алгоритма + 2

 initial q1, 
accept q0,

q1 1 q1 1 r,
q1 _ q2 1 r,
q2 _ q0 1 r,
Александр Козко
Александр Козко
1 434
Лучший ответ