На высоком уровне решение, о котором я думаю, обрабатывает слово в порядке слева направо.Всегда существует префикс слова, которое было обработано, и суффикс слова, которое не было обработано.Если delta
будет числом a
с в префиксе минус число b
с, лента будет выглядеть так в начале каждой итерации:
<big-endian abs(delta)><sign(delta)><suffix>
^
tape head
Чтобы обработать следующую букву(то есть первая буква в суффиксе), добавьте / вычтите одну из delta
в зависимости от того, является ли буква a
или b
и является ли знак +
или -
, перемещая представлениеdelta
один пробел направо в процессе.В конце проверьте, равен ли delta
нулю.
Возможно, было бы проще использовать представление дополнения до двух, где предполагается, что крайняя левая цифра повторяется бесконечно, но я не уверен, есть ли какие-либо скрытые препятствия.