/* Для IE */ *html body { background: url('null.gif') no-repeat; background-attachment: fixed; } *html #branding_link { position: absolute; top: expression(document.getElementsByTagName( `body`)[0].scrollTop + "px"); }
|
Автор: Владимир Пинаев
Опубликовано в журнале "Компьютерра" №1 от 04 февраля 2003 года Мозги, давно отвыкшие от подобного напряжения, наконец вскипели и выдали что-то похожее на решение…
Вкратце напомним о новогодней конкурсной задаче («КТ» #471). Участники должны были написать интроспективную программу, то есть программу, печатающую свой собственный текст. Причем, чтобы не учитывать индивидуальные пристрастия читателей журнала, для ее решения был придуман специальный язык PIBAS, который включает в себя:
По правилам конкурса для каждой программы измерялась ее длина в символах. Чтобы победить, необходимо было представить самую короткую интроспективную программу. В общей сложности на конкурс поступила двести тридцать одна работа. Многие участники неоднократно улучшали свой результат, присылая все лучшее и лучшее решение. Разбор полетов начнем с написания простой интроспективной программы. Прежде всего определим структуру решения (рис. 1). Для удобства чтения здесь и далее будем выделять цветом строковые константы (без ограничивающих кавычек).
Рис.1 Структура решения Покажем, что в операторе вывода нетрудно напечатать все, что ему предшествует. Но при этом разрешим себе использовать кавычки только того вида, которые не совпадают с ограничивающими кавычками первого оператора присваивания (рис. 2).
Рис. 2. Оператор вывода. Итак, то, что предшествует оператору вывода, мы смогли напечатать. А как же напечатать сам оператор вывода? Но у нас еще есть резерв, а именно — мы пока не определили содержимое вспомогательной строки A. Так давайте добавим в оператор вывода печать строки A и поместим весь оператор вывода в эту строку (рис. 3).
Рис. 3. Простая Если, как полагается в языке PIBAS, выписать наше решение в одну строчку, мы получим интроспективную программу из 92 символов. Совсем неплохо для начала! С таким решением мы заняли бы на конкурсе 26-е место. Возникает вопрос, а зачем в язык PIBAS включена функция вырезания подстроки? Заметим, что в нашем решении в строке A присутствует несколько апострофов. Поэтому строку C можно исключить, а требуемый апостроф вырезать из строки A. Как и в первом решении, весь оператор вывода с небольшой приставкой включен в строку A (рис. 4).
Рис. 4. Интроспективная программа Длина этого решения составляет уже всего 73 символа, что соответствует девятому месту в итоговом протоколе конкурса. Стоит отметить программу из 68 символов (присланную несколькими участниками), в которой использовано всего два оператора (рис. 5).
Рис. 5. Интроспективная программа А победителем новогоднего конкурса заслуженно стал Иван Басов. Седьмого декабря он первым прислал решение из 65 (!) символов (рис. 6). Мы поздравляем Ивана с победой и надеемся, что потраченной время с лихвой окупится повышением производительности труда в новом году!
Рис. 6. Самая короткая В дальнейшем еще шесть участников — Артем Родичев, Михаил Климов, Ярослав Мирошниченко, Сергей Беляев, Павел Толпегин и А. Тремба — прислали аналогичные решения. Полные протоколы конкурса доступны на www. pic200x.chat.ru.
|
SSD-накопитель SanDisk Extreme от мирового лидера флеш-памяти. Надежность, скорость и высокая производительность вашего компьютера!
Аэроплан на солнечных батареях начал первый круглосуточный полёт
«Яндекс» вытесняет конкурентов с поискового рынка
Сети LTE в России могут быть запущены хоть сейчас
Мантии Земли и Луны, скорее всего, имеют одно строение
Влюблённость сродни наркотической зависимости
|
|||||||||||||||||||||