Ten program pobiera parę [odpowiedzi ucznia, poprawne odpowiedzi] i wykorzystuje spacje do wskazania brakującej odpowiedzi.
Ten program używa dziwnych wewnętrznych formatów wejściowych, aby śledzić, co się dzieje, więc zrobimy to krok po kroku.
Z
To transponuje dane wejściowe, więc otrzymamy listę 25 elementów, po jednym dla każdego pytania; każdy element ma formę [odpowiedź ucznia, poprawna odpowiedź]. Element tego formularza wskażemy wielką literą; Aw przypadku pytania 1, Bpytania 2 itd. Więc odpowiedzi są obecnie przechowywane jako
ABCDEFGHIJKLMNOPQRSTUVWXY
m0
Jest to operacja „większego palindromu”; dołączamy odwrotność bieżącej wartości do samej wartości, uzyskując to:
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ṁ135
Operator ṁ(formy) robi wiele rzeczy, ale w tym kontekście skutecznie bierze pierwsze 135 elementów nieskończonej listy utworzonej przez wielokrotne dołączanie do siebie bieżącej wartości. To daje nam następujące informacje (które dla wygody podzieliłem na grupy 50 elementów; jest to tylko wewnętrzna lista 135 par):
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
µ;
µustawia bieżącą wartość jako nową wartość domyślną dla brakujących argumentów. Natychmiast widzimy wbudowane narzędzie, w którym brakuje operandu; ;dołącza, ale nie określiliśmy, z czym się połączyć. W rezultacie bieżąca wartość jest dołączana do wartości z ostatniej µ(która jest również wartością bieżącą), co daje nam następującą 270-elementową bieżącą wartość:
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPABCDEFGHIJKLMNO
PQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNO
PQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNO
PQRSTUVWXYYXWVUTSRQP
t€⁶
Pamiętaj, że wszystkie powyższe duże litery reprezentują pary [odpowiedź ucznia, poprawna odpowiedź]. t€⁶Działanie działa na każdym ( €) parę i usuwa ( t) przestrzenie ( ⁶) z każdej strony pary (to znaczy jakiejkolwiek przestrzeni, które pojawiają się w para). Wciąż mamy tę samą złożoną listę 270 pytań z wieloma powtórzeniami, ale mają one postać [poprawna odpowiedź] (uczeń nie odpowiedział) lub [odpowiedź ucznia, prawidłowa odpowiedź] (uczeń odpowiedział).
E€’
E€’Operacja działa również na każdym ( €) elementu, a dzięki zastosowaniu Ezastępuje element z 1, jeżeli wszystkie elementy są równe (czyli uczeń nie odpowie albo dostaje prawo pytanie) lub 0 jeśli nie wszystkie elementy są równe (tzn. uczeń odpowiedział, ale źle zrozumiał pytanie). Użycie ’tutaj zmienia numerację, co oznacza, że teraz używamy odpowiednio -1 lub 0. Użyję małych liter dla tego nowego elementu, który używa -1 dla odpowiedzi, która byłaby ukarana, gdyby była na pytanie kwalifikujące się do kary, lub 0 dla brakującej lub poprawnej odpowiedzi:
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqpabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqp
;E€
Widzieliśmy jedno E€i drugie ;; dodajemy coś do bieżącej wartości i używamy formatu 1, jeśli wszystkie elementy są równe, lub 0, jeśli niektóre są różne (nie ’tym razem!). Brakuje tutaj argumentu, więc używamy wartości z ostatniego µ(tj. Wyniku z kroku 3). W kroku 3 nie usunęliśmy spacji z elementów, więc będziemy mieć 1 za poprawną odpowiedź lub 0 za niepoprawną lub brakującą odpowiedź (ponieważ spacja nie pasuje do poprawnej odpowiedzi). Od tej pory będę używać wielkich liter 1 = poprawny, 0 = niepoprawny / brakujący format i nadal będę używać małych liter dla 0 = poprawny / brakujący, -1 = niepoprawny. Wynikowa wartość ma 405 elementów i wygląda następująco:
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqpabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqpABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
TSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
TSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
TSRQP
ṫ⁹
Nadchodzi niesamowity zbieg okoliczności, o którym wspomniałem wcześniej. Zanim zacznę mówić o tym fragmencie kodu, chcę podsumować, gdzie musimy.
Każda wielka litera oznacza +1 dla poprawnej odpowiedzi; pierwsze 15 pytań ( Ado O) pojawia się 5 razy w ciągu, a ostatnie 10 pytań ( Pdo Y) pojawia się 6 razy. Ten kawałek nie jest tak naprawdę magiczny; Zaprojektowałem to w ten sposób, gdy wcześniej wybrałem w programie liczbę 135 (czyli 5 × 15 + 6 × 10), a jedynym szczęściem jest to, że 5 jest liczbą nieparzystą (więc jest to ostatnia 10 pytania, które kończą się dodatkowymi czasami, zamiast pierwszych 10). W 15 litery tuż przed tym zawierać pprzez t(-1 pytania kar) jednorazowo, i uprzez y(kwestionuje -2 penalty) dwa razy. To też nie jest duży zbieg okoliczności; ponieważ użyliśmym0wcześniej dodatkowe kopie pytań są w kolejności PQRSTUVWXYYXWVUTSRQP, a późniejsze pytania naturalnie pojawią się w pobliżu środka tego ciągu (więc pobranie ostatnich 15 „dodatkowych” pytań da mniej powtórzeń tym w pobliżu krawędzi; i oczywiście nie jest zaskoczeniem, że „dodatkowe” pytania są ostatnie).
Ponieważ każda mała litera odejmuje 1 od wyniku dla niepoprawnej, brakującej odpowiedzi, a każda wielka litera dodaje 1 do wyniku dla poprawnej odpowiedzi, dlatego po prostu musimy wziąć ostatnie 135 + 15 = 150 elementów, aby uzyskać każdy rodzaj elementu poprawną liczbę razy. Poleceniem Jelly do uzyskania podłańcucha na końcu listy jest ṫ; nie określa jednak liczby pożądanych elementów, a raczej indeks pierwszego żądanego elementu. W tym momencie mamy 405 elementów i chcemy 150, więc musimy zacząć od indeksu (405 - 150 + 1) lub 256. W zadziwiający zbieg okoliczności 256 to liczba różnych oktetów, które istnieją, a zatem ma krótka reprezentacja w Galaretce (⁹). Niewiele mogłem zrobić, aby tak się stało; krok 4 dodał kolejne 135 elementów na początku listy, aby trafić w okrągły numer, ale fakt, że było to 135 elementów, które musiałem dodać (wartość, która była łatwo dostępna w tym momencie programu) był bardzo wygodny, w zasadzie każda inna liczba jest całkowicie nieprzydatna w tej sytuacji.
Oto jak teraz wygląda wartość wewnętrzna:
uvwxyyxwvutsrqpABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
ONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
ONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
S
Wreszcie, teraz mamy listę modyfikacji wyniku z pytań, wszystko, co musimy zrobić, to zsumować je za pomocą Si gotowe.