Dieses Programm verwendet ein Paar [Antworten des Schülers, richtige Antworten] als Eingabe und verwendet Leerzeichen, um eine fehlende Antwort anzuzeigen.
Dieses Programm verwendet einige bizarre interne Eingabeformate, um zu verfolgen, was gerade passiert.
Z
Dadurch wird die Eingabe transponiert. Am Ende erhalten Sie eine Liste mit 25 Elementen, eines für jede Frage. Jedes Element hat die Form [Antwort des Schülers, richtige Antwort]. Wir werden ein Element dieses Formulars mit einem Großbuchstaben kennzeichnen. Afür Frage 1, Bfür Frage 2 und so weiter. Die Antworten werden also aktuell als gespeichert
ABCDEFGHIJKLMNOPQRSTUVWXY
m0
Dies ist eine "größere Palindrom" -Operation; wir hängen die Umkehrung des aktuellen Wertes an den Wert selbst an und ergeben dies:
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ṁ135
Der ṁ(Form-) Operator führt eine Reihe von Dingen aus, in diesem Kontext werden jedoch die ersten 135 Elemente der unendlichen Liste effektiv verwendet, indem der aktuelle Wert wiederholt an sich selbst angehängt wird. Das gibt uns Folgendes (das ich der Einfachheit halber in Gruppen von 50 Elementen unterteilt habe; dies ist nur eine Liste von 135 Paaren intern):
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
µ;
µSetzt den aktuellen Wert als neuen Standard für fehlende Operanden. Wir sehen dann sofort ein eingebautes Objekt, dem ein Operand fehlt. ;Anhängen, aber wir haben nicht angegeben, was angehängt werden soll. Infolgedessen wird der aktuelle Wert an den Wert ab dem letzten Wert µ(der auch der aktuelle Wert ist) angehängt. Dies ergibt den folgenden aktuellen Wert von 270 Elementen:
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQPABCDEFGHIJKLMNO
PQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNO
PQRSTUVWXYYXWVUTSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNO
PQRSTUVWXYYXWVUTSRQP
t€⁶
Denken Sie daran, dass alle Großbuchstaben Paare von [Antwort des Schülers, richtige Antwort] darstellen. Die t€⁶Operation bearbeitet jedes ( €) Paar und löscht ( t) Leerzeichen ( ⁶) von beiden Seiten des Paares (dh alle Leerzeichen, die im Paar erscheinen). Wir haben also immer noch dieselbe gewundene Liste von 270 Fragen mit vielen Wiederholungen, aber sie haben die Form [richtige Antwort] (Schüler hat nicht geantwortet) oder [Schüler hat geantwortet, richtige Antwort] (Schüler hat geantwortet).
E€’
Die E€’Operation wirkt sich auch auf jedes ( €) Element aus und Eersetzt das Element aufgrund der Verwendung von durch 1, wenn alle Elemente gleich sind (dh der Schüler hat die Frage nicht beantwortet oder richtig beantwortet), oder durch 0, wenn nicht alle Elemente sind gleich (dh der Schüler hat geantwortet, aber die Frage falsch gestellt). Die Verwendung von ’hier ändert die Nummerierung, was bedeutet, dass wir jetzt -1 bzw. 0 verwenden. Ich werde für diese neue Art von Element Kleinbuchstaben verwenden, wobei -1 für eine Antwort verwendet wird, die bei einer Frage mit Strafmaß bestraft würde, oder 0 für eine fehlende oder korrekte Antwort:
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqpabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqp
;E€
Wir haben beide E€und ;vorher gesehen; Wir hängen etwas an den aktuellen Wert an und verwenden das Format 1, wenn alle Elemente gleich sind, oder 0, wenn einige unterschiedlich sind ( ’diesmal nicht!). Da hier ein Operand fehlt, verwenden wir den Wert vom letzten µ(dh die Ausgabe von Schritt 3). Zurück in Schritt 3 hatten wir keine Leerzeichen aus den Elementen gelöscht, daher haben wir 1 für eine korrekte Antwort oder 0 für eine falsche oder fehlende Antwort (da ein Leerzeichen nicht mit der korrekten Antwort übereinstimmt). Von nun an verwende ich Großbuchstaben für dieses 1 = richtige, 0 = falsche / fehlende Format und weiterhin Kleinbuchstaben für 0 = richtige / fehlende, -1 = falsche. Der resultierende Wert hat 405 Elemente und sieht folgendermaßen aus:
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyyxwvutsrqpabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqponmlkjihgfedcbaabcdefghijklmno
pqrstuvwxyyxwvutsrqpABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
TSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
TSRQPONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVU
TSRQP
ṫ⁹
Hier kommt der erstaunliche Zufall, den ich zuvor erwähnt habe. Bevor ich über diesen Teil des Codes spreche, möchte ich eine Bestandsaufnahme machen, wo wir hin müssen.
Jeder Großbuchstabe steht für +1 für eine korrekte Antwort. Die ersten 15 Fragen ( Abis O) werden jeweils fünfmal in der Zeichenfolge angezeigt, und die letzten 10 Fragen ( Pbis Y) werden jeweils sechsmal angezeigt. Dieser Teil ist nicht wirklich magisch; Ich habe es so entworfen, als ich die Nummer 135 früher im Programm gewählt habe (das ist 5 × 15 + 6 × 10), und der einzige Glücksfall hier ist, dass 5 zufällig eine ungerade Nummer ist (es sind also die letzten 10) Fragen, die am Ende die zusätzlichen Male erscheinen, anstatt die ersten 10). Die 15 Buchstaben unmittelbar davor enthaltenp durch t(-1 die Strafe Fragen) einmal und udurch y(die Strafe -2 - Fragen) zweimal. Das ist auch kein großer Zufall; weil wir benutzt habenm0Zuvor waren die zusätzlichen Kopien der Fragen in der ReihenfolgePQRSTUVWXYYXWVUTSRQP, und die späteren Fragen werden natürlich in der Mitte dieser Zeichenfolge auftreten (wenn Sie also die letzten 15 der "zusätzlichen" Fragen nehmen, werden die Fragen in der Nähe der Ränder weniger wiederholt; und natürlich ist es keine Überraschung, dass die "zusätzlichen" Fragen kommen zuletzt).
Da jeder Kleinbuchstabe für eine falsche, nicht fehlende Antwort 1 von der Punktzahl abzieht und jeder Großbuchstabe für eine korrekte Antwort 1 zur Punktzahl hinzufügt, müssen wir einfach die letzten 135 + 15 = 150 Elemente nehmen, um zu erhalten jede Art von Element die richtige Anzahl von Malen. Jellys Befehl zum Abrufen einer Teilzeichenfolge am Ende einer Liste lautetṫ : Es wird jedoch nicht die Anzahl der gewünschten Elemente angegeben, sondern der Index des ersten gewünschten Elements. Wir haben zu diesem Zeitpunkt 405 Elemente und wollen 150, also müssen wir mit dem Index (405 - 150 + 1) oder 256 beginnen. In einem erstaunlichen Zufall ist 256 zufällig die Anzahl der unterschiedlichen Oktette, die existieren, und hat somit eine kurze Darstellung in Jelly (⁹). Ich konnte sehr wenig tun, um dies zu erreichen. Schritt 4 fügte weitere 135 Elemente zum Anfang der Liste hinzu, um die runde Zahl zu treffen, aber die Tatsache, dass es sich um 135 Elemente handelte, die ich hinzufügen musste (ein Wert, der zu diesem Zeitpunkt im Programm leicht verfügbar war), war wirklich praktisch. Im Grunde genommen ist jede andere Nummer in dieser Situation nicht hilfreich.
So sieht der interne Wert jetzt aus:
uvwxyyxwvutsrqpABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
ONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
ONMLKJIHGFEDCBAABCDEFGHIJKLMNOPQRSTUVWXYYXWVUTSRQP
S
Endlich haben wir eine Liste mit Änderungen an der Punktzahl von Fragen. Alles, was wir tun müssen, ist, sie mit zu summieren S, und fertig.