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

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

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

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

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

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

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

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

Код = "

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

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

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

|Иначе

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

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

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

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

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

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

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

|Иначе

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

|КонецЕсли;

|

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

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

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

|КонецЕсли;

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



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

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

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

Иначе

Р = "Код = """;

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

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

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

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

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

Р = Р + """""";

Иначе

Р = Р + Символ;

КонецЕсли;



КонецЦикла;

Р = Р + """;";

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

КонецЕсли;

КонецЦикла;

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

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

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

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

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

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

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

 

10 Comments

  1. Andle

    Не могу понять, это гениально или бесполезно?

    Reply
  2. Q-Q

    (1) kolubo, Это бесполезно, а вот программа печатающая код другой программы — это гениально. Подобные программы называются декомпиляторами.

    Reply
  3. fixin

    (1) это занимательно…

    Reply
  4. ildarovich

    Эта задача и решение здесь уже было Задача: Программа, выводящая на экран свой исходный код (куайн).

    В этом комментарии приведен вариант решения, с использованием 90 символов

    С=»С=»»;Л=Лев(С,3);П=Сред(С,3);Сообщить(Л+Л+П+П)»;Л=Лев(С,3);П=Сред(С,3);Сообщить(Л+Л+П+П)

    Длина Вашего решения в два раза больше.

    На хабре относительно недавно была статья об общем подходе к решению этой задачи (независимого от языка).

    Reply
  5. fixin

    (4) блин, не нашел ее поиском. 😉

    однако у меня можно и почитать, а не только качать.

    на усмотрение редакции… или пусть удаляют или пусть оставляют.

    таки решение все же другое.

    Reply
  6. catena

    Таки интересно 🙂

    Reply
  7. dumal

    Плюс однозначно. На заметку начинающим (и не очень) программистам

    Reply
  8. Andrey12Andrey

    Оно подходит всем конфигурациям 1С?

    Reply
  9. Andrey12Andrey

    Непонятно как ее можно применить? Как с ним пользоваться? Чем его открывать (конфигуратором или 1С)? Как с ним пользоваться?

    Reply
  10. fixin

    (8)(9) она для программистов, у них таких вопросов не возникает.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *