Квайн на 1С

Опубликовал Сергей Ковальский (testik_vzv) в раздел Обработки - Универсальные обработки

Разминка для мозга и интересное времяпрепровождение. Находить и обдумывать решение задачи можно, практически не используя компьютер.

Как-то раз сидел за решением какой-то сложной проблемы, которую даже воспроизвести у себя не удавалось. Тут в голову приходит мысль "а не попробовать ли написать квайн на 1С?". Решение этой задачи помогло отвлечься и привести мысли в порядок, после чего с проблемой удалось разобраться. Рекомендую :)

Используется две переменные: одна - это собственно код программы, вторая используется для его построчного вывода, в конце применяется метод "Выполнить".

При этом первую переменную можно сколь угодно дополнять своим кодом, исключая объявление переменных, процедур и функций. В данном случае квайн дополнен кодом, выводящим дурацкий стишок в виде предупреждения.

А="
|Для Сч=1 По СтрЧислоСтрок(А) Цикл
|   ТекСтрока=СтрПолучитьСтроку(А,Сч);
|   ТекСтрока=СтрЗаменить(ТекСтрока,"""""""","""""""""""");
|   Если Сч=1 Тогда
|       ТекСтрока=""А=""""""+ТекСтрока;
|   ИначеЕсли Сч=СтрЧислоСтрок(А) Тогда
|       ТекСтрока=ТекСтрока+"""""";Выполнить(А);"";
|   КонецЕсли;
|   ТекСтрока=?(Сч=1,Лев(А,0),""|"")+ТекСтрока;
|   Сообщить(ТекСтрока);
|КонецЦикла;
|//Сюда вставляем произвольный код, заменив, разумеется, одинарные кавычки на двойные
|   Жгем=Новый Структура(""Раз,Два,Три"");
|   ТСбщ="""";
|   Для каждого Эл Из Жгем Цикл
|       ТСбщ=ТСбщ+Эл.Ключ+"" помидор,""+Символы.ПС;
|   КонецЦикла;
|   ТСбщ=ТСбщ+""Гори, помидор!"";
|   Предупреждение(ТСбщ);
|//Конец вставки произвольного кода"
;Выполнить(А);

PS

Любителям покритиковать решение. Конечно, я уже посмотрел "каноничный" способ написания квайна на 1С. Но после этого моя реализация квайна не стала нравиться мне меньше. Не обязательно лучший код - это самый краткий. Да и смысл решения от краткости не меняется. 

Скачать файлы

Наименование Файл Версия Размер
Квайн.epf
.epf 4,36Kb
23.12.16
2
.epf 4,36Kb 2 Скачать

См. также

Комментарии
1. Иван Устьянцев (nSpirit2) 05.08.15 17:49 Сейчас в теме
|   Жгем=Новый Структура(""Раз,Два,Три"");
|   ТСбщ="""";
|   Для каждого Эл Из Жгем Цикл
...Показать Скрыть


Вот это доставило а так прикольно кончено :)
2. Булат Шаймарданов (mrbus) 31.10.16 22:07 Сейчас в теме
Код, содержащий "Выполнить", квайном не считается, а вот настоящий квайн http://govnokod.ru/21614
3. Сергей Ковальский (testik_vzv) 11 21.12.16 12:49 Сейчас в теме
(2)
Код, содержащий "Выполнить", квайном не считается

Это откуда взялось такое правило?
Каждая реализация имеет право на жизнь. Моя прикольна тем, что ее можно разбавить своим говнокодом (я заценил сайт по ссылочке :) ), который и выполнится, и выведется в тексте программы.
Оставьте свое сообщение