Идет бета-тестирование портала. Об ошибках пишите нам или на форуме.

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

-2

Занимательное программирование

15.11.2008

Описание

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

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

Код = "
|Для Инд = 1 По 2 Цикл
|	Если Инд = 2 Тогда
|		Сообщить(Код);
|	Иначе
|		Р = ""Код = """""";
|		Для ИндС = 1 По СтрДлина(Код) Цикл
|			Символ = Сред(Код, ИндС, 1);
|			Если Символ = Символы.ПС Тогда
|				Р = Р + Символы.ПС + ""|"";
|			ИначеЕсли Символ = """""""" Тогда
|				Р = Р + """""""""""";
|			Иначе
|				Р = Р + Символ;
|			КонецЕсли;
|			 
|		КонецЦикла;
|		Р = Р + """""";"";
|		Сообщить(Р);
|	КонецЕсли;
|КонецЦикла;";

Для Инд = 1 По 2 Цикл
	Если Инд = 2 Тогда
		Сообщить(Код);
	Иначе
		Р = "Код = """;
		Для ИндС = 1 По СтрДлина(Код) Цикл
			Символ = Сред(Код, ИндС, 1);
			Если Символ = Символы.ПС Тогда
				Р = Р + Символы.ПС + "|";
			ИначеЕсли Символ = """" Тогда
				Р = Р + """""";
			Иначе
				Р = Р + Символ;
			КонецЕсли;
			 
		КонецЦикла;
		Р = Р + """;";
		Сообщить(Р);
	КонецЕсли;
КонецЦикла;


Идея написать такую программу возникла у меня, когда я прочитал про сборник программ "Hello World" на разных языках программирования, в том числе и на 1с.
А вы за сколько написали такую программу?
Может есть варианты покороче (кроме Выполнить - неспортивно), хотя для коллекции можете написать и с Выполнить - включу в статью.
По здравому размышлению я подумал, что первый цикл в моем коде лишний. А второй цикл можно заменить на функцию "СтрЗаменить".
Путем оптимизации у меня получилась вот такая программка в две строчки:
Код = "Сообщить(""Код = """""" + СтрЗаменить(Код, """""""", """""""""""") + """""";""); Сообщить(Код);";
Сообщить("Код = """ + СтрЗаменить(Код, """", """""") + """;"); Сообщить(Код);

Оценка сообщества

Плюсы (+5):

, , , ,

Минусы (– 7):

, , , , , ,


Добавить плюс Добавить минус

Комментарии (39)

Страницы: 12Вперед

1.
+ -
17.11.2008 16:11:47

код="Сообщить(Символ(1082)+Символ(1086)+Символ(1076)+Символ(61)+Символ(34)+код+Символ(34)+Символ(59)+код);";Сообщить(Символ(1082)+Символ(1086)+Символ(1076)+Символ(61)+Символ(34)+код+Символ(34)+Символ(59)+код);

2.
+ -
17.11.2008 16:11:45

не. мона проще. переменную одним символом.
к="Сообщить(Символ(1082)+Символ(61)+Символ(34)+к+Символ(34)+Символ(59)+к);";Сообщить(Символ(1082)+Символ(61)+Символ(34)+к+Символ(34)+Символ(59)+к);

3.
+ -
17.11.2008 16:11:24

(2) круть. ;-)

4.
+ -
19.11.2008 15:11:15

НЕ ПОНЯТНО ЗАЧЕМ ЭТО НУЖНО :(

5.
+ -
19.11.2008 15:11:08

(4) А зачем нужна программа "Hello world"?
данная программа - классическое упражнение по програмированию.
Применений два:
1. Тренировка мозгов.
2. Тест при приеме на работу.

6.
+ -
19.11.2008 15:11:09

(5) Тест говоришь? А може человека лучше спросить как источники данных бюджетирования настроить? Или что такое "suspect"?
Просто с трудом представляю себе работу где реально нужен человек умеющий писать такие программы...

7.
+ -
19.11.2008 15:11:26

(6) эта задача - "классика" programming-art
Другое дело, что 1снег - не совсем "программист"

8.
+ -
19.11.2008 15:11:44

(7) Так и я о том же... ;-)

9.
+ -
19.11.2008 15:11:20

(8) :)
трудно быть программистом в среде, которая выдает такие шедевры:
[code]Найти("PowerBoy","") = Найти("PowerBoy","P") = истина[code]

10.
+ -
19.11.2008 15:11:46

Не знаю, мне на тестировании иногда задавали как раз классические задачи (сортировки, перестановки) и т.п. проверяют интелект.

11.
+ -
19.11.2008 15:11:54

(10) имхо. это не нужно. для проверки интелекта достаточно спросить за что старушку процентщицу зарубили... ;-)
А вообще 1с-нег действительно не столько программист, сколько "конструктор бизнес-процессов"..

12.
+ -
19.11.2008 16:11:14

это вы в кофигураторе которые имеете в виду?
по жизни 1снеги могут только один бизнес-процесс - 1с:франчайзи.
но и 1снегом для 1с:франчайзи быть не обязательно

13.
+ -
19.11.2008 16:11:56

(12) Нет... не те которые в конфигураторе )))
Имею ввиду, что для программиста 1С знание прикладных решений и методов типовых реализаций прикладных задач, важнее чем знание методов пузырьковой сортировки или умения писать самопечатающиеся программы...

14.
+ -
19.11.2008 16:11:34

(13) это если повезло по жизни, работодатель попался толковый
чаще хочут держать за эникея, вот тут и вспоминаются "классические", как луч света в... ну, там где :)

15.
+ -
19.11.2008 16:11:48

(13) ну да, а потом и получаются дикие типовые конфигурации - потому что их програмистам в институке Кнута и Кернигана с Ритчи не показывали!

16.
+ -
19.11.2008 16:11:09

Я просто видел на одном сайте Хелло ворлд для разных языков программироавния, не нашел где сборник самопечатающихся программ для разных ЯП.

17.
+ -
19.11.2008 16:11:58

(16) Молчал бы уж про Кнута ;-) видел я твои обход метаданных: "девелопминг методом копипастенга"

18.
+ -
19.11.2008 16:11:30

(17) Не вопрос, напиши свой.

19.
+ -
19.11.2008 16:11:48

(17) Я не хотел дробить на функии - мотивация понятна?

20.
+ -
21.11.2008 17:11:47

ИМХО А зря вот так по автору прошлись: задачку-то все решить смогли? А на скольки языках? А сколько вариантов решения предложено?
Вот в посте вижу 2 варианта, причем до второго (действительно изящного) мне лень не позволила добраться... ;)
Автору плюс, что не дает засыпать мозгу
2 Luns (6): А зачем и кому нужен программист/постановщик задач, который НЕ умеет решать такие задачки (а ведь их много)?

Страницы: 12Вперед

Для добавления комментария необходимо зарегистрироваться.
Есть вопросы?
тел. (812) 309-06-46
support@infostart.ru
Обратная связь
Логин :
Пароль :
Забыли пароль?

Статистика

Пользователей: 43876

См. также