Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Придумать алгоритм для программы Тестовые вопросы (http://www.flasher.ru/forum/showthread.php?t=196812)

namespaces 30.03.2013 02:21

Придумать алгоритм для программы Тестовые вопросы
 
Какие алгоритмы знаете для создания Теста?
Например - имеем вопрос и 5 ответа, дается время 30 сек. на выбор правильного ответа.
Знаю что вариантов много, но не знаю с чего начать, куда копать.
Первое что приходит на ум, вопросы - ответы храним в XML и выводим рандомно.

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

Gaen 30.03.2013 03:39

С формулировкой "надо придумать качественный алгоритм" вам в вакансии (:

Что именно вам не понятно? Что вы пробовали делать, что не получилось?

Я бы начал с того, чтобы определиться с форматом и структурой данных.

С форматом по сути 3 варианта: XML, JSON и какой-нибудь свой велосипед. Я бы взял JSON.

Структура зависит от конкретики задачи. Как минимум, это массив вопросов, где каждый вопрос - это объект, содержащий текст вопроса, варианты ответов и информацию о том, какой (или какие) из них правильные. Вопросы опять же могут быть разных типов: выбрать 1 вариант, выбрать несколько вариантов, либо ввести ответ - строка либо число. Если должна быть возможность принимать строковые/числовые ответы, то сразу стоит задуматься о том, как вы будете их парсить, чтобы при правильном варианте "Вася" юзер мог ввести " вАся" и ему засчитался балл, или не засчитался, зависит от правил, по которым парсится ответ, и которые должны, по-хорошему, задаваться в описании правильного ответа.

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

Что конкретно вас интересует? Разбейте задачу на куски, ибо при такой постановке вариант "нужен алгоритм в целом" не покатит.

1600 get!

Александр Мостовой 30.03.2013 04:44

Мне кажется вас запугали более опытные коллеги и вы боитесь что-то сделать неправильно :)

namespaces 30.03.2013 07:51

Цитата:

Сообщение от Gaen (Сообщение 1127421)
С форматом по сути 3 варианта: XML, JSON и какой-нибудь свой велосипед. Я бы взял JSON.

Я тут подумал и насчет MySQL через AMFPHP, т.к. вопросов больше, около 1400. Программа для теста Правила дорожного движения, и конечно с иллюстрациями.
Думаю мускул для такого объема подойдет лучше всего.

Цитата:

Структура зависит от конкретики задачи. Как минимум, это массив вопросов,
От пользователя вводить что либо не потребуется, надо будет только нажимать на ответы.
Мне нужно просто понять, какие уровни добавить для пользователя:
Разделить 1400 вопросов по категориям, сделать 14 групп.
На каждую группу получает 10 баллов после правильных ответов, иначе -10. Итого после всех пройденных этапов получить 100 бал, и тест завершится с отметкой Пройден.

Цитата:

Сообщение от Александр Мостовой (Сообщение 1127426)
Мне кажется вас запугали более опытные коллеги и вы боитесь что-то сделать неправильно :)

Скорее всего так и есть :)

Александр Мостовой 30.03.2013 08:47

Имхо вы сейчас не можете определиться с многими ключевыми вопросами ТЗ:
- Нужно ли сохранять результаты в процессе тестирования или только по окначинии, - что будет происходить при закрытии страницы (можно ли продолжить тест, нужно ли что бы пользовтаель не мог зяглянуть в загружаемые данные (или насколько сложно было бы ему это сделать), должна ли быть логика проверки правильных ответов на сервере и.д.

У вас несколько вариантов:
1. Описать мокапы поведения приложения и утвердить их у заказчика. Но это работа ПМ и на практике заказчик в них вниакть просто не будет.
2. Потратив несколько часов сделать очень быструю прототипную версию с самым простым решением: просто исходный загруженный ХМЛ использовать как модель данных, в нем же хрнить ответы и его же отправлять как результат. С мыслю что потом эту поделку удалите и сделаете все заново. Это даст вам возможноть показать заказчику все недостатки простых решений, обговорить нюансы. Такой работающий черновик. Но в этом случае вам, возможно, будет сложно обяснить зачем вы сделали такую фигню и почему доработка почти работающего приложения занимает в 20 раз больше времени, чем уже написанное.
3. Сделать все на легко масштабируемой архитектуре с инкапсулировнными блоками, каждый из которых ничего не знает о мтодах реализации другого и допиливать усовершенствования и оптимизацию по мере разработки.

Думаю правильно было бы сделать все 3 варианта в порядке 2, 1, 3

namespaces 30.03.2013 10:29

Цитата:

Сообщение от Александр Мостовой (Сообщение 1127440)
Имхо вы сейчас не можете определиться с многими ключевыми вопросами ТЗ:
- Нужно ли сохранять результаты в процессе тестирования или только по окначинии, - что будет происходить при закрытии страницы (можно ли продолжить тест, нужно ли что бы пользовтаель не мог зяглянуть в загружаемые данные (или насколько сложно было бы ему это сделать), должна ли быть логика проверки правильных ответов на сервере и.д.

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

Цитата:

3. Сделать все на легко масштабируемой архитектуре с инкапсулировнными блоками, каждый из которых ничего не знает о мтодах реализации другого и допиливать усовершенствования и оптимизацию по мере разработки.
А можно по подробнее насчет архитектуры для подобных задач. Что вы предлагаете, юзать готовые фреймворки или пойти глубже и создать с нуля на чистом MVC, или на PureMVC?
Понимаю это уже отдельная тема, просто к слову спросил.

Александр Мостовой 30.03.2013 11:00

Цитата:

Что вы предлагаете, юзать готовые фреймворки или пойти глубже и создать с нуля на чистом MVC, или на PureMVC?
Я бы посоветывал немного отстраниться от того как правильней и от попыток получить рекомендацию, а решить самомому как вам практичнее организовать независимые блоки каждому из которых все-равно откуда другой блок получил данные: с сервера ли или из оперативки, или с sharedObject, асинхронно ли или синхронно, или сгенерерованные рэндомные заглушки. То насколько вы привыкли к тому или иному способу вполне весомый аргумент что бы делать именно так. и лучше выбрать тот вариант в котором уверены.

expl 31.03.2013 21:44

Цитата:

Какие алгоритмы знаете для создания Теста?
Алгоритм - это, например, сортировка методом Хора, или сжатие в png.
А здесь тупо:
- есть данные
- есть интерфейс пользователя
- есть логика
И никаких алгоритмов, фреймворков, и т.д. и т.п. тут не надо.
Надо перестать думать и начать писать код и рисовать UI

Единственный алгоритм, который Вы будете использовать - это парсинг XML, но он за Вас уже написан и не одну сотню раз специально обученными людьми.
JSON тоже написан и тоже не одну сотню раз, но использовать не советую - с escape-последовательностями будете напрягаться - основа данных текст всё-таки.

Цитата:

Но как указать правильные ответы, и как подгружать в основной массив для вывода и по завершению удалить старые?
Даже если вы "Войну и Мир" целиком загрузите в память - это будет даже компу 10-летней давности что слону дробина.
Грузите все вопросы сразу и держите в памяти постоянно - не придумывайте себе проблем.
Если пофиг на малолетних "хакеров" правильный ответ можно поменить прямо в xml:
Код:

<question>
    <text>Каково среднее расстояние от центра Земли до луны?</text>
    <answer>300 000 км</answer>
    <answer>4 000 000 км</answer>
    <answer correct = true>400 000 км</answer>
</question>

Правда, если вопросы будете писать не Вы - придется это делать в Excel (Как это не дико - дорогущая Excel стоит практически у всех и все в ней что-то делали, а сторонними бесплатными решениями Вы ни кого не сможете научить пользоваться, и тем более писать это в xml).
И делать генератор из xls в xml.
Хотя, на моём компе стоит какая-то незарегистрированная копия и кроме красного заголовка окна ничем не вредит - проблем с добычей Excel-я для тестирования генератора быть не должно
Можно еще в сторону Google-доков посмотреть, но я не знаю, есть ли там нормальный интерфейс к данным или конвертация в какой-нибудь разделённый табами текст

AlexCooper 01.04.2013 18:11

по-моему тему нужно перенести...

namespaces 04.04.2013 21:41

Вложений: 1
Цитата:

Сообщение от expl (Сообщение 1127669)
Единственный алгоритм, который Вы будете использовать - это парсинг XML,

Да я подумал лучше хранить в XML и разбить вопросы по категориям, чтобы при дальнейшем на загружать все вопросы пачками. Только при выборе категории загружать все его вопросы, и освобождать память после перехода на другой и т.д.

Цитата:

Если пофиг на малолетних "хакеров" правильный ответ можно поменить прямо в xml:
Код:

<question>
    <text>Каково среднее расстояние от центра Земли до луны?</text>
    <answer>300 000 км</answer>
    <answer>4 000 000 км</answer>
    <answer correct = true>400 000 км</answer>
</question>


Вы что видите мой комп? Оо
У меня именно такая же структура XML :) Для теста сейчас использую такой вид оформления вопросов.

Цитата:

Правда, если вопросы будете писать не Вы - придется это делать в Excel (Как это не дико - дорогущая Excel стоит практически у всех и все в ней что-то делали, а сторонними бесплатными решениями Вы ни кого не сможете научить пользоваться, и тем более писать это в xml).
И делать генератор из xls в xml.
Можно поподробнее, что вы имеете ввиду насчет Excel, и как будут потом импортироваться данные из Excel?

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

При нажатии на Ответить надо еще определить правильный ответ и вывести подробное описание ответа. В этом примере при переключении радиобаттона рассылается сообщение. Пока что так, какие еще могут быть варианты?

iflamberg 05.04.2013 00:09

Главный мой вопрос в таких задачах: а зачем?
js решает такую задачу на ура. Плюсы js:
+1 открывается на машинах без флеша
+2 открывается на мобильных устройствах низкого-среднего класса
+3 таблички статистики успеваемости, ошибок - делаем html'ем без каких-либо проблем, графики умеют рисовать куча php-либ

Я еще понимаю, AIR - устанавливаемое приложенеие у пользователя + порт на мобильные устройства.
Но на сайте, надо делать js безусловно.

namespaces 05.04.2013 00:18

Цитата:

Сообщение от iflamberg (Сообщение 1128320)
Главный мой вопрос в таких задачах: а зачем?
js решает такую задачу на ура.

Я знаю. Но изначально было решено сделать на флеш, т.к. кроме Теста будут еще и сложные анимации.
JS в этом плане сильно проигрывает по производительности флешу. Ну это уже отдельная тема.

namespaces 05.04.2013 00:53

Вложений: 1
Быстро накинул такую схему

expl 05.04.2013 03:11

Цитата:

Сообщение от namespaces (Сообщение 1128310)
Да я подумал лучше хранить в XML и разбить вопросы по категориям, чтобы при дальнейшем на загружать все вопросы пачками. Только при выборе категории загружать все его вопросы, и освобождать память после перехода на другой и т.д.

У Вас хотя бы 10 000 вопросов есть? Если нет, то при современном интернтете и объемах памяти даже не заморачивайтесь - грузите сразу и не выгружайте.
Однако если если есть картинки - можно сделать ссылки в xml - и грузить только при отображении вопроса, или блока вопросов.

Цитата:

Можно поподробнее, что вы имеете ввиду насчет Excel, и как будут потом импортироваться данные из Excel?
Это актуально только если ответственный за набор вопросов человек не хочет писать в xml. Иначе, спокойно получаем от него xml-ку и не создаём себе геморроя.

Если человек хочет Excel:

Самый тупой способ - это взять, экспортнуть таблицу с вопросами в coma-separated или tab-separated текст. Впринципе, разделённый табами текст и просто при вставке ячеек в блокнот получается.
Сохранить его в txt формате. А дальше читать прямо в as3 и парсить через split("\n")/split("\t")
Проблемы будут с переносами строк. С tab-separated-текстом я не знаю что делать - только заменять переносы на ^ в Excel.
Второй недостаток - надо копипастить или экспортировать вручную (выбирая в какое место сохранить txt-файл), а не просто нажать ctl-s и запустить генератор, кликнув по ярлыку батника в панели быстрого запуска или набрав комманду в постоянно висящей консоли.

Второй способ - генерация xml скриптом по содержимому ячеек, встроенным в Excel (VisualBasic)
Можно завернуть содержимое ячейки в <![CDATA[ ]]>, тогда переносы сохранятся.
Оооочень медленно. У нас справочник из 20 листов с от силы 100-ю записями на лист конвертился 10 минут(!)
Просто медленный доступ к ячейке.

Третий способ - конвертация с C# и библиотекой EPPlus.dll и ExcelLibrary.dll (ни через какие OLE и com'ы - иначе те же тормоза). Читает формат напрямую. Тот же справочник конвертился не за 10 минут а за 4 секунды. Поразбираться, конечно придётся, но это не сложнее, чем разобраться с VisualBasic.

Я не советую прямо всё бросать и писать генератор - лучшая работа та, которую не надо делать. Просто обрисовал расклад.

Котяра 05.04.2013 12:43

Для тестов есть стандарт SCORM.
Почитайте про него и лучше его и используйте, это поможет, если вдруг ваши тесты надо будет куда-нибудь интегрировать.


Часовой пояс GMT +4, время: 07:43.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2022, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.