wizzard: (Default)
wizzard ([personal profile] wizzard) wrote2009-02-08 07:10 am

программы, которые пишут другие программы

родилась тут у меня мысль, что есть задачи с более-менее определенным ТЗ,
с которыми можно как-то так извернуться….
в общем, объявляется конкурс по написанию программ,
которые пишут другие программы.




Задание 0:

программа, которая ничего не принимает на вход,
и выводит “Hello, World”.

Задание 1:

программа, которая принимает на вход строку и выводит ее.
если введенная строка пуста – выводит “Hello, World”.

Задание 2:

программа, которая принимает на вход строку – имя математической операции,
а также 1 или 2 числа, в зависимости от того, сколько аргументов у операции.
Выводит результат операции.
Пример:

natural logarithm
5
1,6094379
addition
5
6
11
factorial
4
24
negate
6
-6

Можно, но не обязательно, сделать в генераторе выбор
набора поддерживаемых операций.

Задание 3:

программа, которая принимает на вход имя файла и имя хэш-алгоритма,
открывает файл (для простоты предположим, что он находится в текущей директории),
считывает его, считает хэш содержимого файла
и выводит его в шестнадцатеричном виде на экран.
Если хэш не поддерживается, выводит “Unknown hash algorithm”
Нужно реализовать хотя бы один из: CRC32, MD5, SHA1, SHA256
В идеале, генератор должен принимать на вход указание, считалку каких
именно хэш-алгоритмов реализовывать.

Условия:
  1. Программа-генератор и программа-результат могут использовать Google, Wikipedia,
    Koders.com и прочие онлайн-сервисы
  2. Задание программе-генератору подается в текстовом виде, так, как оно приведено
    выше. Программа-генератор может реализовывать одно или сразу несколько заданий.
    Если в задании есть несколько вариантов (например, задание 2 и 3), то можно генерировать
    ”какой получится” или дописывать в понятном человеку варианте, какой именно вариант.
  3. Программа не должна ни в каком виде включать в себя код специфических частей программ,
    которые создаются с ее помощью, но может включать в себя библиотеку подпрограмм
    общего назначения
  4. Программа может использовать базы данных любого вида и библиотеки исходного кода,
    созданные автором программы, при соблюдении 2 условий:
    • Эти файлы можно найти с использованием поисковых систем, или скачать со страниц,
      которые можно найти с использованием поисковых систем.
      Быстро индексируются Google Base, Google Pages, Blogger, ЖЖ и еще ряд сервисов,
      эти – первые, которые вспомнил.
    • Данные хранятся в открытом, незашифрованном виде, понятном не только автору,
      но и человеку
  5. Программа должна генерировать исходный код и бинарный файл (в случае, если
    код генерируется на компилируемом языке). Если требуется специфический компилятор,
    нужно укомплектовать программу инструкциями по скачиванию и установке.
  6. Для первой версии конкурса программа-результат должна работать из командной строки,
    работать с stdin/stdout и файлами.
  7. Программа-генератор может работать как из командной строки, так и иметь GUI.
    Построение веб-сервисов не рекомендуется из соображений сложностей копирования,
    развертывания, установки и изучения таких вещей
  8. Цель конкурса – создать мега-генератор ;)
    Поэтому программы на конкурс выдвигаются с исходным кодом. Можно объединяться,
    можно создавать работы на основе работ других участников.
    Это условие необязательное. Если хочется сохранить ноу-хау, то можно не публиковать
    исходный код (но предоставлять его нужно, иначе будет невозможно проверить,
    удовлетворяет ли программа пункту 2)
  9. Генераторы можно постить в комментах или присылать на e-mail wizzard0@gmail.com
    с пометкой в теме письма “Конкурс генераторов”
  10. Язык программирования – произвольный. Рекомендуется прикладывать также инструкции
    по тестированию и компиляции для других участников.

Если вам понравился конкурс – напишите о нём в своем журнале и поделитесь с друзьями :)
Принимаются поправки к условиям, ну и другие задания, естественно :)


[identity profile] supermega.livejournal.com 2009-02-08 07:29 am (UTC)(link)
))))))

[identity profile] darth-caedius.livejournal.com 2009-02-08 09:27 am (UTC)(link)
по нулевому: то есть код, который я напишу предположим на с++ создает pas файл, в котором содержится строка writeln('hello, world')?

[identity profile] migmit.vox.com (from livejournal.com) 2009-02-08 10:05 am (UTC)(link)
Думаю, стоит подключить libastral.so

[identity profile] dmitry-vk.livejournal.com 2009-02-09 09:31 am (UTC)(link)
Красивое решение — семантический анализ текста задания (по идее, это уже реализовано, только качество работы не всегда адекватное на свободных текстах) (только тут нужен довольно качественный анализатор, а это редкая штука) + онтология в области программирования + агент, который это все совмещает. Может быть, попробую.

(3) -- глупость

[identity profile] d0tcom.livejournal.com 2009-02-11 09:22 am (UTC)(link)
В том, что Вы запрещаете, весь смысл программы, "которая пишет сама себя".
Сама же идея такой программы стара, как мир. Те, кто начинают заниматься подобной задачей, довольно быстро понимают, что писать такую программу для машин глупо, если сам не можешь писать другие программы, и начинают модифицировать себя. Иначе говоря, программирование машин -- занятие для начальной школы, ну и простейший способ поддерживать жизнь, не напрягаясь.
Добавлю немного мистики. Как-то я сам всему обучался, но был-таки один человек, который повлиял на меня, от него я впервые услышал про Си (тогда только-только персоналки появились, до этого я писал на пиэле). Он вообще был странный. Не терпел непонимания, сразу взводился. Разводился и женился не один раз, но на одной женщине. И сказал мне как-то, что он пишет такую программу. Да. Сразу после этого умер. Лет сорок ему было. Борзов его фамилия.