От вас узнал, что девушка, посмотрел и правда.
На самом деле все от зависти, у мне не удается выкраить столько времени, что бы сделать что то подобное.
Ну, на самом деле языки типа Transact-SQL и PL/SQL являются вполне себе полными по Тьюрингу, так что ничего удивительного. Хотя так или иначе, очень занятно. Спасибо за статью.
Я ждала этого вопроса :) Просто тут переменных многовато, и блок объявлений локальных переменных занял бы много места. Фактически это целый блок кода, который ничего не делает.
Я решила сосредоточиться на алгоритме, поэтому использовала глобальные переменные.
1. Двигаться по ленте влево и вправо
2. Читать с ленты символ
3. Писать на ленту символ
4. Переходить в различные состояния 5. Можно грабить корованы (trollface картинка)
Думаю, будет лучше, если Вы заключите код в тег <source lang="mysql"></source>
Мне немного не понравилось то, что Вы модифицируете входную строку, добивая ее нулями. Возможно, было бы лучше проверять, не вышли ли мы за границы входной строки, и, если да, то в качестве текущего символа рассматривать какой-нибудь \0 (При этом не изменяя входных данных).
То есть что-то вроде такого
IF @p < LENGTH(sinput) THEN
SELECT @inread:=SUBSTRING(sinput, @p, 1) FROM ribbon;
ELSE
@inread := 0;
END IF;
Фактически это не модификация входной строки, а костыль для имитации МТ. Это здесь входная строка изначально состоит только из входной строки, а в МТ за ней следует бесконечное количество пробелов.
Если входные данные закончились, и за ними больше ничего нет, то МТ считывает пробел.
написать brainfuck на SQL — задача интересная. наоборот, однако, любопытнее.
вы бы реализовали циклы с инкриментами и декрементами и таймстамп комманду придумали — можно было бы сервера бенчмаркать тяжелыми брейнфак аппликушками.
Эмулятор машины Тьюринга на MySQL