Eu apresento a você um teste! Seu teste é para testar. O teste é testar o testado com testes que um testador fornece, na quantidade de código do teste de curta duração . Especificamente, você fará um teste de múltipla escolha que você recebeu como entrada.
Neste desafio, você deve receber uma entrada como esta:
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
E aqui está um exemplo do teste sendo realizado:
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
Especificação formal:
- Entrada
- Se uma linha começa com um número seguido de um ponto e um espaço, é uma pergunta com esse número. Os números sempre começam de 1 e aumentam 1 em cada pergunta.
- Se uma linha começa com um asterisco opcional, uma letra, dois pontos e depois um espaço, é uma resposta. As respostas também serão sempre seqüenciais. Haverá apenas uma resposta correta por pergunta.
- Uma linha não começará de nenhuma outra maneira além das maneiras mencionadas anteriormente.
- A entrada pode ser aceita de qualquer forma (leitura de um arquivo, stdin, etc.), mas não deve ser codificada no seu programa.
- Saída (fase de realização do teste)
- Primeiro, imprima cada pergunta sequencialmente. Imprima a pergunta e suas respostas como recebidas na entrada, mas não imprima o asterisco indicando respostas corretas.
- Em seguida, imprima uma nova linha e
"answer: "
. Aguarde a entrada do usuário. A entrada do usuário sempre corresponderá a uma resposta. - Se a resposta correta (aquela com um asterisco) for a mesma que a entrada do usuário, emita
"correct!"
. Caso contrário, saída"incorrect! the answer was " + correct_letter
. - Separe cada pergunta com uma linha em branco e repita as etapas de saída anteriores até que não haja mais perguntas.
- Saída (fase de síntese)
- Imprima
"overview: "
e depois uma nova linha. - Imprimir
"{number of correct answers} correct, {incorrect answers} incorrect ({percent correct, rounded to the nearest whole number}%)"
(é claro, substituindo as frases entre chaves com seus respectivos valores). Em seguida, imprima uma linha em branco para espaçamento. - Agora, para cada pergunta que estava errada, imprima a pergunta (não suas respostas), depois em uma nova linha
"you chose " + answer_you_chose
e em outra linha"the answer was " + correct_answer
. Separe a visão geral de cada resposta errada com uma linha em branco.
- Imprima
- Para reduzir a trapaça interpretando as coisas literalmente, quando é fornecida a mesma saída aqui e a mesma entrada na fase de teste, seu programa deve produzir exatamente a mesma coisa que a saída de amostra.
Isso é código-golfe ; o menor código vence! (E recebe um A + (marca de seleção verde)!)
\d\.
,\w:
e\*
no meio de perguntas / respostas. (Por exemplo, actualmente o*
pode ser eliminado comy/*//
, enquanto a forma correcta é moroso comos/^\*//
.)Respostas:
Perl 5, 279
Nota: As novas linhas são necessárias para a formatação da saída.
Toda vez que penso que não posso mais jogar golfe, aprendo algo novo! Está lentamente se tornando mais pontuação do que texto legível ... Acho que é uma coisa boa?
Uso:
perl -e '...' test.txt
ouperl test.pl test.txt
.Se você escolher uma opção não apresentada na lista, obterá uma saída incorreta na visão geral (
you chose: 1. Our site is called Programming Puzzles & Code ________.
por exemplo).Exemplo de execução
fonte
Mathematica 144
Esta pode ser uma tentativa inválida. Separei a pergunta de cada resposta na entrada. Também indiquei a resposta correta por uma carta em um campo separado, em vez de um asterisco antes da alternativa.
De qualquer forma...
Os dados
Código
Uma resposta para cada pergunta é inserida através de uma caixa de diálogo. Perguntas, respostas e comentários são impressos.
Teste
fonte
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[...]
vez dePrint[If[...]]
.Java - 1210
formatado: 1980
Isso certamente não será o mais curto, mas é tudo independente
fonte
Haskell, 598
Muito mais tempo do que eu gostaria. Está definido wiki, então tenha nisso!
Infelizmente, perdemos 32 caracteres para o stdout de descarga. Outros 38 caracteres poderiam ser salvos se o script de teste fosse lido de um arquivo fixo chamado "t" em vez de especificado na linha de comando.
Quando executado na entrada fornecida na pergunta:
fonte