Berikan tes pilihan ganda

14

Saya mempersembahkan kepada Anda ujian! Tes Anda adalah untuk menguji. Tes ini untuk menguji peserta ujian dengan tes yang diberikan tester kepada Anda, dalam jumlah kode uji waktu. Khususnya, Anda akan memberikan tes pilihan ganda yang telah Anda terima sebagai input.

Dalam tantangan ini, Anda harus mengambil input seperti ini:

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

Dan ini adalah contoh dari tes yang diambil:

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

Spesifikasi formal:

  • Memasukkan
    • Jika sebuah garis dimulai dengan angka diikuti dengan titik dan spasi, itu adalah pertanyaan dengan angka itu. Angka akan selalu mulai dari 1 dan naik 1 setiap pertanyaan.
    • Jika sebuah baris dimulai dengan tanda bintang opsional, huruf, titik dua, dan kemudian spasi, itu adalah jawaban. Jawaban juga akan selalu berurutan. Hanya akan ada satu jawaban yang benar per pertanyaan.
    • Garis tidak akan dimulai dengan cara lain selain cara yang disebutkan sebelumnya.
    • Input dapat diterima dengan cara apa pun (membaca dari file, stdin, dll.) Tetapi tidak boleh di-hardcode ke dalam program Anda.
  • Output (fase pengambilan tes)
    • Pertama, cetak setiap pertanyaan secara berurutan. Cetak pertanyaan dan jawabannya sebagai masukan yang diterima, tetapi jangan cetak tanda bintang yang menunjukkan jawaban yang benar.
    • Kemudian, cetak baris baru dan "answer: ". Tunggu input pengguna. Input pengguna akan selalu sesuai dengan jawaban.
    • Jika jawaban yang benar (yang bertanda bintang) sama dengan yang di input pengguna, keluaran "correct!". Kalau tidak, output "incorrect! the answer was " + correct_letter.
    • Pisahkan setiap pertanyaan dengan baris kosong, lalu ulangi langkah-langkah output sebelumnya sampai tidak ada lagi pertanyaan.
  • Output (fase ikhtisar)
    • Cetak "overview: "dan kemudian baris baru.
    • Cetak "{number of correct answers} correct, {incorrect answers} incorrect ({percent correct, rounded to the nearest whole number}%)"(tentu saja mengganti frasa dalam kurung kurawal dengan nilai masing-masing). Kemudian cetak garis kosong untuk penspasian.
    • Sekarang, untuk setiap pertanyaan yang salah, cetak pertanyaan (bukan jawabannya), lalu pada baris baru "you chose " + answer_you_chose, dan pada baris lain "the answer was " + correct_answer. Pisahkan setiap ikhtisar jawaban yang salah dengan baris kosong.
  • Untuk mengurangi kecurangan dengan menginterpretasikan hal-hal secara harfiah, ketika diberi output yang sama di sini, dan input yang sama dalam fase tes, program Anda harus menampilkan hal yang persis sama dengan output sampel.

Ini adalah ; menang kode terpendek! (Dan mendapat nilai A + (tanda centang hijau)!)

Gagang pintu
sumber
2
Tantangan yang bagus, tetapi saya ingin sampel tes berisi situasi yang mungkin rumit, seperti \d\. , \w: dan \*di tengah pertanyaan / jawaban. (Misalnya saat ini *dapat dihilangkan dengan y/*//, sementara cara yang benar panjang seperti s/^\*//.)
manatwork
2
Apakah kita perlu mengizinkan kelanjutan garis? Maksud saya, akan ada garis yang tidak dimulai dengan “1. ”Atau“ A: ”? Jika ya, harap sertakan kasus-kasus tersebut dalam uji sampel.
manatwork
@manatwork (komentar pertama) Oke, edit (komentar kedua) tidak, Anda tidak. Saya akan mengklarifikasi.
Gagang Pintu
1
Jadi, bagaimana Anda akan menguji tes tes ini?
Joe Z.
2
@ Joz. Umm ... tidak yakin apa yang Anda maksudkan ... Saya memang memberikan test test case untuk tes untuk menguji tester Anda
Gagang Pintu

Jawaban:

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

Catatan: Baris baru diperlukan untuk pemformatan output.

Setiap kali saya pikir saya tidak bisa bermain golf lagi, saya belajar sesuatu yang baru! Ini perlahan menjadi lebih banyak tanda baca daripada teks yang dapat dibaca ... Saya pikir itu hal yang baik?

Penggunaan: perl -e '...' test.txtatau perl test.pl test.txt.

Jika Anda memilih opsi yang tidak disajikan dalam daftar, Anda akan mendapatkan output yang salah dalam ikhtisar (itu akan mengatakan you chose: 1. Our site is called Programming Puzzles & Code ________.misalnya).

Contoh dijalankan

Dom Hastings
sumber
Mohon tunjukkan contoh input dan output.
DavidC
@DavidCarraher menambahkan tautan yang diperbarui ke keluaran melalui showterm.io . Pemikiran itu akan sedikit lebih baik daripada output statis, meskipun masih tidak menangkapnya persis sama dengan yang ada di terminal.
Dom Hastings
Itu memberikan pandangan yang cukup baik tentang cara kerja program Anda.
DavidC
3

Mathematica 144

Ini mungkin upaya yang tidak valid. Saya memisahkan pertanyaan dari setiap jawaban dalam input. Saya juga menunjukkan jawaban yang benar dengan surat di bidang yang terpisah, bukan tanda bintang sebelum alternatif.

Bagaimanapun...

Data

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

Kode

Jawaban untuk setiap pertanyaan dimasukkan melalui kotak dialog. Pertanyaan, jawaban, dan umpan balik dicetak.

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

Uji

f /@ questions

pilihan dialog

DavidC
sumber
wow, mengesankan! inputnya tidak dalam bentuk yang benar meskipun ... masih, itu sangat luar biasa untuk singkatnya kode dan berapa banyak!
Gagang Pintu
Terima kasih. Memijat string input ke dalam struktur ramah-Mathematica tentu saja mungkin, tetapi itu akan menyembunyikan keanggunan yang mendasari solusi saat ini yang tidak memenuhi syarat.
DavidC
Bagus. Empat karakter lebih pendek: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
Dan simpan satu lagi dengan menggunakan Print@If[...]daripada Print[If[...]].
Mr.Wizard
2

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

diformat: 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);

Ini tentu saja tidak akan menjadi yang terpendek tetapi semuanya serba lengkap

pemberontak
sumber
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

Jauh lebih lama dari yang saya inginkan. Sudah diatur wiki jadi miliki!

Sayangnya, kami kehilangan 32 karakter untuk stushing. 38 karakter lainnya dapat disimpan jika skrip uji dibaca dari file tetap bernama "t" daripada ditentukan pada baris perintah.

Saat dijalankan pada input yang diberikan dalam pertanyaan:

& 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
MtnViewMark
sumber