Websoft

четверг, апреля 10, 2014

Перемешать, но не взбалтывать!

Однажды я уже приводил пример «Бессмысленной альтернативы множественному выбору». Акцент в статье был сделан на форме. Техническую особенность я упомянул только в комментариях к посту. Заключается она в том, что варианты ответов перемешиваются случайным образом каждый раз при открытии задания или клике на кнопке Отмена (или Сброс).
Предлагаю вашему вниманию пример задачки на перетаскивание блоков с текстом. Результат выполнения задания может выглядеть так:

Внимание! Описываю ТОЛЬКО перемешивание ТЕКСТОВЫХ вариантов СЛУЧАЙНЫМ образом в КурсЛаб.

Алгоритм перемешивания в общем виде:
  1. Создаем переменные с вариантами ответов (в имени должен присутствовать порядковый номер).
  2. Создаем столько же переменных для отображения на слайде.
  3. Перемешиваем первый набор переменных и последовательно передаем их значения во второй набор.
  4. Размещаем на слайде текстовые блоки, содержащие второй набор переменных.
Теперь по шагам…
Шаг 1.
В данном примере шесть вариантов. Создаю шесть переменных: v0, v1…v5. Почему нужны цифры, станет понятно далее. Второй набор переменных vv0, vv1…vv5 будет создан на следующем шаге. Переменные b1…b4 нужны для приема ответа.

Шаг 2.
Действие JAVASСRIPT.
Это самый загадочный для меня шаг т.к. ни одним языком программирования не владею :)
Нашел в и-нет несколько вариантов кода перемешивания массива.
Выбрал самый короткий и с примером.
В найденном примере заменил одну строку (на рис она выделена).

Исходный набор переменных представляется массивом [0, 1, …5] (для этого я и вставил в имена переменных цифры).
Найденная в и-нет функция ArrayShuffle(a) перемешивает этот массив случайным образом.
Далее в цикле последовательно создаются переменные второго набора и в них передаются значения переменных исходного набора перемешанного функцией.

Все готово!
Так как все это происходит Перед показом кадра больше ничего делать не надо. Кадр открывается каждый раз с перемешанным набором вариантов.
Если подобное перемешивание требуется только в этом задании, хорошо.
Если подобных заданий в модуле много, то можно Действие JAVASСRIPT оптимизировать.
Функцию ArrayShuffle можно вынести в файл module.js.

Тогда в Действии JAVASСRIPT останется:

То, что получилось можно попробовать здесь.
Проверял на IE9. Если в других браузерах не работает, я не виноват!

Вот что я понимаю под «перемешать».
Если надо взболтать, возьмите системный блок в руки и сильно потрясите.
Удачи!

2 комментария:

Анонимный комментирует...

Сергей Колков, как всегда на пике лучших решений!!!

Андрей Стулов

Сергей Колков комментирует...

Да ладно, Андрей, это брызги! Приезжай в гости, я тебе саму бутылку покажу :))