dastapov: (Default)
[personal profile] dastapov
После выхода второго номера журнала "Практика функционального программирования" у меня состоялась интересная переписка с неким программистом, который очень любит писать на C.

Кульминацией этой переписки стало то, что он предложил мне следующее пари: я формулирую простенькую задачу, после чего мы оба реализуем ее - он на С, я - на Haskell. После этого в условие вносятся небольшие коррективы (моделируем поведение требований в реальном мире), а мы вносим коррективы в наши программы. Результаты сравниваются по скорости исполнения, объему потребляемой памяти, количеству строк кода.

Мой оппонент изначально был поставлен в неравные условия, т.к. я мог подобрать задачу так, чтобы ее было удобно реализовывать мне, и неудобно реализовывать ему. Впрочем, я постарался выбрать задачу так, чтобы ее решение не требовало каких-то узкоспециальных знаний. Фактически, мы занимались тем, что читали из файла и обрабатывали некую сложную структуру данных. (Детальное условие я тут не привожу, чтобы не "сбивать прицел" второй половине поста).

Моя первая версия активно использовала Data.Generics и библиотечные парсеры на их основе, поэтому выиграла в размере и читаемости кода, но пролетела по объему потребляемой памяти. Впрочем, мой оппонент настолько понадеялся на мощь C, что решил не использовать библиотечный qsort, а реализовать insertion sort самостоятельно. Это самым пагубным образом сказалось на производительности (LOCs - строки кода, память - в мегабайтах, время - в секундах):


LOCs MEM max Runtime, sec
Haskell, v1 72 580 88
C++, v1 861 55 383


Кроме того, выяснилось, что мой оппонент всячески "срезает углы" в погоне за производительностью. Например, функция сохранения обработанных данных в файл принимала, в числе прочих, числовой параметр, на который умножались определенные поля структуры перед сохранением - таким образом экономился один рекурсивный обход всей структуры данных.

В результате я тоже решил "срезать углы", и принести красоту кода в жертву скорости. Мой же оппонент взялся за qsort, и к вторые (финальная) версии нашего кода "финишировали" с такими результатами:


LOCs MEM max Runtime, sec
Haskell, v2 169 130 8
C++, v2 950 54 5


Я предполагал, что соотношение цифр будет гораздо сильнее не в пользу Haskell. Впрочем, меня по-прежнему можно было бы обвинить в предвзятом подходе к формулированию условий.


К чему я все это веду?

Существует классическая статья "Haskell vs. Ada vs. C++ vs. Awk vs. ... An Experiment in Software Prototyping Productivity", написанная в 1994-м году. За 15 лет многое изменилось, и, думается, многим было бы интересно прочитать подобную статью про положение дел сегодня.

В связи с этим ищутся:
1)Условия подходящей задачи (критерии см. ниже)
2)Желающие реализовать ее на Haskell/C+/Ocaml/Java/Scala/C#/... с тем, чтобы ваш код был нещадно сравнен с другими и опубликован для всеобщего обозрения.


Q:Зачем все это делается?
A:На других посмотреть, себя показать. В частности, чтобы люди имели возможность посмотреть на решения на других языках, и составить о них какие-то мнение.

Q:Чем не устраивает The Great Language Shootout?
A:Тем, что там отдается предпочтение "быстрым и грязным" решениям, которые всячески "срезают углы". Во-первых, в таком стиле пишется дай бог чтобы 5% от всех программ, во-вторых, людям, не знающим язык X, строго противопоказано смотреть на решения на языке X в Language Shootout - останется превратное впечатление.

Q:Как будут сравниваться решения, чтобы определить победителя?
A:Никак, т.к. победителей не будет. Будут приведена определенная статистика по всем решениям, без выводов.

Q:Какой тогда стимул участвовать?
A:На других посмотреть, себя показать :)

Какой должна быть задача?
1)Не заточенной под конкретную ОС (т.е. "Реализовать компонент, встраеваемый в Word" или "плагин для libpam" - не катит)
2)Не заточенной под конкретный язык/фреймворк/... (т.е. "получить список сигнатур методов всех объектов указанной сборки .Net" - не катит)
3)Если глубокие знания в предметной области дают решающее преимущество - это fail (т.е. "реализовать DES-CBC" - не катит)
4)Чтобы она не была из категории "мне не нужно, чтобы плац был чистый, а нужно, чтобы вы задолбались" (т.е. "распарсить XLS-файл, не пользуясь библиотеками" - не катит)
5)Задача не должна требовать много времени на реализацию (если это будут человеко-недели - никто за нее не возьмется)

Какой должна быть реализация?
1)Чтобы ее было не стыдно показать другим. В частности, чтобы решение на языке X не заплевали бы как кривое и неидиоматичное другие программисты, знающие язык X.
2)Идеально было бы давать две реализации: первую с ориентиром на "красоту", "образцово-показательность" и легкость поддержки/развития кода (т.е. пишем как пример кода, который будет прилагаться к резюме :), а вторую - "грязную и быструю".
3)Т.к. библиотеки - это неотъемлимая часть силы и популярности языка, библиотеками "общего назначения" (контейнеры, парсинг, ...) пользоваться можно и нужно
4)Но! Решение, которое свелось к исключительно к нахождению и использованию какой-то (узкоспециальной) библиотеки никому не интересно и рассматриваться не будет.

Выбирать подходящее условие будет жюри, представляющее апологетов всех течений и направлений, в том числе - включающее тех, кто критически отзывался о материалах, уже вышедших в fprog.ru.

Если у вас есть идея подходящией задачи и вы хотите ей поделится - напишите комментарий, а?
Page 1 of 2 << [1] [2] >>

(no subject)

Date: 2009-11-03 10:38 pm (UTC)
From: [identity profile] squadette.livejournal.com
может быть, топовые задачи из project euler?

(no subject)

Date: 2009-11-03 10:42 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Тут будут иметь решающее преимущство олимпиадчики-алгоритмисты. Разве что с приложением описания готового алгоритма решения :)

(no subject)

From: [identity profile] http://users.livejournal.com/_nik_/ - Date: 2009-11-04 06:02 am (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_adept_/ - Date: 2009-11-04 11:45 am (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_nik_/ - Date: 2009-11-04 12:54 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_nik_/ - Date: 2009-11-04 12:57 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_nik_/ - Date: 2009-11-04 12:58 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_adept_/ - Date: 2009-11-04 01:05 pm (UTC) - Expand

(no subject)

From: [identity profile] levgem.livejournal.com - Date: 2009-11-04 08:54 am (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_adept_/ - Date: 2009-11-04 11:46 am (UTC) - Expand
(deleted comment)
(deleted comment)

(no subject)

From: [identity profile] http://users.livejournal.com/_adept_/ - Date: 2009-11-03 10:43 pm (UTC) - Expand
(deleted comment)

(no subject)

From: [identity profile] http://users.livejournal.com/_adept_/ - Date: 2009-11-03 11:02 pm (UTC) - Expand

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2009-11-03 10:50 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_adept_/ - Date: 2009-11-03 11:03 pm (UTC) - Expand

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2009-11-04 12:07 am (UTC) - Expand

(no subject)

From: [identity profile] xoma-xoma.livejournal.com - Date: 2009-11-04 11:40 am (UTC) - Expand

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2009-11-04 12:44 pm (UTC) - Expand

(no subject)

Date: 2009-11-03 10:48 pm (UTC)
From: [identity profile] thesz.livejournal.com
Реализация языка с зависимыми типами данных?

Шутка. ;)

Рейтресеры.

Поиск пути в области со статическими и движущимися объектами, малой плотностью оных.

Двумерная игровая физика.

(no subject)

Date: 2009-11-03 10:48 pm (UTC)
From: [identity profile] akkort.livejournal.com
Мы с товарищем как-то круче соревновались: C vs CPP. С небольшим отрывом победил С. Задача такая: Есть входной файл с набором фигур: окружность, ромб, треугольник, квадрат, параллелограмм и т.п. Формулы вычисления площади есть у всех, они одинаковые, но можно их оптимизировать если хочется. Надо прочитать в память 10 млн записей и по всем записям пройтись 10 или больше проходов для вычисления площади каждой фигуры. Замеряется скорость чтения и скорость вычисления.

(no subject)

Date: 2009-11-03 10:53 pm (UTC)
From: [identity profile] lionet.livejournal.com
Тут окамл победит, смысл мерять ничего нет. У него malloc на порядок быстрее сишного.

А если чуть более серьёзно, то эта штука меряет только перформанс. А то что на хаскеле это будет одна строка, а на си — стопятьсот, это как-бы тоже должно быть измеряемым фактором в финальном решении. То есть, задаче желательно не состоять в том, что она замеряет перформанс и/или лаконичность сама собой. На это постмортем анализ есть: что короче, и насколько при этом быстрее (медленнее).

(no subject)

From: [identity profile] akkort.livejournal.com - Date: 2009-11-03 10:58 pm (UTC) - Expand

(no subject)

From: [identity profile] lionet.livejournal.com - Date: 2009-11-03 11:02 pm (UTC) - Expand

(no subject)

From: [identity profile] akkort.livejournal.com - Date: 2009-11-03 11:08 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_adept_/ - Date: 2009-11-03 11:12 pm (UTC) - Expand

(no subject)

From: [identity profile] akkort.livejournal.com - Date: 2009-11-03 11:17 pm (UTC) - Expand

(no subject)

From: [identity profile] lionet.livejournal.com - Date: 2009-11-03 11:25 pm (UTC) - Expand

(no subject)

From: [identity profile] akkort.livejournal.com - Date: 2009-11-03 11:33 pm (UTC) - Expand

(no subject)

From: [identity profile] lionet.livejournal.com - Date: 2009-11-03 11:37 pm (UTC) - Expand

(no subject)

From: [identity profile] akkort.livejournal.com - Date: 2009-11-03 11:42 pm (UTC) - Expand

(no subject)

From: [identity profile] lionet.livejournal.com - Date: 2009-11-03 11:50 pm (UTC) - Expand

(no subject)

From: [identity profile] akkort.livejournal.com - Date: 2009-11-03 11:56 pm (UTC) - Expand

(no subject)

From: [identity profile] lionet.livejournal.com - Date: 2009-11-03 11:58 pm (UTC) - Expand

(no subject)

From: [identity profile] akkort.livejournal.com - Date: 2009-11-04 12:10 am (UTC) - Expand

(no subject)

From: [identity profile] lionet.livejournal.com - Date: 2009-11-04 12:11 am (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_adept_/ - Date: 2009-11-04 05:11 am (UTC) - Expand
(deleted comment)

(no subject)

From: [identity profile] lionet.livejournal.com - Date: 2009-11-21 07:45 am (UTC) - Expand
(deleted comment)

(no subject)

From: [identity profile] lionet.livejournal.com - Date: 2009-11-21 10:03 am (UTC) - Expand
(deleted comment)

(no subject)

From: [identity profile] lionet.livejournal.com - Date: 2009-11-21 11:23 am (UTC) - Expand
(deleted comment)

(no subject)

From: [identity profile] lionet.livejournal.com - Date: 2009-11-21 01:43 pm (UTC) - Expand
(deleted comment)

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2009-11-21 05:41 pm (UTC) - Expand
(deleted comment)

Re: ...continue (2/2)

From: [identity profile] lionet.livejournal.com - Date: 2009-11-21 01:20 pm (UTC) - Expand

Re: ...continue (2/2)

From: [identity profile] ormuz.livejournal.com - Date: 2009-11-21 04:12 pm (UTC) - Expand

Re: ...continue (2/2)

From: [identity profile] lionet.livejournal.com - Date: 2009-11-22 07:42 am (UTC) - Expand

Re: ...continue (2/2)

From: [identity profile] eao197.blogspot.com - Date: 2009-11-24 07:30 am (UTC) - Expand

Re: ...continue (2/2)

From: (Anonymous) - Date: 2011-08-18 12:10 pm (UTC) - Expand

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2009-11-21 02:01 pm (UTC) - Expand

(no subject)

From: [identity profile] lionet.livejournal.com - Date: 2009-11-03 11:31 pm (UTC) - Expand

(no subject)

From: [identity profile] kirill a. korinskiy - Date: 2009-11-07 08:45 pm (UTC) - Expand

(no subject)

From: [identity profile] lionet.livejournal.com - Date: 2009-11-08 02:19 am (UTC) - Expand

(no subject)

From: [identity profile] kirill a. korinskiy - Date: 2009-11-08 12:17 pm (UTC) - Expand

(no subject)

From: [identity profile] kirill a. korinskiy - Date: 2009-11-07 08:41 pm (UTC) - Expand

(no subject)

From: [identity profile] kirill a. korinskiy - Date: 2009-11-07 08:35 pm (UTC) - Expand

(no subject)

Date: 2009-11-03 10:51 pm (UTC)
From: [identity profile] akkort.livejournal.com
Есть еще интересная задачка на динамическое программирование, поиск в ширину, табличный поиск и оптимизацию. Но для ее решения нужен мозг где-то дней на 3-5. Красивые решения со структурными данными рискуют бесполезно сожрать в 2-3 раза больше памяти.

(no subject)

Date: 2009-11-03 11:23 pm (UTC)
From: [identity profile] dkrig.livejournal.com
Буду ждать анонса условия задачи - интересно будет решить ее на двух (а если повезет, то и на трех) языках программирования, которыми владею (ну или тешу себя надеждами что владею =)).

(no subject)

Date: 2009-11-04 12:28 am (UTC)
From: [identity profile] lionet.livejournal.com
Компрессор CSS файлов для веба.

(no subject)

Date: 2009-11-04 01:17 am (UTC)
From: [identity profile] zamotivator.livejournal.com
А можно я из той же серии предложу?
Вывод типов для SQL или иного простого языка

(no subject)

From: [identity profile] kmmbvnr.livejournal.com - Date: 2009-11-04 04:47 am (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_adept_/ - Date: 2009-11-04 05:07 am (UTC) - Expand

(no subject)

From: [personal profile] tinedel - Date: 2009-11-04 09:47 am (UTC) - Expand

(no subject)

From: [identity profile] dmzlj.livejournal.com - Date: 2009-11-04 06:01 am (UTC) - Expand

(no subject)

From: [identity profile] zamotivator.livejournal.com - Date: 2009-11-04 12:45 pm (UTC) - Expand

(no subject)

From: [identity profile] kirill a. korinskiy - Date: 2009-11-07 08:37 pm (UTC) - Expand

(no subject)

From: [identity profile] dmitriid.livejournal.com - Date: 2009-11-09 09:11 am (UTC) - Expand

(no subject)

Date: 2009-11-04 01:01 am (UTC)
wizzard: (Default)
From: [personal profile] wizzard
collision detection в 2d, какой-нить image processing (текстурированный треугольничек нарисовать, HDR->LDR (tonemap+bloom))

поиск пути на сетке, поиск пути среди convex hull'ов. (disclaimer: я их решал эмпирически, поэтому предполагаю что особой мат. подготовки, если там не extreme cases, не требуется)

(no subject)

Date: 2009-11-04 05:37 am (UTC)
From: [identity profile] hvd.livejournal.com
Очень интересная идея, я, пожалуй, поучаствую с F#.

Ха!

Date: 2009-11-04 05:44 am (UTC)
From: [identity profile] cacha.livejournal.com
Вот мне в пятнцу предстоит в очередной раз начать читать студентом курс, который я про себя называю "C programming in UNIX", который является по сути обзором/введением в Unix для студентов первых курсов. И я, конечно, скажу им, что не стоит брать С и писать на нем все подряд, но знать, что интерфейсы определены в терминах этого языка крайне полезно. Плюс есть прослойка несколько более широкая чем LAMP, в ней почти все на C , и иногда приходится заглядывать внутрь. Так что С пока(?) вроде как индустриальная необходимость в этой области, но, по совсмем большому счету, это, кажется, просто тяжелое наследие.

(no subject)

Date: 2009-11-04 07:45 am (UTC)
From: [identity profile] 13-49.livejournal.com
Если авторы ghc сделают его не транслятором в Си, а полноценным фронтэндом к gcc, то ghc от плюсов по скорости особо отличаться не будет.

(no subject)

Date: 2009-11-04 09:23 am (UTC)
From: [identity profile] squadette.livejournal.com
он давно уже не транслятор в C

(no subject)

From: [identity profile] 13-49.livejournal.com - Date: 2009-11-04 09:28 am (UTC) - Expand

(no subject)

From: [identity profile] squadette.livejournal.com - Date: 2009-11-04 09:34 am (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_adept_/ - Date: 2009-11-04 12:14 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_adept_/ - Date: 2009-11-04 12:25 pm (UTC) - Expand

(no subject)

From: [identity profile] 13-49.livejournal.com - Date: 2009-11-04 12:42 pm (UTC) - Expand

(no subject)

From: [identity profile] thesz.livejournal.com - Date: 2009-11-04 12:47 pm (UTC) - Expand

(no subject)

Date: 2009-11-04 09:00 am (UTC)

(no subject)

Date: 2009-11-04 09:23 am (UTC)
singalen: (Default)
From: [personal profile] singalen
О коде.
Если такая разница в LOC, то это чистая победа Хаскелля. Потому что тройной расход по памяти и полуторный CPU - дело временное, а стоимость саппорта вечна.

О задачах.
Есть PLEAC, и там ещё ссылки.

Об участии.
Запишите меня. Возьму Java или Groovy.

(no subject)

Date: 2009-11-04 09:24 am (UTC)
From: [identity profile] grizagufo.livejournal.com
в качестве пищи для размышлений можно взять книгу "Этюды для программистов" и посмотреть ее. Возможно в ней найдутся подходящие задачи. Хотя там длительность большинства задач более человека-недели. Из плюсов - хорошо все описано. Навскидку вспоминается задачка про машинки в пробке.

(no subject)

Date: 2009-11-04 09:38 am (UTC)
tinedel: (Default)
From: [personal profile] tinedel
я бы вот тоже поучавствовал.
так что как-бы внимательно за Вами наблюдаю.

(no subject)

Date: 2009-11-04 10:55 am (UTC)
From: [identity profile] http://users.livejournal.com/_winnie/
Ещё было бы интересно смотреть на комбайны из разных языков. Напр. парсинг на Haskell, работа с интернетом на Python, числодробилка данных на C++

(no subject)

Date: 2009-11-04 06:23 pm (UTC)
From: [identity profile] migmit.vox.com (from livejournal.com)
Кстати +1.

(no subject)

Date: 2009-11-04 11:12 am (UTC)
From: [identity profile] artworklv.livejournal.com
Гмм. Может такие задачи?
простая - нейронная сеть с обратным распространением ошибки.
сложная - когнитрон/неокогнитрон

(no subject)

Date: 2009-11-04 01:19 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Как говаривал один знакомый мне научный руководитель: "но в чем же научная новизна?" :)

отличная идея!

Date: 2009-11-04 11:41 am (UTC)
From: [identity profile] pufpuf.livejournal.com
Могу предложить немного не четкую задачу: у нас есть какой-то внешний ресурс, например twitter, к которому доступ осуществляется через API (там есть публичная часть, которая не требует API-ключа). Также там есть есть rate limit на количество запросов.

Задача такая: используя простой интерфейс (скорее всего, http), узнать, на каком расстоянии в социальном графе находятся 2 пользователя (по их username). Т.е., условно говоря, мы даем запрос http://test/distance/vasya/masha, а получаем в ответ текст "3 vasya - sasha - olya - masha" или "? vasya - unknown - masha" или "0 vasya - not connected - masha"

Интерес задачи в том, что точного графа у нас никогда не будет, а будет только какая-то малая часть плюс возможность получить некторое количество нужной информации из twitter. Естественно, что на первые запросы будет выдаваться в основном unknown, но со временем, если мы будем накапливать данные (т.е. хранить у себя социальный граф), то будет все больше реальных ответов. Еще плюс этой задачи -- что это довольно реальная штука, и что-то подобное может встречаться часто. Кроме того, она не тривиальна и не предполагает единственный путь рещения -- наоборот. Можно еще подумать о том, чтобы предусмотреть persistence тех данных, которые у нас есть. Например, ввести условие, что посредине работы программа 1 раз перезапускается.

Конечно, тестирование такой системки немного проблематично (как и с любыми реальными системами, так ведь), но я вижу такой подход:
1. создать список запросов (порядка 1000 - 10000). Это можно более-менее автоматизировать: собрать пару тысяч имен пользователей -- не проблема. Желательно, конечно, чтоб они были и не слишком далеко друг от друга, и не слишком близко (т.е. японцев, наверно, не брать. Скажем, ограничится европой и штатами).
2. создать какое-то случайное (нормально распределенное) расписание этих запросов на день-два-неделю (за день можно сделать, кажется, до 4800 запросов к твиттер-API).
3. развернуть программку на каком-то тестовом сервере и запускать эти запросы по графику, а результаты скидывать в лог
Соответственно, можно будет получить даже какие-то данные для сравнения разных подходов: у кого результаты точнее выйдут.
Естественно, можно сделать еще какую-то небольшую тестовую выборку, чтобы люди могли на ней тестировать программу в процессе разработки

такие мысли. Возможно, нужно дорихтовать...

(no subject)

Date: 2009-11-04 01:35 pm (UTC)
From: [identity profile] antilamer.livejournal.com
Command-line тула для управления документами - например, скачанными из инета статьями.
Хранит всю свою инфу в специальном файле или папке.

Позволяет присваивать теги файлам или папкам. Позволяет делать запросы по тегам и подстрокам названий. Умеет прозрачно отслеживать переименованные и перемещенные файлы. Умеет рекомендовать и вообще автопроставлять теги.

Типа tds - tagged document storage
> tds tag temp/pfds.pdf algorithms functional programming book
> mv temp/pfds.pdf 'books/fp/Okasaki - Purely functional data structures.pdf'
> tds get functional algorithms
...
books/fp/Okasaki - purely functional data structures.pdf
...

Хочу сам себе такую написать когда-нибудь, но не сейчас.

(no subject)

Date: 2009-11-04 03:13 pm (UTC)
From: [identity profile] kurilka.livejournal.com
а потом вебную/гуёвую ещё обёртку неплохо бы :)

(no subject)

From: [identity profile] voidex.livejournal.com - Date: 2009-11-05 01:13 pm (UTC) - Expand

(no subject)

From: [identity profile] antilamer.livejournal.com - Date: 2009-11-05 01:20 pm (UTC) - Expand

(no subject)

From: [identity profile] voidex.livejournal.com - Date: 2009-11-05 03:05 pm (UTC) - Expand

(no subject)

From: [identity profile] grundik.livejournal.com - Date: 2009-11-05 03:27 pm (UTC) - Expand

(no subject)

Date: 2009-11-04 02:04 pm (UTC)
From: [identity profile] janatem.livejournal.com
Взять игру типа шахмат и поставить задачу так: строить дерево ходов на заданную глубину, чтобы дать оценку позиции. Для простоты считать, что функция статической оценки задана изначально, и ее не надо выдумывать. Таким образом, ответ в задаче детерминирован, и от участников требуется научиться максимально быстро генерировать ветви и правильно применять отсечения (можно в условии дать описание механизма отсечения, чтобы задача удовлетворяла пункту (3)).

Также возможно расширение задачи (для проверки продуктивности рефакторинга): после того, как участники выкатили свои реализации, изменить правила игры и предложить им модифицировать свои программы.

(no subject)

Date: 2009-11-04 02:18 pm (UTC)
From: [identity profile] -darkus-.livejournal.com
А вот, всё же, задача про генерацию естественно-языкового текста, ограниченного какой-либо областью применимости (словарём) или даже задача ведения простого диалога на уровне «Как тебя зовут?» — «Меня зовут Генератор-1».

Критерии:

1) Подходит полностью.
2) Подходит полностью.
3) Не совсем, потому как нужны какие-никакие познания в области анализа и синтеза ЕЯ-текста.
4) Вроде бы, подходит. С алгоритмической точки зрения более-менее нормальная задача, принимая во внимание ограниченность словаря.
5) Оцениваю в пару десятков человеко-часов.

(no subject)

Date: 2009-11-04 02:23 pm (UTC)
From: [identity profile] -darkus-.livejournal.com
Или более простецкая задача, но показывающая алгоритмы и принципы реализации на разнообразнейших языках.

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

> pi = 3.14
pi = 3.14

> r = 10
r = 10

> s = pi * r^2
s = 314

Для четырёх арифметических операций задача выглядит простой. Для усложнения можно попросить использовать вшитые функции (типа «научного» калькулятора).

Чем хороша задача? Здесь и синтаксический анализ входного текста какой-никакой, и построение дерева вычислений, и сами вычисления, и вывод, и хранение состояния (таблица переменных). Многие идиомы можно показать.

К тому же подходит под все пять заявленных критериев хорошей задачи.

(no subject)

Date: 2009-11-04 03:08 pm (UTC)
From: [identity profile] ghrar.livejournal.com
обучаемый калькулятор, который будет не только запоминать новые функции, но и сравнивать их с уже созданными и оптимизировать их?)

(no subject)

Date: 2009-11-04 03:00 pm (UTC)
From: [identity profile] grundik.livejournal.com
Почему не Problem K (со списком эталонных таблиц, часть списка - не публиковать)?

(no subject)

Date: 2009-11-04 03:04 pm (UTC)
From: [identity profile] grundik.livejournal.com
Плюс уже дохрена решений есть ;)

(no subject)

From: [identity profile] http://users.livejournal.com/_adept_/ - Date: 2009-11-04 06:54 pm (UTC) - Expand

(no subject)

From: [identity profile] grundik.livejournal.com - Date: 2009-11-05 03:23 pm (UTC) - Expand
Page 1 of 2 << [1] [2] >>

Profile

dastapov: (Default)
Dmitry Astapov

May 2022

M T W T F S S
       1
2345678
9101112131415
161718 19202122
23242526272829
3031     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags