Làm bài kiểm tra trắc nghiệm


14

Tôi trình bày cho bạn một bài kiểm tra! Bài kiểm tra của bạn là để kiểm tra. Bài kiểm tra là để kiểm tra người kiểm tra bằng các bài kiểm tra mà người kiểm tra cung cấp cho bạn, với số lượng mã kiểm tra shor . Cụ thể, bạn sẽ đưa ra một bài kiểm tra trắc nghiệm mà bạn đã nhận làm đầu vào.

Trong thử thách này, bạn phải nhận một đầu vào như thế này:

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

Và đây là một ví dụ về bài kiểm tra đang được thực hiện:

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

Đặc điểm kỹ thuật chính thức:

  • Đầu vào
    • Nếu một dòng bắt đầu bằng một số theo sau là dấu chấm và dấu cách, thì đó là một câu hỏi với số đó. Các số sẽ luôn bắt đầu từ 1 và tăng lên 1 mỗi câu hỏi.
    • Nếu một dòng bắt đầu bằng một dấu sao tùy chọn, một chữ cái, dấu hai chấm và sau đó là một khoảng trắng, thì đó là một câu trả lời. Câu trả lời cũng sẽ luôn được tuần tự. Sẽ chỉ có một câu trả lời đúng cho mỗi câu hỏi.
    • Một dòng sẽ không bắt đầu theo bất kỳ cách nào khác ngoài những cách đã đề cập trước đó.
    • Đầu vào có thể được chấp nhận theo bất kỳ cách nào (đọc từ tệp, stdin, v.v.) nhưng không được mã hóa cứng vào chương trình của bạn.
  • Đầu ra (giai đoạn làm bài kiểm tra)
    • Đầu tiên, in ra từng câu hỏi một cách tuần tự. In câu hỏi và câu trả lời của nó như nhận được trong đầu vào, nhưng không in dấu hoa thị cho biết câu trả lời đúng.
    • Sau đó, in một dòng mới và "answer: ". Chờ người dùng nhập liệu. Đầu vào của người dùng sẽ luôn luôn tương ứng với một câu trả lời.
    • Nếu câu trả lời đúng (câu có dấu hoa thị) giống với câu trả lời của người dùng, đầu ra "correct!". Nếu không, đầu ra "incorrect! the answer was " + correct_letter.
    • Tách mỗi câu hỏi bằng một dòng trống, sau đó lặp lại các bước đầu ra trước đó cho đến khi không còn câu hỏi nào nữa.
  • Đầu ra (giai đoạn tổng quan)
    • In "overview: "và sau đó một dòng mới.
    • In "{number of correct answers} correct, {incorrect answers} incorrect ({percent correct, rounded to the nearest whole number}%)"(tất nhiên thay thế các cụm từ trong dấu ngoặc nhọn bằng các giá trị tương ứng của chúng). Sau đó in một dòng trống cho khoảng cách.
    • Bây giờ, đối với mỗi câu hỏi sai, hãy in câu hỏi (không phải câu trả lời của nó), sau đó trên một dòng mới "you chose " + answer_you_chosevà trên một dòng khác "the answer was " + correct_answer. Phân tách tổng quan của mỗi câu trả lời sai bằng một dòng trống.
  • Để giảm gian lận bằng cách diễn giải mọi thứ theo nghĩa đen, khi được đưa ra cùng một đầu ra ở đây và cùng một đầu vào trong giai đoạn làm bài kiểm tra, chương trình của bạn phải xuất ra chính xác điều tương tự như đầu ra mẫu.

Đây là ; chiến thắng mã ngắn nhất! (Và nhận được điểm A + (dấu kiểm màu xanh lá cây)!)


2
Thử thách thú vị, nhưng tôi muốn bài kiểm tra mẫu có thể chứa các tình huống khó khăn, như \d\. , \w: \*ở giữa các câu hỏi / câu trả lời. (Ví dụ hiện tại *có thể được loại bỏ y/*//, trong khi cách chính xác dài như s/^\*//.)
manatwork 16/12/13

2
Chúng ta có cần cho phép tiếp tục dòng không? Ý tôi là, sẽ có những dòng không bắt đầu với Số 1. NÓI hay Nếu có, vui lòng bao gồm các trường hợp như vậy trong thử nghiệm mẫu.
manatwork 16/12/13

@manatwork (bình luận đầu tiên) Ok, chỉnh sửa (bình luận thứ hai) không, bạn không. Tôi sẽ làm rõ.
Doorknob

1
Vì vậy, làm thế nào bạn sẽ kiểm tra thử nghiệm kiểm tra này?
Joe Z.

2
@JoeZ. Umm ... không chắc ý của bạn là gì ... Tôi đã cung cấp một trường hợp kiểm tra thử nghiệm để kiểm tra thử nghiệm của bạn
Doorknob

Câu trả lời:


2

Perl 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

Lưu ý: Các dòng mới được yêu cầu cho định dạng đầu ra.

Mỗi lần tôi nghĩ mình không thể chơi gôn nữa, tôi lại học được một điều mới! Nó đang dần trở thành dấu chấm câu nhiều hơn văn bản dễ đọc ... Tôi nghĩ đó là một điều tốt?

Cách sử dụng: perl -e '...' test.txthoặc perl test.pl test.txt.

Nếu bạn chọn một tùy chọn không được trình bày trong danh sách, bạn sẽ nhận được đầu ra không chính xác trong tổng quan ( you chose: 1. Our site is called Programming Puzzles & Code ________.ví dụ: nó sẽ nói ).

Chạy ví dụ


Vui lòng hiển thị một ví dụ về đầu vào và đầu ra.
DavidC

@DavidCarraher đã thêm một liên kết được cập nhật đến đầu ra thông qua showterm.io . Thiết nghĩ rằng nó sẽ tốt hơn một chút so với đầu ra tĩnh, mặc dù nó vẫn không thu được chính xác như trong thiết bị đầu cuối.
Dom Hastings

Điều đó cung cấp một cái nhìn khá tốt về cách chương trình của bạn hoạt động.
DavidC

3

Toán học 144

Đây có thể là một nỗ lực không hợp lệ. Tôi tách câu hỏi từ mỗi câu trả lời trong đầu vào. Tôi cũng chỉ ra câu trả lời đúng bằng một chữ cái trong một trường riêng, thay vì dấu hoa thị trước khi thay thế.

Dù sao...

Dữ liệu

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"}};

Một câu trả lời cho mỗi câu hỏi được nhập thông qua một hộp thoại. Câu hỏi, câu trả lời và phản hồi được in.

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

Kiểm tra

f /@ questions

lựa chọn hộp thoại


ồ thật ấn tượng! đầu vào không ở dạng chính xác mặc dù ... vẫn vậy, điều đó rất đáng chú ý về tính ngắn gọn của mã và mức độ của nó!
tay nắm cửa

Cảm ơn. Tất nhiên có thể xoa bóp chuỗi đầu vào thành một cấu trúc thân thiện với Mathicala, nhưng nó sẽ che giấu sự thanh lịch bên dưới giải pháp hiện tại, không đủ điều kiện.
DavidC

Đẹp. Bốn ký tự ngắn hơn: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

Và tiết kiệm thêm một bằng cách sử dụng Print@If[...]chứ không phải Print[If[...]].
Mr.Wizard

2

Java - 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);

định dạng: 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);

Đây chắc chắn sẽ không phải là ngắn nhất nhưng tất cả đều khép kín


0

Haskell, 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

Cách lâu hơn tôi muốn. Nó được thiết lập wiki để có nó!

Than ôi, chúng tôi mất 32 ký tự để xả stdout. 38 ký tự khác có thể được lưu nếu tập lệnh kiểm tra được đọc từ một tệp cố định có tên "t" thay vì được chỉ định trên dòng lệnh.

Khi chạy trên đầu vào được đưa ra trong câu hỏi:

& 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.