객관식 시험 제공


14

나는 당신에게 시험을 선물합니다! 당신의 시험은 시험하는 것입니다. 테스트는 쇼어의에서, 테스터는 당신을 제공합니다 테스트와 진찰을 테스트하는 테스트 코드의 양. 구체적으로, 입력으로받은 객관식 시험을 제공합니다.

이 과제에서는 다음과 같이 입력해야합니다.

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

다음은 테스트의 예입니다.

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

공식 사양 :

  • 입력
    • 줄이 숫자로 시작하고 그 뒤에 점과 공백이 있으면 그 숫자에 대한 질문입니다. 숫자는 항상 1에서 시작하여 각 질문마다 1 씩 올라갑니다.
    • 줄이 선택적인 별표, 문자, 콜론 및 공백으로 시작하면 대답입니다. 답변은 항상 순차적입니다. 질문 당 하나의 정답 만 있습니다.
    • 이전에 언급 된 방법 이외의 다른 방식으로는 행이 시작되지 않습니다.
    • 입력은 어떤 방식 으로든 (파일, stdin 등에서 읽음) 받아 들여질 수 있지만 프로그램에 하드 코딩되어서는 안됩니다.
  • 출력 (시험 촬영 단계)
    • 먼저 각 질문을 순차적으로 인쇄하십시오. 입력 된 질문과 답변을 인쇄하되 정답을 나타내는 별표는 인쇄하지 마십시오.
    • 그런 다음 줄 바꿈을 인쇄하십시오 "answer: ". 사용자 입력을 기다립니다. 사용자 입력은 항상 답변에 해당합니다.
    • 정답 (별표가있는 답변)이 사용자가 입력 한 답변과 동일한 경우 output "correct!". 그렇지 않으면을 출력하십시오 "incorrect! the answer was " + correct_letter.
    • 각 질문을 빈 줄로 분리 한 다음 더 이상 질문이 없을 때까지 이전 출력 단계를 반복하십시오.
  • 출력 (개요 단계)
    • "overview: "줄 바꿈을 인쇄 한 다음
    • 인쇄 "{number of correct answers} correct, {incorrect answers} incorrect ({percent correct, rounded to the nearest whole number}%)"(물론 중괄호로 문구를 각각의 값으로 대체). 그런 다음 공백을 위해 빈 줄을 인쇄하십시오.
    • 이제 잘못된 각 질문에 대해 (답이 아닌) 질문을 인쇄 한 다음 새 줄 "you chose " + answer_you_chose과 다른 줄에 인쇄하십시오 "the answer was " + correct_answer. 각 오답의 개요를 빈 줄로 분리하십시오.
  • 테스트 출력 단계에서 동일한 출력과 동일한 입력이 주어지면 문자 그대로 해석하여 부정 행위를 줄이려면 프로그램이 샘플 출력과 정확히 동일한 결과를 출력해야합니다.

이것은 . 최단 코드 승리! (그리고 A + (녹색 확인 표시)를 얻습니다!)


2
멋진 도전,하지만 샘플 테스트가 같은 가능성이 까다로운 상황을 포함 할 \d\. , \w: \*질문 / 답변의 중간에. (예를 들어, 현재는을 (를) 사용하여 *제거 할 수 있으며 y/*//올바른 방법은 길이가 s/^\*//
깁니다

2
줄 연속을 허용해야합니까? “1로 시작하지 않는 줄이있을 것입니다. "또는"A : "? 그렇다면, 그러한 경우를 샘플 테스트에 포함 시키십시오.
manatwork

@manatwork (첫 번째 코멘트) 좋아, 편집 (두 번째 코멘트) 아니오, 그렇지 않습니다. 나는 명확히 할 것이다.
Doorknob

1
이 테스트 테스트는 어떻게 진행할 예정입니까?
Joe Z.

2
@JoeZ. 음 ... 무슨 뜻인지 모르겠습니다 ... 테스터를 테스트하기위한 테스트 테스트 케이스를 제공했습니다
Doorknob

답변:


2

펄 5, 279

$y=correct;@w=(the,$n=answer,was);map{s/^\*((.+?):.+)/$a=$1/me;print"$_$n: ";chop($@=<>);print$@eq($l=$2)?++$d&&"$y!

":(/^\d.+/,$o.=$&,/^$@.+/m,$o.="
you chose: $&
@w $a

")&&"in$y! @w $l

"}@_=split/(?=^\d)/m,join"",<>;printf"overview:
$d $y, %d in$y (%d%)

$o",@_-$d,$d/@_*100

참고 : 출력 형식에는 줄 바꿈이 필요합니다.

더 이상 골프를 칠 수 없다고 생각할 때마다 새로운 것을 배웁니다! 읽기 쉬운 텍스트보다 점점 문장 부호가 커지고 있습니다. 좋은 생각이라고 생각하십니까?

사용법 : perl -e '...' test.txt또는 perl test.pl test.txt.

목록에없는 옵션을 선택하면 개요에 잘못된 출력이 표시됩니다 (예 you chose: 1. Our site is called Programming Puzzles & Code ________.를 들어).

예제 실행


입력 및 출력의 예를 친절하게 보여주십시오.
DavidC

@DavidCarraher를 통해 출력하도록 업데이트 된 링크를 추가 showterm.io . 터미널에서와 정확히 동일하게 캡처하지는 않지만 정적 출력보다 약간 더 좋을 것이라고 생각했습니다.
Dom Hastings

이는 프로그램 작동 방식을 상당히 잘 보여줍니다.
DavidC

3

매스 매 티카 144

잘못된 시도 일 수 있습니다. 입력의 각 답변에서 질문을 분리했습니다. 또한 대안 앞에 별표가 아닌 별도의 필드에 문자로 정답을 표시했습니다.

어쨌든...

자료

questions={{{"\n1. Our site is called Programming Puzzles & Code ________.\n","A: Bugging\n","B: Golf\n","C: Hockey\n","D: Programming\n"},"B"},{{"\n2. What is the most popular tag on our site? \n","A: [debug]\n","B: [program]\n","C: [code golf]\n","D: [number]\n"},"C"},{{"\n3. We are part of the _______ Exchange network. \n","A: Stack\n","B: Code\n","C: Programmer\n","D: Hockey\n"},"A"},{{"\n4. Is this the first question? \n","A: Yes\n","B: No\n"},"B"},{{"\n5. Is this the last question? \n","A: Yes\n","B: No\n"},"A"}};

암호

각 질문에 대한 답변은 대화 상자를 통해 입력됩니다. 질문, 답변 및 피드백이 인쇄됩니다.

f@x_:=
Print[If[((r=ChoiceDialog[Print[""<>#,"\nanswer: "];""<>#,StringTake[Rest@#,1]])==#2),
r<>"\ncorrect!", r<>"\nincorrect, the answer is "<>#2]&@@x] 

테스트

f /@ questions

대화 상자 선택


와우, 인상적! 입력은 올바른 형식이 아닙니다 ... 여전히 코드의 간결함과 그 정도에 대해 매우 주목할 만합니다!
손잡이

감사. 입력 문자열을 Mathematica 친화적 인 구조로 마사지하는 것은 물론 가능하지만 현재의 부적합한 솔루션의 기본 요소 인 우아함을 숨겼을 것입니다.
DavidC

좋은. 4 자 짧음 :g@{a_,b_}:=Print[If[(r=ChoiceDialog[Print[""<>a,"\nanswer: "];""<>a,Rest@a~StringTake~1])==b,r<>"\ncorrect!",r<>"\nincorrect, the answer is "<>b]]
Mr.Wizard

Print@If[...]대신 을 사용하여 하나 더 저장하십시오 Print[If[...]].
Mr.Wizard

2

자바-1210

int i,o;String q;String[]s={"1. Our site is called Programming Puzzles & Code ________.\n","2. What is the most popular tag on our site?\n","3. We are part of the ________ Exchange network.\n","4. Is this the first question?\n","5. Is this the last question?\n"},b={"B","C","A","B","A"},p=new String[5];String[][]a={{"A: Debugging\n","B: Golf\n","C: Hockey\n","D: Programming\n","answer: "},{"A: [debug]\n","B: [program]\n","C: [code-golf]\n","D: [number]\n","E: [c++]\n","answer: "},{"A: Stack\n","B: Code\n","C: Programmer\n","D: Hockey\n","answer: "},{"A: Yes\n","B: No\n","answer: "},{"A: Yes\n","B: No\n","answer: "}};java.util.Map<String,Integer>m=new java.util.HashMap(){{put("A",0);put("B",1);put("C",2);put("D",3);put("E",4);}};java.util.Scanner u=new java.util.Scanner(System.in);for(i=0;i<5;i++){q=s[i];for(o=0;o<a[i].length;)q+=a[i][o++];System.out.print(q);if(b[i].equals(p[i]=u.nextLine()))q="correct!";else q="incorrect! the answer was "+b[i];System.out.println(q+"\n");}q="";o=0;for(i=0;i<5;i++)if(b[i].equals(p[i]))o++;else q+=s[i]+"you chose "+a[i][m.get(p[i])]+"the answer was "+a[i][m.get(b[i])]+"\n";System.out.println("overview:\n"+o+" correct, "+(5-o)+" incorrect ("+o*100/5+"%)\n\n"+q);

포맷 : 1980

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

    java.util.Map<String, Integer> m = new java.util.HashMap<String, Integer>() {
        {
            put("A", 0);
            put("B", 1);
            put("C", 2);
            put("D", 3);
            put("E", 4);
        }
    };
    String[] b = {"B", "C", "A", "B", "A"};
    String[] p = new String[5];
    java.util.Scanner u = new java.util.Scanner(System.in);
    String q;
    int i;
    int o;
    for (i = 0; i < 5; i++) {
        q = s[i];
        for (o = 0; o < a[i].length;) {
            q += a[i][o++];
        }
        System.out.print(q);
        if (b[i].equals(p[i] = u.nextLine())) {
            q = "correct!";
        } else {
            q = "incorrect! the answer was " + b[i];
        }
        System.out.println(q + "\n");
    }
    q = "";
    o = 0;
    for (i = 0; i < 5; i++) {
        if (b[i].equals(p[i])) {
            o++;
        } else {
            q += s[i] + "you chose " + a[i][m.get(p[i])] + "the answer was " + a[i][m.get(b[i])] + "\n";
        }
    }
    System.out.println("overview:\n" + " correct, " + (5 - o) + " incorrect (" + o * 100 / 5 + "%)\n\n" + q);

이것은 확실히 가장 짧지는 않지만 모두 독립적입니다.


0

하스켈, 598

import System.Environment
import System.IO
n=putStrLn
p=putStr
d#s=p$show d++s
v&(m:a)=n m>>q[]""a>>= \(r,(s,t))->n s>>n"">>b v m t&r
(r,w,s)&[]=n"overview:">>r#" correct, ">>w#" incorrect (">>((100*r)`div`(r+w))#"%)\n">>mapM_ n s
b(r,w,s)m t|null t=(r+1,w,s)|1<3=(r,w+1,s++"":m:t)
q u c(('*':a):r)=q u a(a:r)
q u c(a@(o:':':_):r)=n a>>q(([o],a):u)c r
q u c r=p"answer: ">>hFlush stdout>>(\i->(r,a(maybe i id$lookup i u)c))`fmap`getLine
a j c|j==c=("correct!",[])|1<3=("incorrect! the answer was "++[head c],["you choose "++j,"the answer was "++c])
main=getArgs>>=readFile.head>>=((0,0,[])&).lines

내가 원하는 것보다 길다. 위키가 설정되어 있습니다!

아아, 우리는 플러시 stdout에 32 문자를 잃었습니다. 테스트 스크립트를 명령 행에 지정하지 않고 "t"라는 고정 파일에서 읽은 경우 추가 38자를 저장할 수 있습니다.

질문에 주어진 입력에서 실행될 때 :

& runhaskell 15961-Tester.hs 15961-test.txt 
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 choose B: Code
the answer was A: Stack

5. Is this the last question?
you choose B: No
the answer was A: Yes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.