Как использовать грубую силу для решения и хранения решений вопросов с множественным выбором? - PullRequest
0 голосов
/ 31 октября 2011

У меня возникли проблемы с пониманием этого подхода грубой силы. Я использую Perl для извлечения вопросов и их выбора. Все вопросы сейчас хранятся в массиве. Я не уверен, что делать с ответами.

Как мне хранить ответы и систематизировать мой код, чтобы он делал что-то похожее на это ...

  1. Выберите первый вариант для вопроса. (Итак, передайте один, для всех вопросов должен быть выбран вариант А).

  2. Подтвердите, чтобы проверить правильность ответов.

  3. Разберите ответы, если данный ответ был правильным, отметьте это как "правильный" ответ и забудьте попытаться выбрать любой другой вариант ответа на этот вопрос.

    В противном случае продолжите список ответов на этот вопрос на следующем проходе.

Таким образом, следующий проход выберет второй ответ на этот вопрос, пока после нескольких отправок не найдет все «правильные» ответы с помощью грубой силы.

У меня возникают проблемы с тем, как хранить ответы и связывать их с вопросом, вычеркивать их, как они неправильные, или отмечать его как "найденный".

Я думал об использовании хэша. Пожалуйста, дайте мне знать, как я должен структурировать код.

Спасибо!

EDIT

Пример данных -

Итак, я использую метод HASH ... мой хеш выглядит примерно так:

распечатать из хэша:

question_123 => a,b,c,d
question_155 => a,b,c
question_234 => T,F

Теперь мне нужно найти способ пройти каждую опцию, пока я не найду правильный ответ на этот вопрос.

EDIT

Чтобы уточнить кое-что, давайте предположим, что есть пул из 10 вопросов. Пользователь нажимает «Начать практику», которая генерирует 4 случайных вопроса из пула из 10. Таким образом, в текущем состоянии у меня есть четыре вопроса с ответами. Я прохожу и добавляю эти вопросы и их ответы в структуру данных (один из них ниже ... или использую файлы для их хранения). Затем я выбираю ответ. Затем пользователь должен отправить эти вопросы на рассмотрение. После нажатия кнопки «Отправить» в подсказке указывается, правильно ли задан вопрос x. Исходя из этого, структура данных должна обновляться, что является правильным ответом на этот вопрос.

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

Визуализация происходящего:

Pass One -- 4/10 Random Questions

1. Who is the US president?
21. Barrak
22. Chap
23. Jim
24. Nivea

2. How many states are there?
25. 99
26. 90
27. 51

3. What is the color of the sky?
28. blue
29. black
30. none

4. Is time relative?
31. False
32. True

Итак, на первом проходе выборы должны быть такими:

1 => a - 21
2 => a - 99
3 => a - 28
4 => False - 31

Нажмите кнопку отправки. Сервер отвечает:

1. Correct
2. Incorrect
3. Correct
4. Incorrect

Теперь обновите структуры данных, найдя правильный ответ.

Программа теперь запрашивает новый набор вопросов в приглашении. На этот раз сервер возвращает:

Pass Two -- 4/10 Random Questions

4. Is time relative?
31. False
32. True

6. What is not a plant?
65. Cow
66. Rose
67. Tree

1. Who is the US president?
21. Barrack
22. Chap
23. Jim
24. Nivea

8. What is a programming language?
99. C++
100. Tylenol
101. Mr.Monster

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

Итак, это будет отправлено на сервер:

4. True - 32
6. Cow - 65
1. Barrack - 21
8. C++ - 99

Сервер отвечает:

4. Correct
6. Correct
1. Correct
8. Correct

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

Ответы [ 3 ]

1 голос
/ 31 октября 2011

Свяжите правильный ответ и все возможные варианты для каждого вопроса:

my %question = (

    question_123 => {
                      options => [ 'a', 'b', 'c', 'd' ],
                      answer  => 'b',
                    },
    question_155 => {
                      options => [ 'a', 'b', 'c' ],
                      answer  => 'b',
                    },
    question_234 => {
                      options => [ 'T', 'F' ],
                      answer  => 'F',
                    },
);

Затем прокрутите варианты с помощью простого сценария:

my %answers;
QUESTION: foreach my $q ( keys %question ) {        # Loop over questions

    for my $option ( @{ $questions{$q}{options} } ) { # Try different options

        $answers{$q} = $option;
        next QUESTION if $option eq $questions{$q}{answer}; # Move on if correct
    }
}

# Print the answers
print "$_ : $answers{$_}\n" foreach sort keys %answers;
1 голос
/ 31 октября 2011

Я думаю, вам нужна структура для хранения сложных данных.Я мог бы предложить что-то вроде этого.

{ question => 'Of the Marx Brothers who appeared on screen, who is reputed '
            . 'to have evoked resentment for being the funniest offscreen?'
, answers => 
    { A => 'Groucho' 
    , B => 'Chico'
    , C => 'Harpo'
    , D => 'Zeppo'
    }
, answer       => 'D'
, user_guessed => {}
}
0 голосов
/ 31 октября 2011

Другие ответы в порядке, но я добавлю один ...

Если вы хотите представить некоторые "состояния" или "флаги" для процесса исследования, вы можете просто добавить больше полей в свои структуры данных, например так:

my @questions = (
    {
        text => '2 x 2?',
        answers => [
            {
                text => '2',
                tried => False,
            },
            {
                text => '3',
                tried => True,
                correct => False,
            },
            {
                text => '4',
                tried => False,
            },
        ],
    },
    ...
);

Основы обработки вложенных структур данных в Perl см. в примерах кода в http://perldoc.perl.org/perldsc.html

...