Program ini mengambil sepasang [jawaban siswa, jawaban benar] sebagai input, dan menggunakan spasi untuk menunjukkan jawaban yang hilang.
Program ini menggunakan beberapa format input internal yang aneh untuk melacak apa yang terjadi, jadi kami akan mengambil langkah ini satu per satu.
Z
Ini mentranspos input, jadi kita akan berakhir dengan daftar 25 elemen, satu untuk setiap pertanyaan; setiap elemen berbentuk [jawaban siswa, jawaban benar]. Kami akan menunjukkan elemen formulir ini dengan huruf kapital; Auntuk pertanyaan 1, Buntuk pertanyaan 2, dan seterusnya. Jadi jawabannya saat ini sedang disimpan sebagai
ABCDEFGHIJKLMNOPQRSTUVWXY
m0
Ini adalah operasi "palindrome yang lebih besar"; kami menambahkan kebalikan dari nilai saat ini ke nilai itu sendiri, menghasilkan ini:
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ṁ135
Operator ṁ(cetakan) melakukan sejumlah hal, tetapi dalam konteks ini, ia secara efektif mengambil 135 elemen pertama dari daftar tak terbatas yang dihasilkan dengan menambahkan nilai saat ini ke dirinya sendiri berulang kali. Itu memberi kita yang berikut ini (yang telah saya bagi ke dalam kelompok 50 elemen untuk kenyamanan; ini hanya daftar 135 pasangan secara internal):
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
µ;
µmenetapkan nilai saat ini sebagai default baru untuk operan yang hilang. Kami kemudian segera melihat builtin yang hilang operan; ;menambahkan, tapi kami belum menentukan apa yang harus ditambahkan. Akibatnya, nilai saat ini ditambahkan ke nilai pada yang terakhir µ(yang juga merupakan nilai saat ini), memberi kami nilai 270-elemen saat ini:
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPABCDEFGHIJKLMNO
PQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNO
PQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNO
PQRSTUVWXYYXWVUTSRQP
t€⁶
Ingat bahwa semua huruf kapital di atas mewakili pasangan [jawaban siswa, jawaban yang benar]. The t€⁶Operasi beroperasi pada masing-masing ( €pair), dan menghapus ( t) spasi ( ⁶) dari kedua sisi dari pasangan (yaitu setiap ruang yang muncul dalam pasangan). Jadi kita masih memiliki daftar yang berbelit-belit dari 270 pertanyaan dengan banyak pengulangan, tetapi mereka dalam bentuk [jawaban yang benar] (siswa tidak menjawab) atau [jawaban siswa, jawaban yang benar] (siswa menjawab).
E€’
The E€’operasi juga beroperasi pada setiap ( €) elemen, dan, karena penggunaan E, menggantikan elemen dengan 1 jika semua elemen adalah sama (yaitu siswa tidak menjawab atau mendapat pertanyaan kanan), atau 0 jika tidak semua unsur-unsurnya sama (yaitu siswa menjawab tetapi mendapat pertanyaan yang salah). Penggunaan di ’sini mengubah penomoran, artinya sekarang kita menggunakan -1 atau 0. Saya akan menggunakan huruf kecil untuk elemen jenis baru ini, yang menggunakan -1 untuk jawaban yang akan dihukum jika itu pada pertanyaan yang memenuhi syarat penalti, atau 0 untuk jawaban yang hilang atau benar:
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqpabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqp
;E€
Kami telah melihat keduanya E€dan ;sebelumnya; kami menambahkan sesuatu ke nilai saat ini, dan kami menggunakan format 1 jika semua elemen sama, atau 0 jika ada yang berbeda (tidak ’kali ini!). Ada operan yang hilang di sini, jadi kami menggunakan nilai pada yang terakhir µ(yaitu output dari langkah 3). Kembali ke langkah 3, kami belum menghapus spasi dari elemen, jadi kami akan memiliki 1 untuk jawaban yang benar, atau 0 untuk jawaban yang salah atau tidak ada (karena spasi tidak akan cocok dengan jawaban yang benar). Mulai sekarang, saya akan menggunakan huruf kapital untuk ini 1 = benar, 0 = format salah / hilang, dan terus menggunakan huruf kecil untuk 0 = benar / hilang, -1 = salah. Nilai yang dihasilkan memiliki 405 elemen, dan terlihat seperti ini:
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqpabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqpABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
TSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
TSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
TSRQP
ṫ⁹
Di sinilah kebetulan luar biasa yang saya sebutkan sebelumnya. Sebelum berbicara tentang sedikit kode ini, saya ingin mengetahui di mana kita harus pergi.
Setiap huruf kapital mewakili +1 untuk jawaban yang benar; 15 pertanyaan pertama ( Asampai O) muncul masing-masing 5 kali dalam string, dan 10 pertanyaan terakhir ( Psampai Y) muncul masing-masing 6 kali. Itu sedikit tidak benar-benar ajaib; Saya mendesain seperti itu ketika saya memilih angka 135 sebelumnya dalam program (yaitu 5 × 15 + 6 × 10), dan satu-satunya keberuntungan di sini adalah bahwa 5 kebetulan merupakan angka ganjil (jadi ini adalah 10 terakhir pertanyaan yang akhirnya muncul kali tambahan, bukan 10 yang pertama). Ke-15 surat segera sebelum ini berisi pmelalui t(pertanyaan penalti -1) sekali, dan sebelumnya, salinan tambahan dari pertanyaan berada di urutanu melalui y(pertanyaan penalti -2) dua kali. Itu juga bukan kebetulan; karena kami menggunakanm0PQRSTUVWXYYXWVUTSRQP, dan pertanyaan selanjutnya akan muncul secara alami di dekat bagian tengah string tersebut (jadi mengambil 15 pertanyaan terakhir "ekstra" akan memberikan lebih sedikit pengulangan untuk yang di dekat tepi; dan tentu saja, tidak mengherankan bahwa "tambahan" pertanyaan datang terakhir).
Karena setiap huruf kecil mengurangi 1 dari skor untuk jawaban yang salah, tidak hilang, dan setiap huruf besar menambahkan 1 pada skor untuk jawaban yang benar, oleh karena itu kita hanya perlu mengambil 135 + 15 = 150 elemen terakhir untuk mendapatkan setiap jenis elemen jumlah kali yang benar. Perintah Jelly untuk mendapatkan substring di akhir daftar adalah ṫ; Namun, itu tidak menentukan jumlah elemen yang Anda inginkan, melainkan indeks dari elemen pertama yang Anda inginkan. Kami memiliki 405 elemen pada titik ini, dan ingin 150, jadi kita perlu mulai dengan indeks (405 - 150 + 1), atau 256. Dalam suatu kebetulan yang luar biasa, 256 merupakan jumlah oktet berbeda yang ada, dan karenanya representasi singkat di Jelly (⁹). Ada sangat sedikit yang bisa saya lakukan untuk mewujudkan hal ini; langkah 4 menambahkan 135 elemen ke awal daftar untuk mencapai angka bulat, tetapi fakta bahwa 135 elemen yang harus saya tambahkan (nilai yang sudah tersedia pada saat itu dalam program) sangat nyaman, dengan pada dasarnya nomor lain sama sekali tidak membantu dalam situasi ini.
Beginilah nilai internal terlihat sekarang:
uvwxyyxwvutsrqpABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
ONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
ONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
S
Akhirnya, sekarang kita punya daftar modifikasi untuk skor dari pertanyaan, yang perlu kita lakukan adalah menjumlahkannya dengan menggunakan S, dan kita selesai.