Give a multiple choice test I present to you a test! Your test is to test. The test is to test the testee with tests a tester gives you, in the shortest amount of code. Specifically, you will give a multiple choice test that you have recieved as input.

In this challenge, you must take an input like this:

1. Our site is called Programming Puzzles &amp; Code ________.
A: Debugging
*B: Golf
C: Hockey
D: Programming
2. What is the *most* popular tag on our site?
A: [debug]
B: [program]
*C: [code-golf]
D: [number]
E: [c++]
3. We are part of the ________ Exchange network.
*A: Stack
B: Code
C: Programmer
D: Hockey
4. Is this the first question?
A: Yes
*B: No
5. Is this the last question?
*A: Yes
B: No


And here is an example of the test being taken:

1. Our site is called Programming Puzzles &amp; Code ________.
A: Debugging
B: Golf
C: Hockey
D: Programming
answer: B
correct!

2. What is the *most* popular tag on our site?
A: [debug]
B: [program]
C: [code-golf]
D: [number]
E: [c++]
answer: C
correct!

3. We are part of the ________ Exchange network.
A: Stack
B: Code
C: Programmer
D: Hockey
answer: B
incorrect! the answer was A

4. Is this the first question?
A: Yes
B: No
answer: B
correct!

5. Is this the last question?
A: Yes
B: No
answer: B
incorrect! the answer was A

overview:
3 correct, 2 incorrect (60%)

3. We are part of the ________ Exchange network.
you chose B: Code
the answer was A: Stack

5. Is this the last question?
you chose B: No
the answer was A: Yes


Formal specification:


Input

If a line begins with a number followed by a dot and a space, it is a question with that number. Numbers will always start from 1 and go up 1 each question.
If a line begins with an optional asterisk, a letter, a colon, and then a space, it is an answer. Answers will also always be sequential. There will be only one correct answer per question.
A line will not begin in any other way than the previously mentioned ways.
Input may be accepted in any way (reading from a file, stdin, etc.) but must not be hardcoded into your program.

Output (test-taking phase)

First, print out each question sequentially. Print the question and its answers as recieved in input, but do not print the asterisk indicating correct answers.
Then, print a newline and "answer: ". Wait for user input. User input will always correspond to an answer.
If the correct answer (the one with an asterisk) is the same as the one the user input, output "correct!". Otherwise, output "incorrect! the answer was " + correct_letter.
Separate each question with a blank line, then repeat the previous output steps until there are no more questions.

Output (overview phase)

Print "overview: " and then a newline.
Print "{number of correct answers} correct, {incorrect answers} incorrect ({percent correct, rounded to the nearest whole number}%)" (of course substituting the phrases in curly braces with their respective values). Then print a blank line for spacing.
Now, for each question that was wrong, print the question (not its answers), then on a new line "you chose " + answer_you_chose, and on another line "the answer was " + correct_answer. Separate each wrong answer's overview with a blank line.

In order to reduce cheating by interpreting things literally, when given the same output here, and the same input in the test-taking phase, your program must output exactly the same thing as the sample output.


This is code-golf; shortest code wins! (And gets an A+ (green checkmark)!)
Mathematica 144
This may be an invalid attempt. I separated the question from each answer in the input. I also indicated the correct answer by a letter in a separate field, rather than an asterisk before the alternative.
Anyway...
The Data
questions={{{&quot;\n1. Our site is called Programming Puzzles &amp; Code ________.\n&quot;,&quot;A: Bugging\n&quot;,&quot;B: Golf\n&quot;,&quot;C: Hockey\n&quot;,&quot;D: Programming\n&quot;},&quot;B&quot;},{{&quot;\n2. What is the most popular tag on our site? \n&quot;,&quot;A: [debug]\n&quot;,&quot;B: [program]\n&quot;,&quot;C: [code golf]\n&quot;,&quot;D: [number]\n&quot;},&quot;C&quot;},{{&quot;\n3. We are part of the _______ Exchange network. \n&quot;,&quot;A: Stack\n&quot;,&quot;B: Code\n&quot;,&quot;C: Programmer\n&quot;,&quot;D: Hockey\n&quot;},&quot;A&quot;},{{&quot;\n4. Is this the first question? \n&quot;,&quot;A: Yes\n&quot;,&quot;B: No\n&quot;},&quot;B&quot;},{{&quot;\n5. Is this the last question? \n&quot;,&quot;A: Yes\n&quot;,&quot;B: No\n&quot;},&quot;A&quot;}};

Code
An answer to each question is entered through a dialog box.
Questions, answers, and feedback are printed.
f@x_:=
Print[If[((r=ChoiceDialog[Print[&quot;&quot;&lt;&gt;#,&quot;\nanswer: &quot;];&quot;&quot;&lt;&gt;#,StringTake[Rest@#,1]])==#2),
r&lt;&gt;&quot;\ncorrect!&quot;, r&lt;&gt;&quot;\nincorrect, the answer is &quot;&lt;&gt;#2]&amp;@@x] 

Test
f /@ questions