gifts2017

Программа, печатающая свой код

Опубликовал Осипов Сергей (fixin) в раздел Программирование - Практика программирования

Классическое упражнение по программированию. Проверьте свои силы.

Классическое упражнение по программированию.

Прежде чем смотреть решение, попробуйте написать сами, проверьте свой уровень.

Мне понадобилось 20 минут, чтобы набросать костяк и еще 10 минут, чтобы добиться точного соответствия.

Результат с исходным кодом сравнивал с помощью сравнения файлов. Тексты действительно идентичны.

Можно, конечно, попробовать вариант с оператором «Выполнить», но и так неплохо.

Суть решения понятна.

Код = "

|Для Инд = 1 По 2 Цикл

|Если Инд = 2 Тогда

|Сообщить(Код);

|Иначе

|Р = ""Код = """""";

|Для ИндС = 1 По СтрДлина(Код) Цикл

|Символ = Сред(Код, ИндС, 1);

|Если Символ = Символы.ПС Тогда

|Р = Р + Символы.ПС + ""|"";

|ИначеЕсли Символ = """""""" Тогда

|Р = Р + """""""""""";

|Иначе

|Р = Р + Символ;

|КонецЕсли;

|

|КонецЦикла;

|Р = Р + """""";"";

|Сообщить(Р);

|КонецЕсли;

|КонецЦикла;";

 

Для Инд = 1 По 2 Цикл

Если Инд = 2 Тогда

Сообщить(Код);

Иначе

Р = "Код = """;

Для ИндС = 1 По СтрДлина(Код) Цикл

Символ = Сред(Код, ИндС, 1);

Если Символ = Символы.ПС Тогда

Р = Р + Символы.ПС + "|";

ИначеЕсли Символ = """" Тогда

Р = Р + """""";

Иначе

Р = Р + Символ;

КонецЕсли;

 

КонецЦикла;

Р = Р + """;";

Сообщить(Р);

КонецЕсли;

КонецЦикла;

Идея написать такую программу возникла у меня, когда я прочитал про сборник программ "Hello World" на разных языках программирования, в том числе и на 1с.

А вы за сколько написали такую программу?

Может есть варианты покороче (кроме Выполнить - неспортивно), хотя для коллекции можете написать и с Выполнить - включу в статью.

По здравому размышлению я подумал, что первый цикл в моем коде лишний. А второй цикл можно заменить на функцию "СтрЗаменить".

Путем оптимизации у меня получилась вот такая программка в две строчки:

Код = "Сообщить(""Код = """""" + СтрЗаменить(Код, """""""", """""""""""") + """""";""); Сообщить(Код);";

Сообщить("Код = """ + СтрЗаменить(Код, """", """""") + """;"); Сообщить(Код);

 

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

Наименование Файл Версия Размер
down.zip 13
.zip 1,46Kb
09.02.12
13
.zip 1,46Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. kolubo (Andle) 09.02.12 15:57
Не могу понять, это гениально или бесполезно?
2. Александр Нужный (Q-Q) 09.02.12 16:08
(1) kolubo, Это бесполезно, а вот программа печатающая код другой программы - это гениально. Подобные программы называются декомпиляторами.
3. Осипов Сергей (fixin) 09.02.12 16:13
4. Сергей (ildarovich) 09.02.12 17:11
Эта задача и решение здесь уже было Задача: Программа, выводящая на экран свой исходный код (куайн).
В этом комментарии приведен вариант решения, с использованием 90 символов
С="С="";Л=Лев(С,3);П=Сред(С,3);Сообщить(Л+Л+П+П)";Л=Лев(С,3);П=Сред(С,3);Сообщить(Л+Л+П+П)

Длина Вашего решения в два раза больше.
На хабре относительно недавно была статья об общем подходе к решению этой задачи (независимого от языка).
5. Осипов Сергей (fixin) 09.02.12 17:48
(4) блин, не нашел ее поиском. ;-)
однако у меня можно и почитать, а не только качать.
на усмотрение редакции... или пусть удаляют или пусть оставляют.
таки решение все же другое.
6. Екатерина Соколова (catena) 16.02.12 07:10
7. Dima Dima (dumal) 17.02.12 00:23
Плюс однозначно. На заметку начинающим (и не очень) программистам
8. Андрей Андреев (Andrey12Andrey) 21.02.12 16:45
Оно подходит всем конфигурациям 1С?
9. Андрей Андреев (Andrey12Andrey) 21.02.12 17:22
Непонятно как ее можно применить? Как с ним пользоваться? Чем его открывать (конфигуратором или 1С)? Как с ним пользоваться?
10. Осипов Сергей (fixin) 21.02.12 17:41
(8)(9) она для программистов, у них таких вопросов не возникает.