2011-10-31 27 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