Im Jahr 1984 schrieb Michael Crichton ein Sicherheitsprogramm in BASIC, das in der Zeitschrift Creative Computing veröffentlicht wurde. Das Programm fordert den Benutzer auf, eine Phrase seiner Wahl einzugeben, die Intervalle zwischen den Tastenanschlägen aufzuzeichnen und ihn dann aufzufordern, die Phrase erneut einzugeben. Wenn sich die Timings zu stark unterscheiden würden, würde das Programm den Benutzer als Betrüger identifizieren.
Ihre Aufgabe: Erstellen Sie eine Version von Crichtons Programm in der Sprache Ihrer Wahl.
Regeln:
Sätze für die Kommunikation mit dem Benutzer ("Bitte geben Sie den Schlüsselbegriff ein", "Bitte geben Sie den Schlüsselbegriff erneut ein" usw.) zählen unabhängig von der tatsächlichen Länge jeweils als ein Byte. Dies ist nur für die Benutzerkommunikation gedacht. Versuchen Sie nicht, Programmcode in den Zeichenfolgen zu verbergen.
Der Pass / Fail-Test sollte auf dem durchschnittlichen absoluten Wert der prozentualen Abweichungen von den ursprünglichen Intervallen basieren. Wenn die Zeichenfolgen nicht übereinstimmen, können Sie nach eigenem Ermessen entweder fehlschlagen oder den Benutzer erneut versuchen lassen.
Die Schlüsselphrase sollte keine Nullzeichenfolge zulassen. Falls die Schlüsselphrase für Ihren String-Datentyp zu lang ist, können Sie sie nach eigenem Ermessen abschneiden oder nicht zulassen und neu beginnen.
Die Empfindlichkeit des Tests (der Schwellenwert für den Pass / Fail-Test) sollte im Quellcode einstellbar sein.
Ich habe ursprünglich einen Bonus von 20% der Gesamtbytezahl bereitgestellt, wenn Ihr Quellcode so formatiert werden kann, dass er erkennbar einem Dinosaurier ähnelt. Es wurde darauf hingewiesen, dass dies sehr subjektiv und möglicherweise besser für einen Beliebtheitswettbewerb geeignet ist, daher habe ich diesen Bonus entfernt. Ich empfehle jedoch weiterhin von Herzen, Dinosaurier zu formatieren. Wenn Sie Ihren Code so formatieren, dass er wie ein Dinosaurier aussieht, können Sie rein kosmetische Kommentare, Zeilenumbrüche oder Leerzeichen von Ihrer Bytesumme abziehen.
Die kürzeste Byteanzahl gewinnt, abhängig von der Anpassung der Zeichenfolgenlänge und der Dinosaurierformatierung.
Beachten Sie, dass meine obige Spezifikation nicht genau mit der Funktionsweise des Crichton-Codes übereinstimmt, von dem Kopien online verfügbar sind. Befolgen Sie die Spezifikation, versuchen Sie nicht, das Original zu klonen.
"Please type the key phrase"als 1 Byte oder zählt nur die Phrase und die zitierte Phrase als 3 Bytes ( ", Phrase, ")? Ist es beabsichtigt, dass ein viel längeres und ein viel kürzeres Intervall "aufheben" und wieder gleichmäßig werden? Muss das Programm überprüfen, ob die beiden Schlüsselphrasen übereinstimmen?