Brechen Sie einige Standards! [geschlossen]

14

Jeder kennt die Redewendung "Regeln sind dafür gemacht, gebrochen zu werden!", Also ist hier Ihre Aufgabe:

Schreiben Sie Code in einer Sprache, die einen Standard verletzt. Dies kann alles sein, vom Abschalten von 240 Volt über ein USB-Kabel bis hin zum Pingen Ihres Routers ( NICHT der Website eines anderen!) Mit einem 10-MB-Paket! (Keine Ahnung, beides wird wahrscheinlich allerlei Schicksal verursachen!)

Die am besten bewertete Antwort nach 10 Tagen (dh die schwerwiegendste Verletzung) gewinnt!

Regeln:

  1. Der Code muss erklärt werden.
  2. Der Standard, den Sie brechen, muss verknüpft sein, und Sie müssen erklären, was Sie tun (impliziert 1), um ihn zu brechen. Andernfalls werden Antworten nicht akzeptiert.
  3. Antworten, die den Interpreter zum Absturz bringen oder ihn zum Funktionieren bringen, werden nicht akzeptiert. Ich hätte gerne kreative Antworten, nicht nur etwas 𐒢in IDLE einzufügen (was es zum Absturz bringt)
  4. Das Ausnutzen von Fehlern ist nicht gestattet, es sei denn, sie verstoßen gegen einen Standard. Andernfalls werden Antworten nicht akzeptiert

Fangen Sie an und haben Sie Spaß!

George
quelle
18
Die Mehrheit der Antworten auf dieser Website verletzen mindestens ein Standard - Kodierung ...
Komintern
2
Das ist bei mir nicht original, aber ... animiertes JPEG!
Kendall Frey
Hey, du hast Recht mit 𐒢
TheDoctor
4
Meine Schüler neigen dazu, beim Schreiben von Code gegen QA-Standards zu verstoßen. Sie haben es verdient, zu gewinnen!
Max Ried
1
Anregungen finden Sie unter "So implementieren Sie GOTO in Java": stackoverflow.com/questions/2430782/…
Abulafia

Antworten:

68

Python

print 'Hello World'

Erläuterung:

Der Standard des Programming Puzzles & Code Golf Stack Exchange ist zu

Lesen Sie die Frage sorgfältig durch. Was genau ist die Frage, die gestellt wird? Stellen Sie sicher, dass Ihre Antwort dies vorsieht


Dieser Code beantwortet die Frage nicht und verstößt somit gegen den Standard.

user12205
quelle
1
Oder um einen Standard in Python 2 zu brechenprint("hello world")
TheDoctor
10
@TheDoctor aber wenn ich den Python - Standard brechen, ich kann den codegolf.SE Standard nicht brechen
user12205
18
Aber wenn diese Frage den Standard für diese Frage bricht und erklärt, dann bricht sie nicht den Standard. Aber dann ist es ungültig und muss einen Python-Standard brechen, was es nicht ist! Ein Paradoxon - es bricht die Standards der Realität!
Kojiro
2
Da dies ein Beliebtheitswettbewerb ist, muss ich mich für diese unglaublich kreative Antwort entscheiden, die die meisten Stimmen hat! Auch wenn es nichts zum Abbrechen / Neustarten bringt :(. Wie auch immer gute Antwort. Gut gemacht :)
George
5
Dies ist eine gültige Antwort, da sie keine gültige Antwort ist.
Primo
24

C
Hier ist ein Fakultätsprogramm, das kompiliert und erfolgreich ausgeführt wird (mit gcc4.6.3 unter Ubuntu 12.04), das jedoch so viel undefiniertes Verhalten gemäß dem C-Standard aufruft, wie ich einschließen kann. Die meisten sind von hier inspiriert . Ein Großteil des verbleibenden Gesetzes ist einfach schlecht.

int read(char** src, int into){
  int _r;                             //leading underscores reserved, and
  if (!--into) sscanf(*src,"%d",&into); //_r uninitalized
  *(*(--src)+into)=_r>>360;            //shifting more bits than we have
  while (into-->0) (*src)[into]='.'; //modifying const char argv
  printf(*src); // no return statement
}

main(int argc, const char** const argv){
  union  { int x; float y;} result;
  int f,minus1=0xFFFFFFFF,r,a[]={0};
  r=a[3]&2;                     //accessing past end of array
  result.x=read(&argv[r],--r);  //relying on order of arguments
  for(f=*(int*)&result.y;f;f+=minus1) //type punning/invalid union access,
    r*=f;                            //and unsigned overflow
  printf("%d\n",(&r+2)[-2]); //negative array indexes
}
Ahelly
quelle
1
Negative Indizes sind völlig legal, wenn der Zeiger nicht auf den Anfang des Arrays zeigt. Zum Teufel, es ist legal, eine Zahl mit einem Array zu indizieren, anstatt umgekehrt.
user2357112 unterstützt Monica
17

XHTML

<p>
   <div></div>
</p>

Die W3C-Spezifikation ( http://www.w3.org/TR/html-markup/p.html#p ):

p - Absatz

Das p-Element repräsentiert einen Absatz.

Zulässige Inhalte

Inhalt formulieren

Oh, ich fühle mich schmutzig!

Edit: @xfix wies darauf hin, dass der Fehler, den ich , tatsächlich XHTML war. Der dadurch verursachte HTML-Fehler ist kühler und weniger offensichtlich, so dass:

<p><div></div><p>wird, <p /><div></div></p>weil das dazu führt, <div>dass sich das <p>selbst schließt. Dies führt zu einem Fehler, da versucht wird, einen nicht vorhandenen Absatz zu schließen.

George Reith
quelle
Dies ist hier kein Problem. Das eigentliche Problem ist, dass das </p>Tag existiert, ohne es zu schließen, da es <div>automatisch geschlossen wird <p>.
Konrad Borowski
@xfix Haben Sie einen Verweis auf die Spezifikation, in der dieses Verhalten definiert ist? Der W3-Validator wird dies mit dem erwarteten Fehler abwürgen. Ich denke, Sie beschreiben eine Browser-Implementierung und nicht HTML selbst.
George Reith
1
Möglicherweise denken Sie an XHTML. In HTML4 und HTML5 <p>wird durch bestimmte Tags geschlossen. Für den HTML4-Validator erhalte ich das "End-Tag für das Element" P ", das nicht geöffnet ist".
Konrad Borowski
@xfix Richtig, Sie sind! Ich werde das später bearbeiten. Prost
George Reith
Ist es so, dass Sie noch nie typisches Java-Entwickler-HTML gesehen haben oder möchten Sie einfach nicht, dass so viele gebrochene Standards aufgelistet werden?
Erik Reppen
12

HTTP / 1.1: Antwort - Statuscode und Begründungssatz

Das Status-Code-Element ist eine 3-stellige ...

Muss ich noch weiter gehen? Dieser Statuscode ist keiner der im Standard definierten Codes. Es beginnt nicht einmal mit einer der erforderlichen Kategoriestellen. Es ist nicht einmal 3 Ziffern lang.

Mein Browser schafft es immer noch, die Seite in Ordnung zu laden.

Außerdem verstößt diese Antwort gegen einen der "Standards" dieser Site :)

Ausgang (Statuszeile):

HTTP/1.1 0 :)
var http = require("http");
var server = http.createServer(onHttpRequest);
server.listen(80);

function onHttpRequest(request, response)
{
    response.writeHead(0, ":)", { "Content-Type": "text/plain" });
    response.write("Hello, World!");
    response.end();
}

JavaScript (Knoten)

Kendall Frey
quelle
1
Haben Sie aus Neugier einen vierstelligen Statuscode ausprobiert? Fünfstellig?
MatrixFrog
@ MatrixFrog Ich habe versucht, einen 4-stelligen Code. Der Browser war damit einverstanden. Ich ging mit einer 0, weil es mehr vom Standard bricht.
Kendall Frey
12

Wie viele Standards habe ich gerade gebrochen?

Ich habe hier wirklich einige schreckliche Programmierungen gemacht.

PHP

a: goto lol; begin();
b: 
c: echo j; goto h;
d: echo u;
e: echo s;
f: echo t;
g: 
h: echo k; goto o;
i: echo i; goto c;
j: echo l;
k: echo l;
l: echo e;
m: echo d;
n:
o: echo s;
p: echo t; goto u;
q: echo a; goto z;
r: echo n;
s: echo d;
t: echo a;
u: echo r; goto q;
v: echo D; goto i;
w: echo s;
x: 
y:
z: die("!");
lol: goto v;

Osterei: Die echoed Buchstaben, wenn sie vertikal gelesen werden, werden gelesen just killed standarDs!.

Anmerkung: Wenn Sie dieses Programm ausführen , wird der Name eines Mannes ausgegeben, der gotos wirklich geliebt hat .

Vereos
quelle
1
Wenn Sie es sofort sagen, ist es kein "Osterei" ...
Denys Séguret
9

Brechen von Unicode

Einfacher Algorithmus zum Umkehren eines Strings:

public string Reverse(string s)
{
    StringBuilder builder = new StringBuilder();
    for (int i = s.Length - 1; i >= 0; i--)
    {
        builder.Append(s[i]);
    }
    return builder.ToString();
}

Dies verstößt gegen den Unicode- Standard, da die Ersatzpaare nicht korrekt zusammengehalten werden und eine ungültige Zeichenfolge erstellt wird. In .NET und vielen anderen Plattformen / Programmiersprachen charist a nicht wirklich ein Zeichen, sondern eine UTF-16- Codeeinheit.

NB: Es ändert sich auch, welcher Buchstabe mit nachfolgenden Kombinationszeichen (z. B. diakritischen Zeichen) kombiniert wird, die möglicherweise beabsichtigt sind oder nicht.

Sebastian Negraszus
quelle
8

JavaScript

Führen Sie es in der Konsole auf dieser Seite aus.

var items = [], p = 1, finish = false, intr = setInterval(function() {
    if (p >= 10) finish = true
    $.get(unescape(escape('http://api.stackexchange.com/2.2/answers?page=' + (p++) + '&pagesize=100&order=desc&sort=votes&site=codegolf&filter=!*LVwAFZ.YnaK-KS*')), function(x) {
        items = items.concat(x.items)
        if (finish) {
            clearInterval(intr)
            onFinish()
        }
    })
}, 500)

function onFinish() {
    var item = items[Math.floor(Math.random() * items.length)]
    document.write(item.body)
}

Inspiriert von

Die meisten Antworten auf dieser Website verstoßen gegen mindestens einen Kodierungsstandard ... - Komintern vor 1 Stunde

Was es tut, ist die Ausgabe einer zufälligen Antwort aus den Top 1000 von Codegolf.SE (dh die Lösung des Problems in einer sehr meta- artigen Weise!), Komplett mit Formatierung und allem, auf Ihrer Seite!


Leider entspricht dies technisch nicht den Regeln, da die Ausgabe der Code mit den gebrochenen Standards ist, also habe ich in diesem Code einen Standard gebrochen - ich habe document.write(ewwww) verwendet. Ich muss auch einen Link angeben, also hier: Warum wird document.write als "schlechte Praxis" angesehen?

Wenn dies nicht als "Verstoß gegen die Standards" gilt, habe ich meine Zeichenfolge in unescape(escape())die gemäß MDN veraltete Zeichenfolge eingewickelt .

Beachten Sie, dass ich das alles nur mache, um die Regeln zu umgehen, und der Hauptpunkt dieser Antwort ist die Ausgabe.


Probelauf (zum Vergrößern Bild anklicken):

Bildschirmfoto

Türknauf
quelle
Sie sollten auch die varAnweisungen entfernen , damit sie mehr gegen die Standards verstoßen.
Scimonster
6

XML

Nicht meine "Erfindung", ich muss tatsächlich mit solchen XMLs arbeiten, die wir von einem sehr geheimen Ort bekommen:

<?xml version="1.0"?>
<!DOCTYPE data [
  <!ELEMENT data (field2)>
  <!ELEMENT field2 (#PCDATA)>
]>
<data>
  <field1>Rock & Roll</field1>
</data>
<data>
  <field1>Something else</field1>
</data>

Prüft nicht gegen seine eigene eingebettete DTD, enthält mehrere Roots und Et-Zeichen. (Es gibt auch andere übergeordnete Fehler, mehrdeutige Inhaltsmodelle usw., die hier nicht gezeigt werden.) Sehr traurig.

fejesjoco
quelle
Was ist der sehr geheime Ort? Klingt so, als würde dort eine großartige Programmierung stattfinden! ;)
George
Ist es streng geheimer FBI-Code?
Hosch250
Ungarisches
6

Das Festlegen der Netzmaske auf nicht zusammenhängende Bitmasken wurde von RFC 950 zwar zugelassen, wurde jedoch dringend empfohlen, ist jedoch seit RFC 1219 nicht mehr zulässig. BSD-ähnliche Systeme ermöglichen dies jedoch.

IPv4-Netzmasken bestehen wie eine IP-Adresse aus einer Kombination von vier Bytes. Es wird verwendet, um zu berechnen, ob sich zwei Hosts mit bekannten IP-Adressen und Netzmasken im selben Netzwerk befinden. Im Allgemeinen besteht eine IP-Adresse aus zwei Teilen: dem Netzwerk- und dem Host-Teil. Sagen Sie, Ihr Netzwerk zu Hause ist 192.168.1.1- 192.168.1.254. Der Host-Teil sind nämlich die ersten drei Bytes der IP 192.168.1.x. Das heißt, die Netzmaske ist 255.255.255.0, dh die ersten 24 Bits sind der Netzwerkteil. In Binär sieht die Maske so aus 11111111.11111111.11111111.00000000. Die 1-Bits sind fortlaufend. In meinem Beispiel wäre die Netzmaske 00010111.00000000.00000000.00101010. Was würde also passieren, wenn die Netzmaske nicht kontinuierlich ist? Anstatt am richtigen Ende zu sein, ist der Host-Teil über die gesamte IP-Adresse verteilt, was es sehr schwer macht, ihn zu lesen, genau wie meine Erklärung hier.

Erwarten Sie NICHT, dass danach irgendetwas funktioniert!

root@Gotthold /v/root# ifconfig en0 inet 47.11.23.42 netmask 23.0.0.42
root@Gotthold /v/root# ifconfig en0 inet
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 8192
    options=b<RXCSUM,TXCSUM,VLAN_HWTAGGING>
    inet 47.11.23.42 netmask 0x1700002a broadcast 239.255.255.255
Max Ried
quelle
Schön, aber was ist eine nicht zusammenhängende Bitmaske? Google gibt nichts zurück, was für mich von Bedeutung ist. (Entschuldigung!)
George
Einige Erklärungen hinzugefügt, vielleicht hilft das, ich bin nicht gut darin, Netzwerksachen zu erklären.
Max Ried
1
Ich bin tatsächlich auf nicht fortlaufende Netzmasken unter Windows gestoßen (und musste ein Programm reparieren, um dies zu verhindern), weil ein Benutzer einen Tippfehler gemacht hat (225 statt 252).
Dan04
6

C

Wie viele Fehler können Sie finden, die wahrscheinlich dazu führen, dass die meisten Unternehmen Ihren Code ablehnen (besonders gute). Die meisten davon sind wahrscheinlich Stilfehler (von denen ich hoffe, dass niemand sie macht), aber einige sind undefiniertes Verhalten.

    #define BEGIN {
    #define END }
    #define print printf
    void main(int argv, char* argc, char **args) BEGIN
print("hELLO,"); printf("WORLD");
    END

1. Es definiert Makros, mit denen sich C wie eine andere Sprache anfühlt (die meisten Codestyle-Richtlinien).
2. Die mainFunktion gibt zurück void, wann sie zurückkehren soll int(implementierungsdefiniertes Verhalten).
3. mainverwendet ein Formular mit drei Argumenten, wenn es nicht Standard ist (undefiniertes Verhalten).
4. Diese Argumente haben falsche Namen (die meisten Codestyle-Richtlinien).
5. argc(sollte sein argv) hat falschen Typ. Es sollte sein char **, aber es ist char *(undefiniertes Verhalten).
6. Mischen von C- und C ++ - Deklarationsstilen, die sich in der *Position unterscheiden (die meisten Richtlinien für Codelines fordern konsistenten Code).
7. Seltsamer Codierungsstil, bei dem der tiefere Code vorgegeben ist (die meisten Codierungsrichtlinien).
8. Verwenden einer Funktion ( printf) ohne korrekten Header zu importieren (undefiniertes Verhalten, da es sich um eine variable Funktion handelt).
9. Verwenden der Feststelltaste zum Schreiben von Nachrichten (die meisten Sprachrichtlinien).
10. Kein Leerzeichen nach dem Komma (die meisten Sprachrichtlinien).
11. Mehrere Anweisungen in einer Zeile (die meisten Codestyle-Richtlinien).
12. Am Ende wird keine neue Zeile gedruckt, sodass die Eingabeaufforderung am Ende des Programms angezeigt wird (implementierungsspezifisches Verhalten).
14. Der Rückgabewert ist nicht definiert (implementierungsspezifisches Verhalten).

Konrad Borowski
quelle
5

Gehen

package main

func main() {
    println(whereas "Standards are important")
    println("But sometimes it's fun to break them" despiteallobjections)
}

http://play.golang.org/p/DrDHF9EMgu

Erklärung ist hier . Die Regeln "while" und "despiteallobjections" erscheinen nicht in der Spezifikation, aber der Lexer überspringt sie einfach als eine Art Osterei. Ich denke, der Linter ist standardkonformer, denn wenn Sie auf den Link "Go Playground" klicken, wird ein Analysefehler angezeigt.

MatrixFrog
quelle
4

JavaScript

standards:
while(1)
   break standards

Erläuterung:

Eine while-Schleife mit der Bezeichnung "standards" wird beendet.

Gebrochene Standards:

standards: <-- that one
while(1)
   break standards
12Me21
quelle
2

GML bricht eine Menge Standards. Eine davon ist die Schönheit, ternäre Operatoren nicht zuzulassen. Anstatt ternäre Operatoren zu verwenden, würde ich in GML Folgendes tun:

z = ( y * ( z > 0 ) ) + ( x * ( z <= 0 ) );

Wo das ternäre Äquivalent ist:

z = ( z > 0 ) ? y : x;

Das erste ist ziemlich unangenehm, besonders wenn Sie anfangen, andere Operationen hinzuzufügen.

FatalSleep
quelle
1

Haskell

Mein Programm bricht nicht wirklich alle Standards, sondern wählt nur zufällig einen aus, der verwendet werden soll. Es wird versucht, über die verschiedenen Standards hinweg fair zu sein. Hier ist mein Code.

import System.Random
import Control.Applicative
newlines=["\n", "\r\n", "\r"]
pick::[a]->IO a
pick lst=fmap (lst !!) $ randomRIO (0, length lst - 1)

fairUnlines::[String]->IO String
fairUnlines []         = pure ""
fairUnlines [str]      = pure str
fairUnlines (str:strs) = (\x y z->x++y++z) <$>
    pure str <*> pick newlines <*> fairUnlines strs

fairUnlinesNimmt eine Liste von Zeichenfolgen und verbindet sie mit zufälligen Standards für Zeilenumbrüche. Es ist auch das erste Mal, dass ich den anwendungsbezogenen Stil auf IO verwende, trotzdem.

PyRulez
quelle
1

Bash

Nehmen Sie aus Ihrem Beispiel:

ping 192.168.0.1 -c 1 -s 10000

Angenommen, Ihr Router befindet sich in 192.168.0.1

Hinweis: Die maximale Ping-Größe beträgt 65 KB, also habe ich 10 KB anstelle von 10 MB gemacht

Der Doktor
quelle
Gute Antwort! Gibt es eine Windows-Version davon (außer Cygwin)?
George
@GeorgeH - nicht das ich wüsste
TheDoctor
Ok - Ich muss Virtualbox wieder starten (es war eine lange Zeit!)
George
0

Java

Oh je, jemand hat den Getter wieder vergessen ...

import java.lang.reflect.*;

class Main {
    public static void main(String[] args) throws Exception {

        // Brian forgot to implement the getter again.
        // He's on vacation, so this will have to do.

        // TODO: figure out what he named the fields
        Field field = UsefulObject.class.getDeclaredFields()[1];
        Field objField = UsefulObject.class.getDeclaredFields()[0];

        field.setAccessible(true);
        objField.setAccessible(true);

        Object obj = objField.get(null);
        String s = (String) field.get(obj);

        System.out.println(s);
    }
}
class UsefulObject {

    private static UsefulObject Useful;
    private String usefulField;

    static {
        Useful = new UsefulObject("useful field");
    }
    private UsefulObject(String s) {
        this.usefulField = s;
    }

    public String getUsefulField() { return usefulField; }

    public static UsefulObject getUsefulObject() {
        throw new UnsupportedOperationException("TODO");
    }
}

Das UsefulFeld sollte klein geschrieben sein :useful

Ich java.lang.reflect.Fieldbin mir nicht sicher, ob dies ein Standard ist: unbrauchbarer Platzhalterimport (sollte nur sein, da das alles ist, was verwendet wird).

Benjamin Urquhart
quelle