Jetzt ist die Zeit gekommen, Ihre Fähigkeiten zum Schreiben von schlechtem Code unter Beweis zu stellen. Ich probiere eine neue Art von Programmierrätsel aus, die meiner Meinung nach dem hinterhältigen C-Wettbewerb am ähnlichsten ist. Der Hauptunterschied besteht darin, dass dies bei weitem nicht so ruchlos ist: Es ist nur ein guter, sauberer Spaß. Das Ziel des Puzzles ist es, so viele Bugs wie möglich in ein Programm zu packen. Der Gewinner dieses Wettbewerbs ist derjenige, der das Programm mit den meisten Fehlern pro Charakter schreibt.
Um eine Vielzahl von Kommentaren zu vermeiden, die um Klärung bitten, sollte ich jetzt definieren, was ich als qualifizierende Bugs betrachte.
Erstens ist ein Fehler kein Fehler . Wenn es sich um ein Problem handelt, das vom Interpreter als Fehler erkannt werden kann (z. B. nicht übereinstimmende Begrenzungszeichen, falsch geformte Syntax, Zugreifen auf eine Eigenschaft eines Nullobjekts usw.), oder wenn es die Ausführung oder Fortsetzung des Programms verhindert, ist dies nicht der Fall ein Käfer. Andernfalls könnten Sie vier Zeichen eingeben und der Interpreter könnte acht Syntaxfehler auflisten und Sie könnten ein Fehler-Zeichen-Verhältnis von 2 angeben.
Zweitens darf der Fehler nicht offensichtlich falsch sein und ein Fehler ist kein Osterei . Dies ist sicherlich ein subjektives Kriterium, aber ich denke wesentlich für diese Art von Wettbewerb. Dies bedeutet, dass Sie keinen bedingten Code haben können, der den Code auf offensichtliche Weise spezifisch manipuliert. (Lies: benutze eine turing pit Sprache, weil niemand den Unterschied kennt).
Drittens muss der Fehler plausibel sein . Dies ist subjektiv, wie das obige, aber der Fehler muss so aussehen, als ob er von einer weniger akribischen oder vielleicht ignoranten Person oder von jemandem geschrieben worden wäre, der gerade einen Fehler gemacht hat. Dies umfasst beispielsweise Fehler oder eine Syntax, die gültig ist und korrekt aussieht, jedoch unerwünschtes Verhalten verursacht (z. B. Verwendung eckiger Klammern anstelle von Klammern).
Der Fehler kann zu unerwünschtem Verhalten des Programms führen, einschließlich, aber nicht beschränkt auf unerwünschte Ausgaben in bestimmten Ausnahmefällen, die auf scheinbar nicht miteinander in Zusammenhang stehenden Ereignissen beruhen (z. B. werden die Ausgaben unterschiedlich angezeigt, je nachdem, ob die aktuelle Zeit endet) mit einer ungeraden oder geraden Anzahl von Sekunden), Speicherlecks, Datenverlust usw.
Beispiel Problem:
Erstellen Sie ein Programm, das alle ASCII-Zeichen in aufsteigender Reihenfolge ihres numerischen Werts anzeigt.
Beispielantwort:
Brainf ***, 5 Zeichen, 1 Bug, 0,2 Bug-Char-Ratio
+[+.]
Fehler: zeigt das ASCII-Zeichen für 1 nicht an. Konnte durch Ändern auf behoben werden .+[.+]
.
Ok, ich denke du hättest es jetzt meistens haben sollen, hier ist dein Rätsel:
Dekodiere eine Caesar-Chiffre und sortiere die Wörter alphabetisch
Eine Caesar-Chiffre wird erstellt, indem eine Reihe von Buchstaben genommen und n Buchstaben im Alphabet verschoben werden . Wenn es bis zum Anfang oder Ende des Alphabets reicht, steht A nach Z und Z vor A. Zum Beispiel:
Mannequin
Nboofrvjo //Shifted over 1 or -25
Wkxxoaesx //Shifted over 10 -16
Ftggxjnbg //Shifted over -7 or 19
Sie erhalten zwei Eingaben (Sie können Eingaben erhalten, die jedoch aus vernünftigen Gründen für Sie am bequemsten sind). Die erste Eingabe sind die Wörter und die zweite Eingabe ist der Wert, um den verschoben wird. Ihre Aufgabe ist es, die decodierten Wörter und anschließend die decodierten Wörter auszugeben, nachdem sie alphabetisch sortiert wurden.
Beispiel (keine Beleidigung für böse Jungs, es ist nur ein Beispiel):
Erste Eingabe: gtdx wjbfwiji. ljy Gfi hfssty
Zweiter Eingang: 5
Erster Output: Jungs belohnt. schlecht werden kann nicht
Zweite Ausgabe: Böse Jungs können nicht belohnt werden.
Viel Glück!