Saya menikmati berpartisipasi dalam kompetisi matematika yang dijalankan oleh Mu Alpha Theta, sebuah masyarakat kehormatan matematika di Amerika Serikat. Di kompetisi, saya mengikuti tes pilihan ganda 30 pertanyaan. Ada lima pilihan per pertanyaan, berlabel A hingga E.
Skor saya pada tes adalah empat poin untuk setiap jawaban yang benar, nol poin untuk pertanyaan yang dibiarkan kosong, dan negatif satu poin untuk setiap jawaban yang salah.
Tulis program yang menilai ujian berdasarkan sistem penilaian di atas. Seharusnya ada dua komponen input: kunci jawaban diikuti oleh tanggapan. Pertanyaan yang dibiarkan kosong harus dimasukkan sebagai ruang kosong. Input pertama harus hanya berisi huruf AE (atau ae, pilihan Anda), dan dapat diasumsikan bahwa tidak ada spasi kosong dalam input. Input kedua hanya boleh berisi spasi kosong dan huruf AE (atau ae). Input yang tidak menerapkan tes 30-pertanyaan harus dicetak Invalid test
sebagai output.
Outputnya harus grade atau Invalid test
.
Bonus
Jika program Anda mencetak angka dengan benar, angka dibiarkan kosong, dan angka salah setelah skor akhir sebagai (aR bB cW)
, lepas 20 byte.
Masukan sampel
CABBDCABECDBACDBEAACADDBBBEDDA //answer key
CABEDDABDC BACDBBAADE CBBEDDA //responses
Output sampel
Tidak ada bonus
73
Bonus
73 (20R 3B 7W)
Aturan standar berlaku. Kode terpendek dalam byte menang.
Invalid test
.Jawaban:
Pyth,
5351Cobalah online
Pemeriksaan dilakukan dengan melihat apakah seluruh input berisi karakter apa pun ketika semua spasi dan
a-e
dihapus, dan dengan memeriksa apakah kedua string memiliki panjang30
.Perhitungan skor dilakukan dengan zipping dua baris bersama-sama, maka dengan memetakan setiap pasangan untuk:
(letters are equal) ? 4 : -1
. Kemudian cukup menjumlahkan nilai-nilai, dan menambahkan jumlah spasi di baris kedua kembali ke skor.sumber
Serius , 86 byte
Mengambil input seperti
"CABBDCABECDBACDBEAACADDBBBEDDA", "CABEDDABDC BACDBBAADE CBBEDDA"
Cobalah online (Anda harus memasukkan input secara manual karena permalink tidak suka kutipan)
Bekerja pada bonus sekarang.Tidak, menambahkan bonus akan membutuhkan biaya lebih dari 20 byte.Saya tahu saya lupa sesuatu ...
Invalid Test
tidak dicetak jika terjadi kesalahan. Ada harapan saya untuk bermain golf Dennis.sumber
JavaScript (ES6), 134 byte
Sunting: Persyaratan pertanyaan berubah. Jawaban ini berasal dari saat program diperlukan untuk memastikan setiap karakter jawaban adalah AE, setiap karakter respons adalah AE atau spasi dan keduanya memiliki panjang 30, jika tidak kembali
Invalid test
.Penjelasan
Uji
sumber
CJam, 60 byte
Cobalah online di juru bahasa CJam .
sumber
JavaScript (Firefox 31+), 86 byte
Menggunakan pemahaman array yang diusulkan untuk ES7. Dengan demikian dukungan terbatas untuk Firefox untuk saat ini.
Dengan bonus, 106 byte (126 - 20)
Sunting: Sebelumnya solusi saya hanya memeriksa panjang jawaban atau pertanyaan, sekarang periksa keduanya.
Tampilkan cuplikan kode
sumber
f=
di awal dan mengatakan bahwa ini menghasilkan fungsi lambda.(x,y)=>(r=i=0,[for(l of y)x[i++]==l?r+=4:r-=l!=' '],i!=30|i-x.length?'Invalid test':r)
Japt , 71 byte
Japt adalah versi singkat dari Ja vaScri pt . Penerjemah
Keduanya
.
di akhir haruslah Unicode chars U + 0017 dan U + 0099 yang tidak dapat dicetak, masing-masing.Bagaimana itu bekerja
Saya harap ada cara yang lebih pendek untuk memastikan kedua panjangnya sama dengan 30. Saran diterima!
sumber
Haskell,
144138 byteAkan menjadi sekitar 50 tanpa validasi. mengendus .
Pemakaian:
"ABCDEABCDEABCDEABCDEABCDEABCDE" % "AAAAABBBBBCCCCCDDDDDEEEEEAAAAA"
sumber
!
dapat didefinisikan sebagaiall(`elem`l)s
, menghemat 6 byte.g=all.flip elem
.C #,
162154148134 bytePemakaian
Uji
http://csharppad.com/gist/15f7c9c3c8cfce471ff2
sumber
int s=0,i=0;for(;...
untuk menyimpan 3 byte.Ruby, 81 karakter
Contoh dijalankan:
sumber
Jawa,
183169 byteIni sedikit latihan Java 8:
sumber
String.valueOf
dengan hanya menambahkan int ke string kosong (""+IntStream....
) - Saya juga percaya Java memungkinkan non-korsleting dan, sehingga Anda dapat menghapus salah satu&
dan menyimpan byte .brainfuck, 354 byte
Membutuhkan penerjemah yang memungkinkan Anda untuk belok kiri dari sel 0. Output adalah byte yang ditandatangani. Misalnya, byte
0x49
dicetak untuk input contoh, dan0xFF
dicetak untuk input dengan baris pertama yang sama tetapi baris kedua diganti dengan "C" dan 29 spasi.Skor dimulai pada 0, dan saat baris kedua input dibaca, perubahan ini dibuat untuk itu:
Akhirnya, 120 ditambahkan. Ini secara fungsional sama dengan mengasumsikan skor sempurna dan menerapkan penalti, daripada mulai dari 0.
Dengan komentar:
sumber
Python 3,
187 179 175 165 155151sumber
JavaScript ES7, 102
Seperti biasa, bonus tidak sepadan dengan usaha.
Memeriksa spasi yang tidak valid pada input pertama (karena ini masuk akal bagi saya) 112
sumber
(k,r,s=0)=>/^[A-E]{30}$/.test(k)&&/^[ A-E]{30}$/.test(r)?Object.keys(k).map(i=>k[i]==r[i]?s+=4:s-=r[i]!=' ').pop():'Invalid Test'
adalah 129 byte.Python 2.7,
131, 116, 109, 139Saya mencoba melakukan solusi python "pendek" ... Nah ini dia, saran lebih dari diterima
Menambahkan beberapa karakter membuatnya jauh lebih mudah dibaca ...
sumber
Prolog, 165 byte
Lebih dari setengah byte untuk pemeriksaan tes tidak valid.
Kode:
Dijelaskan:
Contoh:
Cobalah online di sini
sumber
MATLAB,
9290 byteTerima kasih kepada Tom Carpenter karena membantu saya mengurangi jawaban saya sebanyak 2 byte!
Fungsi dapat dipanggil dengan menugaskan lembar jawaban ke q dan jawaban yang diajukan ke a . misalnya:
Jawabannya hanya dicetak ke layar. 8 byte dapat disimpan jika diizinkan untuk mencetak ans = 73
sumber
numel(q)
dengannnz(q)
.C # 6.0 ->
(270 - 20 = 250)246 - 20 = 226 byteVersi yang dapat dibaca & tidak dikoleksi:
Sangat ingin mendapat bonus: D
sumber
i
bersama dengan dis
luar for loop. Anda dapat menggunakanvar
untuk mendeklarasikana
, menghemat 1 byte (hore!). Anda tidak perlu banyak kurung kurawal{}
dalam kode Anda, yang selalu merupakan cara yang bagus untuk memangkas byte, dan selalu layak untuk melihat tabel ASCII saat membandingkan karakter (Anda dapatc[i]==' '
sedikit mengurangi byte dengan menggunakan ketidaksetaraan). Anda juga harus mempertimbangkan menghitung melalui string ke belakang - dalam hal ini Anda dapat menyimpan setidaknya 1 byte dengan menghubungkan kembali loop for.Groovy 2.4.5, 107 byte
Hanya terjemahan sederhana dari jawaban Java sebelumnya .
sumber
C, 273 - 20 = 253 byte
Saya telah mengambil bonus, meskipun saya harus membayar 23 byte hanya untuk mencetaknya. :-(
Penjelasan
Ada dua kali lebih banyak kode untuk memeriksa input yang tidak valid karena ada untuk menghitung jawaban - daging sebenarnya dari tantangan ada di
for
loop dekat akhir. Sebenarnya inilah versi yang mengasumsikan input selalu valid, dalam 163-20 = 143 byte:Dan satu yang membuat asumsi yang sama dan hanya mencetak skor, dalam 133 byte:
sumber
SAS 9.4, 291-20 = 271 byte (dengan bonus), atau 231 byte (tanpa bonus)
Dengan bonus:
Tanpa bonus:
Sas tidak benar-benar memiliki input / output, jadi Anda perlu mengganti k = '..' dengan kunci, dan r = '..' dengan respons. Outputnya dicetak ke log.
sumber