У меня есть задача создать перечислитель (машина Тьюринга, который также печатает на ленту вывода и выводит его, перейдя в состояние print
) для языка {0 ^ (3 ^ n) | n >= 0}
, где:
1) Количество состояний должно быть не более 10 (, включая print
и halt
состояний, они входят в 10 состояний)
2) Gamma
, алфавит принтера - {0, x, space}
и , ничего больше .
3) Выходной алфавит ленты {0}
.
Я много раз пытался построить его не более чем с 10 состояниями, но мне удалось использовать 11, а не 10. Моя идея состояла в том, чтобы стереть каждое 0
с пробелом, а затем выполнить итерацию после определенного разделителя, скажем X
, и напишите 3 0s
для каждого удаленного 0
перед разделителем. Например space|x|space,space,space|x|000000000|x|
. "|"
только для того, чтобы подчеркнуть разделитель для этого вопроса, пробелы являются предыдущими 0's
перезаписанными - после перезаписи каждого 0
с space
я итерирую за X
и добавляю 3 0s
в конце.
Каждый раз, когда я терпел неудачу, мне не хватало еще одного состояния. У меня закончились идеи ... помогите?
Спасибо