gifts2017

Квайн на 1С

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

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

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

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

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

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

PS

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

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

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

См. также

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


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