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!
quelle
Antworten:
Ruby, 136 Zeichen, 7 Bugs, Ratio = 0,051
[/\d+/]
: negative Zahlen haben ein entferntes Vorzeichen (ein scheinbarer Versuch der Eingabevalidierung)'\s'
: Backlash-Escapes werden nur in Strings in doppelten Anführungszeichen interpretiert, sodass kein Leerzeichen, sondern ein Literal generiert wird\s
split(/ /)
: im Gegensatz zu einer Ebenesplit
wird dies nicht in Zeilenumbrüchen aufgeteilt (so dass das letzte Wort die Zeilenumbrüche beibehält)/[^.,:;?!]/
: Diese Regex schließt Interpunktion aus, jedoch keine Großbuchstaben, Ziffern oder Unterstriche und vor allem Zeilenumbrüche97
: alles andere als Interpunktion oder Kleinbuchstaben wird verstümmeltsort_by{|a|a[0]}
: Anscheinend wusste der Programmierer nichts davonsort
und verwendete stattdessen diese lächerliche Methode, bei der Wörter, die mit demselben Buchstaben beginnen, nicht sortiert werdenprint
: Im Gegensatzputs
dazu wird zwischen den einzelnen Argumenten kein Zeilenumbruch ausgegeben (daher werden die Zeichenfolgen zusammengeklebt).quelle
Ich werde meine eigene Antwort nicht akzeptieren, aber ich dachte, ich würde Ihnen den ultimativen Buggy-Sortier-Entschlüsseler zeigen. Das Tolle daran ist, dass ich nicht einmal die meisten Bugs geplant habe.
Brainf ***: 483 Zeichen, 11 Bugs
Eingang:
Ausgabe:
Liste der Fehler :
Eingabe- / Anzeigefehler:
Nicht positive Zahlen oder Zahlen mit mehr als einer Ziffer unterbrechen das Programm.
Der Entschlüsseler lässt Z nicht vor A kommen. Er subtrahiert nur den ASCII-Zeichenwert.
Leerzeichen werden als ASCII-ESC-Zeichen (27) angezeigt.
Wenn die Eingabe nicht durch einen Tabulator beendet wird, wird das Programm nach den Eingabeanweisungen nicht fortgesetzt.
Das Programm muss manuell beendet werden. Es wird kontinuierlich das ESC-Zeichen angezeigt, bis es gestoppt wird.
Das Programm bricht ab, wenn die Eingabedatei nicht ASCII-codiert ist.
Das Programm zeigt nicht das erste Zeichen der sortierten Ausgabe an.
Fehler sortieren:
Die Sortierung habe ich äußerst naiv umgesetzt.
Das Programm bricht ab, wenn die Anzahl der Wörter nicht 5 beträgt.
Das Programm bricht ab, wenn die Anzahl der eingegebenen Bytes 60 überschreitet.
Das Programm kann nur dann richtig sortieren, wenn die alphabetische Reihenfolge mit der Beispieleingabe identisch ist.
Das Programm fügt zusätzliche Leerzeichen hinzu, wenn eines der Wörter kleiner als die Beispieleingabe ist, und überschreibt Zeichen, wenn eines der Wörter länger ist.
Ich habe ein Bug-Char-Verhältnis von 0,0228 . Zugegeben, Joey hat mich geschlagen , aber ich bin stolz darauf, dass ich nur 8 verschiedene Charaktere in meinem Programm verwendet habe und meine Bugs viel kritischer sind.
quelle
re]arded
? Hört sich ernst an.C - 224 Zeichen, 2 Bugs, 7 Fälle von undefiniertem Verhalten
Edit: Meine Einschätzung hier ist falsch. Das Überlaufen einer Ganzzahl ohne Vorzeichen ist in C genau definiert . Darüber hinaus ist der Vergleich zwischen vorzeichenbehafteten und nicht vorzeichenbehafteten Elementen ebenfalls genau definiert. Der Compiler warnt jedoch, da die Art und Weise, wie sie definiert ist, möglicherweise nicht Ihren Vorstellungen entspricht.
Verwendung:
Nervenzusammenbruch:
quelle
JavaScript: 403 Zeichen, 8 Bugs, Ratio = 0,0199
Obwohl nicht so schlimm wie C, hat JavaScript Designfehler, die zu Fehlern führen können, zumindest wenn sie von einem Anfänger verwendet werden ( Demo mit allen nicht behobenen Fehlern ).
I + H
ist Zeichenkettenverkettung, nicht Addition:undefinedundefinedundefined...
!I
ist nicht die richtige Methode, um den Rückgabewert von zu überprüfen.indexOf()
, der -1 für eine Nichtübereinstimmung zurückgibt:boysVrewardedVV...
else
Keywords:boys Vrewarded.V Vget...
...cannotundefinedundefined...
boys rebwoayrsd erde.w agredte dB.a dg ecta nBnaodt cannot
.Beachten Sie auch, dass dies in älteren IE-Versionen nicht funktioniert, da eine Erweiterung von ECMAScript 3 verwendet wird, die nur in ES5 standardisiert wurde.
quelle
Python3 184 Zeichen, 4 Bugs. Fehlerrate 0,0217
entgolfet:
Beispiel Eingabe: gtdx wjbfwiji. ljy Gfi hfssty
Beispieleingabe: -5
Beispielausgabe: G
canxrb
mmnsfdsqdv`qcdc.Bekannte Fehler:
Ich bin nicht sehr gut darin, absichtlich Fehler zu finden.
quelle