Ця програма приймає пару [відповіді учня, правильні відповіді] як вхідні дані та використовує пробіли для позначення пропущеної відповіді.
Ця програма використовує кілька химерних внутрішніх форматів введення для відстеження того, що відбувається, тому ми будемо робити цей крок за часом.
Z
Це переміщує вхід, тож ми закінчимось списком з 25 елементів, по одному на кожне запитання; кожен елемент має форму [відповідь учня, правильна відповідь]. Ми позначимо елемент цієї форми з великої літери; Aдля питання 1, Bдля питання 2 тощо. Тож відповіді наразі зберігаються як
ABCDEFGHIJKLMNOPQRSTUVWXY
m0
Це операція «більший паліндром»; ми додаємо реверс поточного значення до самого значення, отримуючи це:
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ṁ135
Оператор ṁ(mold) робить ряд речей, але в цьому контексті він ефективно приймає перші 135 елементів нескінченного списку, що утворюється шляхом додавання поточного значення до себе неодноразово. Це дає нам наступне (яке я розбив на групи з 50 елементів для зручності; це лише список із 135 пар внутрішньо):
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
µ;
µвстановлює поточне значення як новий за замовчуванням для відсутніх операндів. Потім ми відразу бачимо вбудований, якому не вистачає операнду; ;додає, але ми не вказали, до чого додати. У результаті поточне значення додається до значення станом на останнє µ(яке також є поточним значенням), що дає нам наступне значення 270 елементів:
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPABCDEFGHIJKLMNO
PQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNO
PQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNO
PQRSTUVWXYYXWVUTSRQP
t€⁶
Пам’ятайте, що всі великі літери вище представлені парами [відповідь учня, правильна відповідь]. t€⁶Операція діє на кожній ( €пари), і видаляє ( t) просторів ( ⁶) по обидва боки пари (тобто будь-який простір , яке з'являється в парі). Таким чином, у нас все ще є спільний перелік з 270 питань із багатьма повторами, але вони мають форму [правильна відповідь] (студент не відповів) або [відповідь студента, правильна відповідь] (студент відповів).
E€’
E€’Операція також діє на кожному ( €елементі), і, в зв'язку з використанням E, замінює елемент з 1 , якщо всі елементи рівні (тобто учень не відповів чи отримав право питання), або 0 , якщо не всі елементи рівні (тобто студент відповів, але неправильно поставив запитання). Використання ’тут змінює нумерацію, тобто зараз ми використовуємо -1 або 0 відповідно. Я буду використовувати малі літери для цього нового елементу, який використовує -1 для відповіді, яка буде накладена штрафом, якби було на питання, призначене для штрафу, або 0 для відсутньої або правильної відповіді:
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqpabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqp
;E€
Ми бачили E€і ;раніше, і раніше; ми додаємо щось до поточного значення, і ми використовуємо формат 1, якщо всі елементи рівні, або 0, якщо деякі різні (немає ’цього разу!). Тут відсутній операнд, тому ми використовуємо значення останнього µ(тобто результат кроку 3). На етапі 3 ми не видалили пробіли з елементів, тому у нас буде 1 для правильної відповіді або 0 для неправильної або відсутньої відповіді (оскільки пробіл не відповідає правильній відповіді). Відтепер я буду використовувати великі літери для цього 1 = правильний, 0 = неправильний / відсутній формат і продовжуватиму використовувати малі літери для 0 = правильний / відсутній, -1 = неправильний. Отримане значення має 405 елементів і виглядає приблизно так:
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqpabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqpABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
TSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
TSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
TSRQP
ṫ⁹
Ось дивовижний збіг, про який я згадував раніше. Перш ніж говорити про цей шматочок коду, я хочу підвести підсумки, де ми повинні потрапити.
Кожна велика літера означає +1 для правильної відповіді; перші 15 запитань ( Aчерез O) з’являються 5 разів у рядку, а останні 10 запитань - Pчерез Y6 разів. Цей біт насправді не магічний; Я створив це таким чином, коли раніше вибрав число 135 в програмі (що становить 5 × 15 + 6 × 10), і єдиний штрих удачі тут - 5 випадкових чисел (тому це останні 10 питання, які закінчуються в додаткові часи, а не перші 10). 15 листів, що безпосередньо передують цьому, містять pчерез t(-1 штрафні запитання) один раз, а uчерез y(-2 питання про штраф) два рази. Це також не є великим збігом обставин; тому що ми звиклиm0раніше додаткові копії запитань є в порядку PQRSTUVWXYYXWVUTSRQP, а пізніші запитання, природно, виникатимуть біля середини цього рядка (тому прийняття останніх 15 "зайвих" запитань надасть меншу кількість повторень тим, хто знаходиться біля країв; і звичайно, не дивно, що "зайві" запитання йдуть останніми).
Оскільки кожна маленька літера віднімає 1 бал від неправильної, не пропущеної відповіді, а кожна велика літера додає 1 балу для правильної відповіді, тому нам просто потрібно взяти останні 135 + 15 = 150 елементів, щоб отримати кожен елемент елемента правильна кількість разів. Команда Jelly для отримання підрядка в кінці списку ṫ; однак він не вказує кількість потрібних елементів, а швидше індекс першого елемента, який ви хочете. У нас в даний момент 405 елементів, і хочемо 150, тому нам потрібно почати з індексу (405 - 150 + 1), або 256. За дивовижним збігом обставин 256 випадків є кількістю відомих октетів, які існують, і, таким чином, є коротке представництво в Jelly (⁹). Я міг зробити дуже мало для того, щоб це сталося; крок 4 додав ще 135 елементів до початку списку, щоб потрапити на кругле число, але факт, що це було 135 елементів, мені довелося додати (значення, яке було легко доступне в той момент програми), було дуже зручно, в основному будь-яке інше число абсолютно не допомагає в цій ситуації.
Ось як виглядає внутрішнє значення зараз:
uvwxyyxwvutsrqpABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
ONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
ONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
S
Нарешті, зараз у нас є список модифікацій балів за запитаннями, все, що нам потрібно зробити, - це підбити їх за допомогою S, і ми закінчили.