Ce programme prend une paire de [réponses de l'élève, réponses correctes] en entrée et utilise des espaces pour indiquer une réponse manquante.
Ce programme utilise des formats d'entrée internes bizarres pour garder une trace de ce qui se passe, nous allons donc procéder étape par étape.
Z
Cela transpose l'entrée, nous allons donc nous retrouver avec une liste de 25 éléments, un pour chaque question; chaque élément est de la forme [réponse de l'élève, réponse correcte]. Nous indiquerons un élément de ce formulaire avec une majuscule; Apour la question 1, Bpour la question 2, etc. Donc, les réponses sont actuellement stockées sous
ABCDEFGHIJKLMNOPQRSTUVWXY
m0
Il s'agit d'une opération "grand palindrome"; nous ajoutons l'inverse de la valeur actuelle à la valeur elle-même, ce qui donne:
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ṁ135
L' ṁopérateur (moule) fait un certain nombre de choses, mais dans ce contexte, il prend effectivement les 135 premiers éléments de la liste infinie produite en s'ajoutant à plusieurs reprises la valeur actuelle. Cela nous donne ce qui suit (que j'ai divisé en groupes de 50 éléments pour plus de commodité; ce n'est qu'une liste de 135 paires en interne):
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
µ;
µdéfinit la valeur actuelle comme nouvelle valeur par défaut pour les opérandes manquants. Nous voyons alors immédiatement un builtin auquel il manque un opérande; ;ajoute, mais nous n'avons pas spécifié quoi ajouter. Par conséquent, la valeur actuelle est ajoutée à la valeur de la dernière µ(qui est également la valeur actuelle), ce qui nous donne la valeur actuelle de 270 éléments suivante:
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPABCDEFGHIJKLMNO
PQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNO
PQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNO
PQRSTUVWXYYXWVUTSRQP
t€⁶
N'oubliez pas que toutes les majuscules ci-dessus représentent des paires de [réponse de l'élève, bonne réponse]. L' t€⁶opération opère sur chaque ( €) paire et supprime ( t) les espaces ( ⁶) de chaque côté de la paire (c'est-à-dire tout espace qui apparaît dans la paire). Nous avons donc toujours la même liste alambiquée de 270 questions avec de nombreuses répétitions, mais elles sont de la forme [bonne réponse] (l'élève n'a pas répondu) ou [l'élève a répondu, la bonne réponse] (l'élève a répondu).
E€’
L' E€’opération opère également sur chaque €élément ( ) et, en raison de l'utilisation de E, remplace l'élément par 1 si tous les éléments sont égaux (c'est-à-dire que l'étudiant n'a pas répondu ou a bien répondu à la question), ou 0 si ce n'est pas tous les les éléments sont égaux (c.-à-d. que l'élève a répondu mais a mal répondu à la question). L'utilisation d' ’ici modifie la numérotation, ce qui signifie que nous utilisons désormais respectivement -1 ou 0. Je vais utiliser des lettres minuscules pour ce nouveau type d'élément, qui utilise -1 pour une réponse qui serait pénalisée s'il s'agissait d'une question éligible à une pénalité, ou 0 pour une réponse manquante ou correcte:
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqpabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqp
;E€
Nous avons vu les deux E€et ;avant; nous ajoutons quelque chose à la valeur actuelle, et nous utilisons un format de 1 si tous les éléments sont égaux, ou de 0 si certains sont différents (non ’cette fois!). Il y a un opérande manquant ici, nous utilisons donc la valeur en date du dernier µ(c'est-à-dire la sortie de l'étape 3). À l'étape 3, nous n'avions pas supprimé les espaces des éléments, nous aurons donc 1 pour une réponse correcte ou 0 pour une réponse incorrecte ou manquante (car un espace ne correspondra pas à la bonne réponse). À partir de maintenant, je vais utiliser des majuscules pour ce 1 = correct, 0 = format incorrect / manquant, et continuer à utiliser des lettres minuscules pour 0 = correct / manquant, -1 = incorrect. La valeur résultante a 405 éléments et ressemble à ceci:
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqpabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqpABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
TSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
TSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
TSRQP
ṫ⁹
Voici la coïncidence étonnante que j'ai mentionnée plus tôt. Avant de parler de cette partie du code, je veux faire le point où nous en sommes.
Chaque lettre majuscule représente +1 pour une réponse correcte; les 15 premières questions (à Atravers O) apparaissent 5 fois chacune dans la chaîne, et les 10 dernières questions (à Ptravers Y) apparaissent 6 fois chacune. Ce morceau n'est pas vraiment magique; Je l'ai conçu de cette façon quand j'ai choisi le nombre 135 plus tôt dans le programme (qui est 5 × 15 + 6 × 10), et le seul coup de chance ici est que 5 se trouve être un nombre impair (c'est donc le dernier 10 questions qui finissent par apparaître les heures supplémentaires, plutôt que les 10 premières). Les 15 lettres précédant immédiatement cette contiennent ppar t(-1 des questions de pénalité) une fois, et à utravers y(la question de pénalité -2) deux fois. Ce n'est pas non plus une coïncidence; parce que nous avons utilisém0plus tôt, les copies supplémentaires des questions sont dans l'ordre PQRSTUVWXYYXWVUTSRQP, et les questions ultérieures se poseront naturellement près du milieu de cette chaîne (donc prendre les 15 dernières questions "supplémentaires" donnera moins de répétitions à celles près des bords; et bien sûr, il n'est pas surprenant que les questions "supplémentaires" viennent en dernier).
Parce que chaque lettre minuscule soustrait 1 du score pour une réponse incorrecte et non manquante, et chaque lettre majuscule ajoute 1 au score pour une réponse correcte, nous devons donc simplement prendre les 135 + 15 = 150 derniers éléments afin d'obtenir chaque type d'élément le nombre correct de fois. La commande de Jelly pour obtenir une sous-chaîne à la fin d'une liste est ṫ; cependant, il ne spécifie pas le nombre d'éléments que vous voulez, mais plutôt l'index du premier élément que vous voulez. Nous avons 405 éléments à ce stade et voulons 150, nous devons donc commencer à l'index (405 - 150 + 1), ou 256. Dans une étonnante coïncidence, 256 se trouve être le nombre d'octets distincts qui existent, et a donc une courte représentation dans Jelly (⁹). Il y avait très peu que je pouvais faire pour y arriver; l'étape 4 a ajouté 135 autres éléments au début de la liste afin de frapper le numéro du tour, mais le fait qu'il s'agissait de 135 éléments que j'ai dû ajouter (une valeur qui était facilement disponible à ce stade du programme) était vraiment pratique, avec pratiquement tout autre numéro étant complètement inutile dans cette situation.
Voici à quoi ressemble maintenant la valeur interne:
uvwxyyxwvutsrqpABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
ONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
ONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
S
Enfin, nous avons maintenant une liste de modifications du score des questions, tout ce que nous devons faire est de les additionner en utilisant S, et nous avons terminé.