2011-10-31 92 views
0

我在理解这个蛮力方法时遇到了一些麻烦。我使用Perl来提取问题和他们的选择。现在所有的问题都存储在一个数组中。我不确定如何处理答案。如何使用暴力解决和存储解决方案的选择题?

我应该如何保存答案,并组织我的代码,以便它类似于这样......

  1. 选择问题的第一选择。 (所以通过一个,所有的问题都应该有选项A)。

  2. 提交以检查正确的答案。

  3. 解析答案,如果给定的答案是正确的,那么标记为“正确”的答案,并忘记试图为该问题选择任何其他选择。

    否则,请在下一个通行证中继续通过该问题的答案列表。

所以下一次会选择对这个问题的第二个答案,直到多次提交它通过蛮力找到所有的“正确”的答案后。

我遇到了麻烦,如何存储答案并将它们与问题相关联,如果它们错误或将其标记为“找到”,则将它们交叉关闭。

我在想使用散列。请让我知道我应该如何构建代码的任何建议。

谢谢!

编辑

样本数据 -

所以我使用的是HASH方法......我的哈希看起来是这样的:

打印出来的哈希:

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

现在我必须找到一种方法来检查每个选项,直到找到正确答案为止。

编辑

为了澄清出头让我们假设有10个问题的池。用户点击“开始练习”,该练习从10个池中生成4个随机问题。因此,在这个当前状态下,我有四个问题与他们的答案。我通过并将这些问题及其答案添加到数据结构(从下面的一个或使用文件存储它们)。接下来我要选择一个答案。然后用户必须提交这些问题以供审查。一旦提交按钮被击中,提示说如果问题x是正确的或不正确的。基于此,数据结构必须更新哪个是该问题的正确答案。

现在要冲洗并重复。这次又从同一个池中生成另外四组随机问题。这一次发现了两个新问题,因此必须将这些问题添加到数据结构中。应该使用类似的逻辑来找到答案。此外,每个答案选项(选择)始终都有一个唯一的数字值,因此我的服务器可以使用该值检查答案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 

看到了,现在在这个过程中出现了两个新问题。对于这些人,必须选择第一个选项,但对于重复的选项,除非已经找到正确的答案,否则应该选择下一个选项。

因此,这将被发送到服务器:

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

同样处理与回应:

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

服务器响应。希望这真的可以解决问题。还要注意,每个答案都会附带一个唯一的数字值。

+0

到目前为止,我有了所有的问题一个数组。我正在考虑为该数组的每个元素创建一个新数组来存储问题,但是这不仅仅是使用散列? – user791953

+0

如果你使用散列,它将是一个散列。如果没有真正了解更多关于您的数据的信息,很难说出最好的。示例输入? – TLP

+0

好的我将使用编辑。 – user791953

回答

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; 
+0

我认为问题是他必须立即做出选择。所以他无法一一测试。 – TLP

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 => {} 
} 
0

其他answes都OK,但我将会添加一个...

如果您想要为探测过程表示一些“状态”或“标志”,您可以简单地添加更多的字段到你的数据结构,像这样:

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