Jeden Tag, jede Minute, ... jede Mikrosekunde werden viele Entscheidungen von Ihrem Computer getroffen. In Hochsprachen haben diese normalerweise die Form von Anweisungen wie if
, while
und for
, aber auf der grundlegendsten Ebene gibt es Anweisungen in Maschinensprache, die als Verzweigungs- / Sprunganweisungen bezeichnet werden . Moderne Prozessoren stellen Anweisungen in einer Pipeline in die Warteschlange , und dies bedeutet, dass der Prozessor entscheiden muss, ob die Pipeline mit Anweisungen unmittelbar nach einer Verzweigung (dh nicht genommen ) oder den Anweisungen am Verzweigungsziel gefüllt werden soll.
Wenn der Prozessor nicht richtig errät, müssen die Anweisungen, die falsch in die Pipeline eingegeben wurden, ignoriert und die richtigen Anweisungen abgerufen werden, was zu einer Verzögerung führt. Die Aufgabe des Zweigprädiktors besteht darin, zu erraten, ob der Zweig genommen wird, um die kostspieligen Maßnahmen zum Nachfüllen der Pipeline zu vermeiden.
Sie müssen einen Prädiktor schreiben, der bei einer Abfolge vergangener Entscheidungen die nächste Entscheidung richtig errät. Ihr Programm kann in jeder Sprache geschrieben werden, vorausgesetzt, Sie geben den Link zu seinem Interpreter an, wenn es sich um eine obskure / Golfsprache handelt. Es muss den tatsächlichen Verlauf der Vergangenheit als erstes Befehlszeilenargument verwenden, wird jedoch nicht für die erste Vermutung der Sequenz bereitgestellt. Sie müssen dann Ihre Vermutung zurückgeben, indem Sie sie auf stdout drucken. Eine Entscheidung hat die Form "y" oder "n". Jeder Testfall besteht aus einer Folge von 72 Entscheidungen. Sie können also davon ausgehen, dass das angegebene Verlaufsargument niemals länger als 71 Zeichen sein wird. Zum Beispiel der Test "Alternating 1":
ynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynyn
Sie werden disqualifiziert, wenn Ihr Programm:
- gibt nicht innerhalb einer Sekunde ein Ergebnis zurück
- gibt weder ein
y
noch einn
(neue Zeilen spielen keine Rolle und werden ignoriert) - versucht, Code oder Dateien zu ändern, die mit dieser Herausforderung verbunden sind, einschließlich des Codes anderer Konkurrenten
- enthält alles andere böswillige
Sie können eine Datei für die Persistenz verwenden, wenn Sie dies wünschen. Sie muss jedoch eindeutig benannt sein und den oben genannten Anforderungen entsprechen.
Dies ist eine Code-Herausforderung , kein Code-Golf . Der Sieg wird vom Zweigprädiktor-Prädiktor dem Konkurrenten gewährt, dessen Lösung die meisten Zweige in der gesamten Testsuite erfolgreich vorhersagt. Tests:
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy,All yes
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn,All no
ynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynynyn,Alternating 1
nnyynnyynnyynnyynnyynnyynnyynnyynnyynnyynnyynnyynnyynnyynnyynnyynnyynnyy,Alternating 2
yyynnnyyynnnyyynnnyyynnnyyynnnyyynnnyyynnnyyynnnyyynnnyyynnnyyynnnyyynnn,Alternating 3
nnnnyyyynnnnyyyynnnnyyyynnnnyyyynnnnyyyynnnnyyyynnnnyyyynnnnyyyynnnnyyyy,Alternating 4
yyyyyynnnnnnyyyyyynnnnnnyyyyyynnnnnnyyyyyynnnnnnyyyyyynnnnnnyyyyyynnnnnn,Alternating 5
nnnnnnnnnnnnyyyyyyyyyyyynnnnnnnnnnnnyyyyyyyyyyyynnnnnnnnnnnnyyyyyyyyyyyy,Alternating 6
yyyyyyyyyyyyyyyyyynnnnnnnnnnnnnnnnnnyyyyyyyyyyyyyyyyyynnnnnnnnnnnnnnnnnn,Alternating 7
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyynnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn,Alternating 8
yynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyynyyn,2-1
ynnnynnnynnnynnnynnnynnnynnnynnnynnnynnnynnnynnnynnnynnnynnnynnnynnnynnn,1-3
nyyyyynyyyyynyyyyynyyyyynyyyyynyyyyynyyyyynyyyyynyyyyynyyyyynyyyyynyyyyy,5-1
nnnnnnnnnnnynnnnnnnnnnnynnnnnnnnnnnynnnnnnnnnnnynnnnnnnnnnnynnnnnnnnnnny,1-11
nyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyynyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy,35-1
yynnnnyynnnnyynnnnyynnnnyynnnnyynnnnyynnnnyynnnnyynnnnyynnnnyynnnnyynnnn,2-4
ynnyyynyynnnynnyyynyynnnynnyyynyynnnynnyyynyynnnynnyyynyynnnynnyyynyynnn,1-2-3
ynynynynynynynynynynynynynynynynynynyyyyyyyyyyyyyyyyyynnnnnnnnnnnnnnnnnn,A1/A7
yyyyyynnnnnnyyyyyynnnnnnyyyyyynnnnnnnnyynnyynnyynnyynnyynnyynnyynnyynnyy,A5/A2
nnnnnnnnnnnnyyyyyyyyyyyynnnnnnnnnnnnyyyynnnnyyyynnnnyyyynnnnyyyynnnnyyyy,A6/A4
nyyyyynyyyyynyyyyynyyyyynyyyyynyyyyynyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy,5-1/35-1
yyynnnyyynnnyyynnnnyyyyyyyyyyyyyyyyyyyyyyynyyyyynyyyyyyynnnnyynnnnyynnnn,A3/Y/5-1/2-4
yynnnnyynnnnyynnnnnyynnnynnyyynyynnnnnnynnnynnnynnnynnyynyynyynyynyynyyn,2-4/1-2-3/1-3/2-1
Die vollständigen Tests und das Runner-Programm befinden sich in diesem GitHub-Repository . Fügen Sie einfach Ihren Prädiktor src/predictors.txt
in das Formular ein <name>,<command to run>
und führen Sie ihn aus main.py
. Ich habe bereits zwei sehr grundlegende Prädiktoren für einfache Tests bereitgestellt. Ich würde eine Spaltenbreite von mindestens 92 empfehlen, wenn der Runner für eine schöne Ausgabe ausgeführt wird. Wenn Sie irgendwelche Fehler damit entdecken, lassen Sie es mich bitte wissen. :) :)