Викиучебник:Проект:Задачник
Цели
правитьУ проекта несколько целей. Во-первых — создание свободной базы по самым разным задачам. Идея возникла в связи с математическими задачами олимпиадного (или кружкового) типа, но искусственно ограничиваться только ими было бы странно. В некотором смысле, мы делаем свободный аналог проектов типа http://problems.ru/ или http://braingames.ru.
Однако, это не все. Подобная база, безусловно, имеет свою ценность, но вики-среда предоставляет нам много дополнительных возможностей по ее использованию. Например, можно создавать тематические страницы, группировать задачи по тем или иным (нетривиальным) критериям, писать специальные задачники для разных целей и т. д.
Реализация
правитьБаза данных довольно далека от концепции вики сама по себе. С другой стороны, движок MediaWiki достаточно гибок и имеет много полезным возможностей. Планируется следующая концепция:
Новая задача добавляется пользователем на страницу Задачник/Новые задачи и оформляется неким стандартизованным, но простым способом. Ежедневно специальный бот (его еще предстоит написать) раскидывает новые задачи с этой страницы таким образом, что каждая задача получает свой уникальный номер и попадает на отдельную страницу Задача:NNNN. (Пространство имен Задача еще не создано. Временно вместо него можно пользоваться подстраницами страницы Задачник.) На странице Задача:NNNN происходит вызов шаблона
и передача ему всех данных о задаче таким образом, чтобы они не смешивались и допускали автоматическую обработку. (Это — аналог записи в реляционной базе данных.)
При просмотре страницы Задача:NNNN отображается вся доступная информация по задаче. (Решение может быть скрыто с помощью javascript-hider'а.) При включении (трансклуде) задачи в другую страницу (через {{Задача:NNNN}}) по умолчанию отображается только условие и ссылка на полную версию. (См. proof of concept на User:Ilya Voyager/Песочница).
Планируется сделать достаточно много полей-метаданных (класс, сложность и т. д.) Они помогут нам при категоризации задач и последующем отборе. К сожалению, встроенные возможности MediaWiki по части обработки категорий достаточно слабы (например, нет инструмента пересечения категорий, невозможно построить список всех задач (с текстами) из данной категории и т. д.), но мы сможем впоследствии реализовать все, что нам нужно, с помощью внешних инструментов (либо написав или найдя необходимые extensions к MediaWiki). В настоящий момент, главное — это подготовить базовую инфраструктуру для сбора задач, вместе со всеми необходимыми метаданными в формате, пригодном для автоматической обработки.
Примеры
правитьВключение условия задачи
правитьЗадача (класс: 7, сложность: 4, автор: тестовый автор). Доказать, что при любом натуральном n и положительном a справедливо неравенство:
Условие с номером
правитьЗадача 42 (класс: 7, сложность: 4, автор: тестовый автор). Доказать, что при любом натуральном n и положительном a справедливо неравенство:
Условие с решением
правитьЗадача (класс: 7, сложность: 4, автор: тестовый автор). Доказать, что при любом натуральном n и положительном a справедливо неравенство:
Решение: Через бином Ньютона
,
поскольку (один элемент из n можно выбрать n способами).
С помощью математической индукции
1. База индукции. При n=1 утверждение очевидно верно.
2. Индукционный переход.
Комментарии
Хорошая простая «вычислительная» задача на мат. индукцию.
Обсуждение
правитьComments are welcome. Ilya Voyager 21:18, 28 января 2008 (UTC)
- Вначале, пока задач будет сравнительно мало, для поиска вполне достаточно будет работы с категориями. Реализация поиска внешними средствами -- это уже следующий этап работы. Xtr 08:11, 29 января 2008 (UTC)
- Не совсем понятно, как будут обрабатывться задачи-"синонимы" (гномики вместо рыбок и т.п.), а также разные решения одной и той же задачи. Xtr 08:11, 29 января 2008 (UTC)
- Разные решения одной задачи можно просто вписывать в графу "решения" как подразделы, с этим проблем нет. В принципе, так же можно поступать и с разными решениями -- просто завести подраздел "альтернативные формулировки условия", завернув его в noinclude. (Было бы хорошо, если бы можно было передавать трансклудам параметры... Чтобы, скажем, выбрать одно из альтернативных условий... Но я не уверен, что движок это позволяет -- надо поэкспериментировать.) Если их будет слишком много, можно а) завернуть в hider, б) вынести на подстраницу и дать ссылку. Можно сказать, что с этим проблем нет. Ilya Voyager 10:03, 29 января 2008 (UTC)
- Вопрос не совсем в этом. Представь ситуацию: были созданы две разные страницы с задачами-синонимами. Кто-то из участников это заметил и хочет их объединить. Как это будет реализовано? Хотим ли мы как-то автоматизировать этот процесс? (Наверное, очевидный ответ: пока нет. Но все же...) Xtr 11:23, 29 января 2008 (UTC)
- Нет, автоматизировать (пока) не хотим. Ctrl+C/Ctrl+V — не самая сложная операция :) Вариант: просто поставить шаблон «эта задача является аналогом задачи номер такой-то». И пусть бот отслеживает такие шаблоны и ставит шаблоны в обратную сторону автоматически. Ilya Voyager 11:53, 29 января 2008 (UTC)
- Вопрос не совсем в этом. Представь ситуацию: были созданы две разные страницы с задачами-синонимами. Кто-то из участников это заметил и хочет их объединить. Как это будет реализовано? Хотим ли мы как-то автоматизировать этот процесс? (Наверное, очевидный ответ: пока нет. Но все же...) Xtr 11:23, 29 января 2008 (UTC)
- Разные решения одной задачи можно просто вписывать в графу "решения" как подразделы, с этим проблем нет. В принципе, так же можно поступать и с разными решениями -- просто завести подраздел "альтернативные формулировки условия", завернув его в noinclude. (Было бы хорошо, если бы можно было передавать трансклудам параметры... Чтобы, скажем, выбрать одно из альтернативных условий... Но я не уверен, что движок это позволяет -- надо поэкспериментировать.) Если их будет слишком много, можно а) завернуть в hider, б) вынести на подстраницу и дать ссылку. Можно сказать, что с этим проблем нет. Ilya Voyager 10:03, 29 января 2008 (UTC)
- По всей видимости в ходе развития проекта это будет урегулировано: часто предпочтительнее давать условие задачи и ответ без решения (как во многих сборниках задач).--Hoborg 18:12, 20 февраля 2008 (UTC)