Je vous présente un test! Votre test est de tester. Le test est de tester la testee avec les tests d' un testeur vous donne, dans le Shor test de quantité de code. Plus précisément, vous effectuerez un test à choix multiples que vous avez reçu en entrée.
Dans ce défi, vous devez prendre une entrée comme celle-ci:
1. Our site is called Programming Puzzles & 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
Et voici un exemple du test effectué:
1. Our site is called Programming Puzzles & 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
Spécification formelle:
- Contribution
- Si une ligne commence par un nombre suivi d'un point et d'un espace, c'est une question avec ce nombre. Les nombres commenceront toujours par 1 et monteront 1 à chaque question.
- Si une ligne commence par un astérisque facultatif, une lettre, un deux-points, puis un espace, c'est une réponse. Les réponses seront également toujours séquentielles. Il n'y aura qu'une seule bonne réponse par question.
- Une ligne ne commencera pas autrement que par les voies mentionnées précédemment.
- L'entrée peut être acceptée de n'importe quelle manière (lecture à partir d'un fichier, stdin, etc.) mais ne doit pas être codée en dur dans votre programme.
- Sortie (phase de test)
- Tout d'abord, imprimez chaque question séquentiellement. Imprimez la question et ses réponses telles qu'elles ont été reçues en entrée, mais n'imprimez pas l'astérisque indiquant les bonnes réponses.
- Ensuite, imprimez une nouvelle ligne et
"answer: "
. Attendez l'entrée de l'utilisateur. L'entrée utilisateur correspondra toujours à une réponse. - Si la bonne réponse (celle avec un astérisque) est la même que celle entrée par l'utilisateur, sortez
"correct!"
. Sinon, sortez"incorrect! the answer was " + correct_letter
. - Séparez chaque question par une ligne vierge, puis répétez les étapes de sortie précédentes jusqu'à ce qu'il n'y ait plus de questions.
- Sortie (phase de présentation)
- Imprimez
"overview: "
puis une nouvelle ligne. - Imprimer
"{number of correct answers} correct, {incorrect answers} incorrect ({percent correct, rounded to the nearest whole number}%)"
(en remplaçant bien sûr les phrases entre accolades par leurs valeurs respectives). Imprimez ensuite une ligne vierge pour l'espacement. - Maintenant, pour chaque question erronée, imprimez la question (pas ses réponses), puis sur une nouvelle ligne
"you chose " + answer_you_chose
et sur une autre ligne"the answer was " + correct_answer
. Séparez l'aperçu de chaque mauvaise réponse par une ligne vierge.
- Imprimez
- Afin de réduire la tricherie en interprétant les choses littéralement, lorsque la même sortie est donnée ici et la même entrée dans la phase de test, votre programme doit produire exactement la même chose que la sortie d'échantillon.
C'est du code-golf ; le code le plus court gagne! (Et obtient un A + (coche verte)!)
\d\.
,\w:
et\*
au milieu des questions / réponses. (Par exemple, actuellement, le*
peut être éliminé avecy/*//
, tandis que le bon chemin est long commes/^\*//
.)Réponses:
Perl 5, 279
Remarque: Les retours à la ligne sont requis pour le formatage de sortie.
Chaque fois que je pense que je ne peux plus jouer au golf, j'apprends quelque chose de nouveau! Il devient lentement plus de ponctuation que le texte lisible ... Je pense que c'est une bonne chose?
Utilisation:
perl -e '...' test.txt
ouperl test.pl test.txt
.Si vous choisissez une option non présentée dans la liste, vous obtiendrez une sortie incorrecte dans l'aperçu (on dira
you chose: 1. Our site is called Programming Puzzles & Code ________.
par exemple).Exemple d'exécution
la source
Mathematica 144
Cela peut être une tentative non valide. J'ai séparé la question de chaque réponse dans l'entrée. J'ai également indiqué la bonne réponse par une lettre dans un champ séparé, plutôt que par un astérisque avant l'alternative.
En tous cas...
Les données
Code
Une réponse à chaque question est entrée via une boîte de dialogue. Les questions, réponses et commentaires sont imprimés.
Tester
la source
g@{a_,b_}:=Print[If[(r=ChoiceDialog[Print[""<>a,"\nanswer: "];""<>a,Rest@a~StringTake~1])==b,r<>"\ncorrect!",r<>"\nincorrect, the answer is "<>b]]
Print@If[...]
plutôt quePrint[If[...]]
.Java - 1210
formaté: 1980
Ce ne sera certainement pas le plus court mais tout est autonome
la source
Haskell, 598
Bien plus longtemps que je ne le souhaiterais. C'est un wiki défini alors ayez-le!
Hélas, nous perdons 32 caractères à la sortie de la sortie standard. 38 autres caractères pourraient être enregistrés si le script de test était lu à partir d'un fichier fixe nommé "t" plutôt que spécifié sur la ligne de commande.
Lorsqu'il est exécuté sur l'entrée donnée dans la question:
la source