Задачи имеют характеристики:

advertisement
Задачи имеют характеристики:
Сложность ( алгоритмическая ):
0 – очень простая (годится только для обычных занятий)
1 – простая
2 – средней сложности
3 – повышенной сложности
4 –очень сложная
Объем ( кода):
0 – очень маленькая (годится только для обычных занятий)
1 – маленькая
2 – средняя
3 – большая
4 –очень большая
(В скобках рядом с названием задачи может быть указан номер другой задачи, с которой
данная программа может работать в паре, т.е. должны быть согласованы интерфейсы.)
НАЗВАНИЕ
СЛОЖ
НОСТЬ
ОБЪЕ
М
2
2
1
2
3
1
2
2
3
1
1. Proxy
Написать программу, которая слушает сокет, принимает входящее соединение от
клиента, устанавливает связь с сервером и начинает пробрасывать пакеты от сервера
клиенту и обратно. Если связь с одной из сторон рвется – второе соединение тоже
должно автоматически закрываться.
2. Тетрис (3)
Написать игру Тетрис в текстовом режиме. Играть могут либо 1 игрок, либо 2 игрока,
либо игрок и компьютер (бот – см. 6).
3. Антитетрис (2)
Написать «бота» для игры Тетрис. На вход последовательность фигур. На выход – как
фигуры должны укладываться в стакан. Алгоритм должен постараться уложить как
можно больше фигур.
А можно сделать по архитектуре клиент-сервер.
Текстовый интерфейс отображающий ход игры реализуется на стороне сервера или на
стороне клиента.
4. Сапер (5)
Написать игру Сапер в текстовом режиме. Играть могут либо 1 игрок, либо 2 игрока,
либо игрок и компьютер (бот – см. 11).
(Надо продумать интерфейс без мыши.)
5. Антисапер (4)
Написать «бота» для игры Сапер. Программа должна соединяться (любым способом –
1
например через сокеты) с «сервером» игры Сапер и разминировать минное поле. Бот
должен либо разминировать все поле, либо погибнуть.
Текстовый интерфейс отображающий ход игры реализуется на стороне сервера или на
стороне клиента.
6. Генератор лабиринтов (7)
Написать программу генерации лабиринта – матрицу описывающая лабиринт из M*N
клеток. Не должно быть «отрезанных» от лабиринта клеток. Вход и выход должны быть
в единственном экземпляре. Вход и выход должны быть соединены одним и только
одним путем по лабиринту. Вход расположен на левой «стене» лабиринта, выход – на
«правой».
2
1
2
1
2
2
2
3
2
3
2
3
1
2
2
2
7. Прохождение лабиринта (6)
Написать «бота» проходящего лабиринт, построенный программой (6).
8. Генератор кроссвордов (9)
Написать программу генерации кроссворда на основе набора слов из файла. Если из
данного набора слов не удается построить кроссворд, то программа должна предложить
решение из максимального количества слов.
9. Разгадывание кроссвордов (8)
Написать интерфейс пользователя для игры Кроссворд. Сам кроссворд генерится
программой (8). Пользователь должен разгадать кроссворд или сдаться.
10. Оконная библиотека для текстового режима
Написать библиотеку, с помощью которой любой другой программист сможет легко
организовать оконный интерфейс для своей разработки. (Созданием, удаление,
сохранение, изменение размеров, перекрытие, переключение, скроллинг, установка
параметров – цвет фона, символ фона, цвет/мигание/выделение каждого символа в окне,
удобные интерфейсы вывода текста (м.б. еще ввод текста).)
11. Библиотека диалоговых элементов для текстового режима
Написать библиотеку – дополнение к (10), с помощью которой любой другой
программист сможет легко организовать оконный интерфейс для своей разработки с
возможностью организации стандартного ввода вывода через классические диалоговые
элементы. (Edit, Label, ComboBox, ListBox, Menu, Tree и т.д.)
12. Универсальный интерфейс для ввода
Написать библиотеку, с помощью которой любой другой программист сможет легко
организовать интерфейс через командную строку для своей разработки. В отличие от
задач (10-11), данная задача не предусматривает организации псевдографического
оконного интерфейса. Весь ввод-вывод с консоли. Но должна быть возможность
организовать меню, а так же встроенный контроль типов вводимых данных.
13. Сбор данных голосования (клиент – сервер)
Написать 2 модуля по технологии клиент-сервер. Сервер слушает сокет и принимает
пакеты состоящие из нескольких чисел. Каждое число – количество человек,
проголосовавших за того или иного кандидата. Сервер должен в real-time суммировать
2
полученные данные и выводить из в виде диаграммы – набор столбцов – проценты для
каждого кандидата и кто в текущий момент выигрывает выборы. Клиентная часть
(«изберательный пункт») должна спросить у пользователя сколько голосов было отдано
за каждого из кандидатов, и передать эту информацию серверу.
14. Авто-подъемник процессов (логи + сбор core–dump)
Программа должны брать из config файла имена других программ, которые должны
«вечно» работать. Если процесс не запущен, или упал, то программа должна заново
поднять процесс. Если после падения процесса остался core-dump, он должен быть
переименован перемещен в специально заданную директорию. Все события должны
отражаться в Log файле.
1
2
2
1
3
3
2-3
2
2-3
2
2
2
4
4
15. Библиотека поддержки регулярных выражений
Необходимо написать библиотеку, реализующую движок обработки регулярных
выражений и интерфейс к нему. В идеале должно быть реализовано оба из 2
классических подходов к обработке регулярных выражений.
16. Проверка орфографии (15)
Написать библиотеку проверки орфографии и программу, которая эту библиотеку
использует. Библиотека имеет словарь, в котором задан набор слов с описанием части
речи. Библиотека умеет склонять и спрягать слова из словаря. Библиотека умеет
проверять текстовый файл на предмет ошибок и выводить ошибки, предложение как
ошибку исправить, незнакомые слова. Каждое неправильное/неопознанное слово
должно сопровождаться описанием где оно найдено (строке + столбец).
17. Парсер (С++, HTML, PAS, BAS, XML….) (15)
Сразу набор задач. Каждая программа должна взять текстовый файл, пропарсить его и
вывести все найденные ошибки синтаксиса.
HTML, PAS, BAS, XML….
18. Парсер (C++, HTML, PAS, BAS, XML, …) (15)
Сразу набор задач. Каждая программа должна взять текстовый файл, пропарсить его и
представить данные из файла в удобной древовидной структуре данных
HTML, PAS, BAS, XML….
19. Автоформатер C++ (17)
Написать программу, которая анализирует текст программы на С++ и вставляет/удаляет
пробелы и переносы строки, т.о. приводя внешний вид кода к некому прогстайлу.
В более сложном варианте – в сочетании с (17) программа может предложить
переименовать некоторые лексемы (имена классов, методов, полей и т.д.). При этом
после переименования программа должна осуществить замену во всех файлах проекта.
20. Построение call–graph на основе С++ кода (и других связей)
Программа в сочетании с (17) должна проанализировать код и вывести в виде текста
заданного синтаксиса: (варианты для разных задач)
 иерархию классов
 связи классов с указанием методов и полей
 call-graph – граф вызовов внутри программы, т.е. какая функция какие другие
функции вызывает
3
21. Программа удаленной синхронизации по FTP и запуска по TELHET
Это может быть одна или 2 разных задачи.
Программа должны соединиться с удаленным хостом, синхронизировать по FTP
каталоги, описанные в config файле, а так же закачать на удаленный хост несколько
скриптов. Соединиться с удаленным хостом через TELNET. Запустить на удаленном
хосте ранее закаченные скрипты. Весь output должен выдаваться пользователю и/или
сохраняться в файл.
Для синхронизации можно использовать make.
2
3
2
2
1
2
2
2
2
2
1
2
В идеале, эта программа должны не разрывать соединения с удаленным хостом и даже
посылать HeartBeat сообщения. Задачи на закачку/запуск должны браться в виде файлов
из заданного каталога.
Вообще говоря, эту программу стоит написать под Win32, т.к. в результате мы должны
получить реално ценный инструмент, позволяющий осуществлять удаленную
компиляцию с возможностью обработки результатов.
22. Тестовая система – мэнэджер задач / ресурсов
Предполагается, что есть некие скрипты (test case-ы). Есть набор хостов, на которых эти
скрипты можно запускать. В один момент времени на одном хосте должен быть запущен
ТОЛЬКО ОДИН скрипт. Тестовая система должна запускать скрипты на хостах, собирая
и сохраняя output. Задания поступают в виде файлов в заданный каталог. Результаты
складываются в другой каталог.
23. Парсер *.ini файлов
Задача сильно похожа на 17. Необходимо загрузить информацию из ini файла и
предоставить к ней интерфейс. Т.о. любая программа нуждающаяся в config файле
сможет использовать эту библиотеку.
24. Парсер *.xml файлов
Задача сильно похожа на 17, 22. Необходимо загрузить информацию из xml файла и
предоставить к ней интерфейс. Т.о. любая программа нуждающаяся в config файле, или
каких то внешних файлах сможет использовать эту библиотеку.
25. Telnet Client с поддержкой разветвленного легко настраевомого меню.
Имеет смысл написать под Win32.
Telnet клиент должен позволять легко запоминать указанные пользователем команды и
легко создавать из них «меню пользователя». Т.о. можно создавать разветвленные
удобные меню для работы. Каждому пункту меню можно назначить «горячую» клавишу
в глобальном либо локальном контексте.
26. Библиотека для отладки
Написать библиотеку, которая предоставляет некоторые возможности для отладки
программ, как то
 макросы типа LOG / SWERR / TRACE / ASSERT / VERIFY
 возможность перенаправить вывод макросов в файлы, в том числе на основе
параметров командной строки при запуске программы
 перегружая new / delete осуществляет контроль за выделением /
4
использованием / освобождением памяти (некий аналог dbgcrt)
27. Тестовая система для программ
Некий аналог библиотеки TRS–15. Предоставляет интерфейс для возможности создания
Test-Case-ов внутри программы. Например есть алгоритм, можно написать ряд TestCase-ов для проверки этого алгоритма. Библиотека должна прогнать эти Test-Case-ы, все
или только заданные, собрать статистику, выдать результаты. Управление библиотекой
осуществляется из командной строки основной программы.
28. Калькулятор
Написать калькулятор.
Версия 1: калькулятор должен уметь выполнять рад действий – аналог калькулятора в
Windows.
Версия 2: калькулятор должен уметь вычислять введенное пользователем выражение с
заранее (или из файла) определенными функциями. Умеет парсить скобки. Использует
постфиксную запись.
1
2
Версия 3: версия 2 + в выражении могут участвовать переменные. Значения переменных
задаются пользователем.
29. Визуализатор графа.
Есть некий (уже существующий) формат, позволяющий описать в тестовом файле граф.
Программа должна на основе этого текста построить картинку.
Версия 1: картинка в текстовом режиме
2
Версия 2: картинка в виде bmp (или любого другого графического формата)
30. Редактор графа (28)
Написать библиотеку для работы с графами. В сочетании с (28) написать редактор,
позволяющий редактировать граф в текстовом режиме.
Как продолжение идеи – можно реализовывать графивые алгоритмы – например поиск
кротчайшего пути на взвешенном графе с помощью алгоритма Дэйкстры.
?
Другой пример – алгоритм «развертывания» графа. Идея: вершины графа – шарики,
ребра – пружины. Моделируется физическое взаимодействие элементов этой
конструкции. Можно ввести гравитацию и вообще сделать на основе этой идеи некий
конструктор моделей состоящих из простых элементов – шарики, пружины, нити, блоки,
шарниры, жесткие связи и т.д. …
31. Текстовый редактор
Написать тестовый редактор. Желательна поддержка стандартных для Win32 схем
редактирования текста. Работа с блоками.
2
3
Версия 2: поддержка С++ синтаксиса – выравнивание и подсветка (15)
32. Шаблонные контейнеры.
Написать некий аналог части STL. Набор шаблонных контейнеров (Array, List, Hash и
?
5
т.д.) Можно реализовать механику итераторов, алокаторов.
Версия 2: написать набор контейнеров с использованием SmallTalk подхода, когда в
контейнере хранятся указатели на потомков CCollectable.
33. Библиотека эмуляций графики в текстовом режиме.
Не знаю на сколько это реализуемо под unix...
Есть черно-белая картинка. Надо ее проанализировать и нарисовать в текстовом режиме,
используя в качестве кусочков картины обычные символы. Если удастся – хорошо бы
подменять таблицы знакогенератора.
1
2
2
2
2
3
4
4
34. Игра крестики-нолики на большом поле
Написать игру крестики нолики на большом поле. Выигрывает тот, кто поставит в ряд 5
крестиков/ноликов. Играть могут либо 2 человека, либо человек и компьютер. В
последнем случае нужен «бот» - алгоритм для игры с неким ИИ.
35. Дебагер
Написать программу для отладки других программ в текстовом режиме.
Версия 1: написать псевдо графическую «обертку» для дебагера dbx (30)
Версия 2: написать полностью свой дебагер
36. Графический pipeline
Написать свой небольшой аналог OpenGL – библиотеку с минимальной
функциональность. Результат работы программы – файл формата bmp (или другого
графического формата).
Можно реализовать алгоритмы освещения, тумана и т.д.
Кстати, можно придумать задачи с использованием реального OpenGL, но придется их
делать либо под Win32, либо под X-Win.
37. Алгоритм троссировки лучей
Реализовать алгоритм построения графической картинки с помощью алгоритма raytracing-а. На вход – 3Д модель. Результат работы программы – файл формата bmp (или
другого графического формата).
?
38. Конвертер кода Protel - C++
Написать конвертер кода с языка Protel в код на языке С++.
4
4
2
2
39. Морской бой
40. Туннель
Написать программу-туннель. Например у нас открыт только один порт в системе - FTP.
Программа ловит пакеты (приходящие по FTP в виде файлов) и пробрасывает их на
другие порты того же или другого хоста. Т.о. можно, например, пробросить Telnet
соединение, используя только FTP порт.
6
Т.о. надо бы иметь и клиент на Win стороне, который любые пакеты кладет в файлы и
отправляет по FTP.
Вообще, идея не очень сформировалась. Надо бы еще все продумать.
41. Игра «битва роботов» для программистов
Необходимо реализовать «серверную» часть игры – игровое поле. Клиенты – могут быть
разные – заходят на сервер и вступают в игру. В каждый момент игры сервер посылает
каждому роботу информацию о его состоянии (координаты, топливо, жизнь, энергия,
состояние брони), и о том что он «видит» вокруг. Клиент в ответ посылает что робот
должен делать – куда ходить/стрелять/трансформироваться и т.д. Каждый может
реализовать робота со своей программой поведения.
42. Игра домино (ядро + бот)
Написать игру домино. Играют несколько игроков. Игроком может быть либо человек,
либо компьютерный «бот».
43. Игры в карты
Любые игры в карты. Например игру «дурак».
Написать игру. Играют несколько игроков. Игроком может быть либо человек, либо
компьютерный «бот».
44. Игра в кости
Написать игру. Играют несколько игроков. Игроком может быть либо человек, либо
компьютерный «бот». Правила стандартные.
45. Игра в рулетку
Написать игру. Играют несколько игроков. Игроком может быть либо человек, либо
компьютерный «бот». Правила стандартные.
46. Задача - расставить 8 ферзей на шахматной доске
Необходимо расставить 8 ферзей на шахматной доске, так чтобы они не били друг друга.
На шахматную тематику можно много еще чего придумать….
47. Рrofile авто-форматер
Программа должна брать стандартный профайл (например для BASH) и приводить его в
порядок: выравнивать, группировать команды по типу, выкидывать повторяющиеся
команды, выкидывать повторяющиеся пути из PATH и т.д.
48. Виртуальный реестр
Написать программу, которая хранит наборы файлов – конфигов разных программ.
Можно переключать конфигурации.
Можно предусмотреть «групповые» настройки для некоторых программ.
49. Visual-diff
Написать программу сравнения 2 версия одного файла.
7
Версия 1: псевдо-графическая обертка для diff.
Версия 2: псевдо-графическая обертка + своя версия diff.
50. CVS client
Написать псевдографическую обертку для CVS клиента.
51. BuckUP manager
Программа должна с заданной регулярностью сохранять копии заданных файлов.
Хорошо бы при этом еще и архивировать их. Она же позволяет достать заданные версии
файлов. Можно сохранять все в cvs базе.
52. HTML browser
Парсинг html + viewer.
53. Сборщик статистики файловой системы
Система сбора статистики о количестве и размере файлов, о частоте обновления каких
то файлов. Если файл очень долго не менялся, можно предусмотреть возможность его
удаления/обновления/архивации. Можно еще что-нибудь придумать…
54. Интерпретатор языка (BASIС, …) (см. 17-18)
Приложение должно загрузить файл программы и выполнить эту программу так, как это
делает любой интерпретатор.
55. Интерпретатор команд (shell)
Приложение должно загрузить файл shell-скрипта и выполнить этот скрипт так, как это
делает любой командный интерпретатор.
56. Класс строки (2 версии)
Написать несколько реализаций класса строки.
1 - через обычный динамический массив
2 - строка с небольшим статическим буфером
3 - строка как указатель на ячейку в единой хэш-таблице строк
57. Проверка памяти (библиотека для отладки)
Набор отладочных средств. Контроль утечек памяти, контроль некорректной работы с
памятью.
58. Редактор Unix профайлов (редактирование переменных, PATH)
Программа хранит во внутренней файловой базе данных наборы профайлов и конфигов
и умеет переключать пользовательские конфигурации путем смены конфигов.
59. Assert, Trace, … (библиотека для отладки)
Набор отладочных средств – система сбора трэйсов, отладочные макросы.
60. Unix TOOLS (grep, rm, chmod, mkdir, cat, ls, mv….)
8
Написать собственные реализации ряда стандартных юниксовых утилит.
61. reg.exp.; diff; переправление потока, find, fd, history, date
продолжение (60)
62. библиотека окон для текстового режима (mapci)
Написать оконную библиотеку стандартными средствами.
63. Движок Базы Данных
Написать движок базы данных с поддержкой SQL.
64. Куча, хэш – таблица, разделенное множество, другие структуры хранения данных
Написать библиотеку структур данных
65. Вычисление выражений (просто и с переменными)
Написать программу вычисления арифметических выражений.
Усложненный вариант – вычисление выражений с переменными.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
модель маятника (с гравитацией)
модель движения планет и спутников в солнечной системе
модели волновых процессов; струна; остывание; стержни
модели биологических процессов (жизнь, биологич. равновесие)
численное решение диф.ур.; интегралов.
построение поля изоклин
модель водной поверхности
модель - управление лодкой с обратной связью (задачи Теории Управления)
модель атомного реактора
расчет электрических схем (редактор электро-цепей)
редактор структур данных (абстрактный) (любая структура отдельно)
фракталы (2D, 3D)
каталогизатор (книг, дисков и т.д.)
почтовый клиент
архиватор
ftp клиент с архивацией
оконный telnet client
PGP кодер-декодер.
фильтрация изображений (распознавание)
решение тригонометрических уравнений (эвристические алгоритмы)
шрифты (редактирование, использование, TEX, TTF-шрифты)
9
Download