0

このブルートフォースアプローチを理解するのに苦労しています。私はPerlを使用して質問とその選択肢を抽出しています。現在、すべての質問は配列内に格納されています。答えをどうしたらいいのかわかりません。

回答を保存してコードを整理し、これと同様のことを行うにはどうすればよいですか...

  1. 質問の最初のオプションを選択します。(したがって、1つ合格すると、すべての質問でオプションAが選択されている必要があります)。

  2. 送信して正解を確認してください。

  3. 答えを解析します。与えられた答えが正しかった場合は、それを「正解」としてマークし、その質問に対して他の選択肢を選択しようとするのを忘れます。

    それ以外の場合は、次のパスでその質問の回答のリストを続行します。

したがって、次のパスでは、その質問に対する2番目の回答が選択されます。複数の送信が行われた後、ブルートフォースによってすべての「正しい」回答が見つかるまでです。

回答を保存して質問に関連付ける方法、間違っているのでそれらを消す方法、または「見つかった」というタグを付ける方法に問題があります。

ハッシュを使うことを考えていました。コードをどのように構成するかについての提案を教えてください。

ありがとう!

編集

サンプルデータ -

だから私はHASHメソッドを使用しています...私のハッシュは次のようになります:

ハッシュから出力します:

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

今、私はその質問に対する正しい答えを見つけるまで、各オプションを通過する方法を見つけなければなりません。

編集

何かを明確にするために、10個の質問のプールがあると仮定しましょう。ユーザーが「BeginPractice」をクリックすると、10個のプールから4つのランダムな質問が生成されます。したがって、この現在の状態では、4つの質問とその回答があります。私はこれらの質問とその回答をデータ構造に追加します(下から1つ...またはファイルを使用してそれらを保存します)。次に答えを選びます。次に、ユーザーはレビューのためにこれらの質問を送信する必要があります。送信ボタンを押すと、質問xが正しいか間違っているかを示すプロンプトが表示されます。これに基づいて、データ構造を更新する必要があります。これは、その質問に対する正解です。

今度はすすぎ、繰り返します。今回は、同じプールからさらに4セットのランダムな質問が生成されます。今回は、2つの新しい質問が見つかったため、これらをデータ構造に追加する必要があります。同様のロジックを使用して、答えを見つける必要があります。また、各回答オプション(選択)には常に一意の数値が付加されているため、サーバーはその値で回答IDを確認できます。私のサーバー側では、各質問にはIDがあり、それに関連付けられた正解があります。私のテーブルを使用すると、この実験の目的が無効になります。

何が起こっているのかを視覚的に確認します。

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

ほら、今このパスで2つの新しい質問が生じました。これらの人にとっては最初のオプションを選択する必要がありますが、繰り返されるオプションについては、正しい答えがすでに見つかっていない限り、次のオプションを選択する必要があります。

したがって、これはサーバーに送信されます。

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

サーバーは次のように応答します。

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

応答についても同じように扱います。これが本当に物事をクリアすることを願っています。また、各回答には常に一意の数値が付加されることに注意してください。

4

3 に答える 3

1

複雑なデータを格納するための構造が必要だと思います。私はこのようなことを提案するかもしれません。

{ 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 => {}
}
于 2011-10-31T18:21:01.877 に答える
1

正しい答えと考えられるすべてのオプションを各質問に関連付けます。

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;
于 2011-10-31T18:26:25.307 に答える
0

他の答えはOKですが、1つ追加します...

プロービングプロセスの「状態」または「フラグ」を表す場合は、次のようにデータ構造にフィールドを追加するだけです。

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のコード例を参照してください。

于 2011-10-31T18:53:09.610 に答える