Przełam niektóre standardy! [Zamknięte]

14

Wszyscy znają wyrażenie „Zasady są po to, aby je łamać!”, Więc oto twoje zadanie:

Napisz kod w dowolnym języku, który łamie standard. Może to być wszystko, od zerwania kabla USB o napięciu 240 woltów, po pingowanie routera ( NIE witryny innej osoby!) Za pomocą pakietu 10 MB! (Nie mam żadnych pomysłów, oba prawdopodobnie spowodują różnego rodzaju fatum!)

Najbardziej pozytywna odpowiedź po 10 dniach (najpoważniejsze naruszenie) wygra!

Zasady:

  1. Kod musi zostać wyjaśniony.
  2. Standard, który łamiesz, musi być powiązany i musisz wyjaśnić, co robisz (implikuje 1), aby go złamać. W przeciwnym razie odpowiedzi nie będą akceptowane.
  3. Odpowiedzi, które powodują awarię interpretera lub powodują, że przestaje on działać, nie będą akceptowane. Chciałbym kilka kreatywnych odpowiedzi, a nie tylko wklejenie czegoś takiego jak 𐒢IDLE (co powoduje awarię)
  4. Wykorzystywanie błędów jest niedozwolone, chyba że złamie standard. W przeciwnym razie odpowiedzi nie będą akceptowane

Zacznij i baw się dobrze!

Jerzy
źródło
18
Większość odpowiedzi na tej stronie narusza co najmniej jeden standard kodowania ...
Comintern
2
Nie jest to ze mną oryginalne, ale ... animowane JPEG!
Kendall Frey
Hej, masz rację co do 𐒢
TheDoctor
4
Moi uczniowie mają tendencję do naruszania jakichkolwiek standardów kontroli jakości podczas pisania kodu. Zasługują na zwycięstwo!
Max Ried
1
Inspirację można znaleźć w „Jak wdrożyć GOTO w Javie”: stackoverflow.com/questions/2430782/…
Abulafia

Odpowiedzi:

68

Pyton

print 'Hello World'

Wyjaśnienie:

Standard programowania łamigłówki & Code Golf Stos Exchange jest

Przeczytaj uważnie pytanie. O co konkretnie zadaje pytanie? Upewnij się, że twoja odpowiedź to zapewnia


Ten kod nie odpowiada na pytanie, więc łamie standard.

użytkownik12205
źródło
1
Lub przełamać standard w python 2,print("hello world")
TheDoctor
10
@Doctor, ale jeśli złamię standard Pythona, nie mogę złamać standardu
codegolf.SE
18
Ale jeśli to pytanie łamie standard tego pytania i wyjaśnia je, to nie łamie tego standardu. Ale wtedy jest nieważny i musi łamać standard Pythona, a tak nie jest! Paradoks - przełamuje standardy rzeczywistości!
kojiro
2
Ponieważ jest to konkurs popularności, muszę iść z tą niezwykle kreatywną odpowiedzią, która ma najwięcej głosów! Mimo że nic nie powoduje przerwania / ponownego uruchomienia :(. Jednak dobra odpowiedź. Dobra robota :)
George
5
To jest poprawna odpowiedź, ponieważ nie jest poprawną odpowiedzią.
primo
24

C
Oto silnia program kompiluje się i działa succcessfully (z gcc4.6.3 na Ubuntu 12.04), ale wywołuje tyle niezdefiniowanej zachowań według standardu C jak mogłem dopchać w. Większość z nich inspirowana tutaj . Wiele pozostałego legalnego kodu jest po prostu złe.

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
}
AShelly
źródło
1
Wskaźniki ujemne są całkowicie legalne, jeśli wskaźnik nie wskazuje początku tablicy. Do licha, dozwolone jest indeksowanie liczby za pomocą tablicy zamiast na odwrót.
user2357112 obsługuje Monikę
17

XHTML

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

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

p - akapit

Element p reprezentuje akapit.

Dozwolona zawartość

Frazowanie treści

Och, czuję się brudny!

Edycja: @xfix zwrócił uwagę, że wyświetlany mnie błąd to XHTML. Wywoływany przez niego błąd HTML jest fajniejszy i mniej oczywisty, dlatego:

<p><div></div><p>staje się, <p /><div></div></p>ponieważ <div>powoduje <p>samozamykanie. Powoduje to błąd, ponieważ próbujemy zamknąć akapit, który nie istnieje.

George Reith
źródło
To nie jest problem. Prawdziwy problem polega na tym, że </p>tag istnieje bez jego zamykania, ponieważ <div>automatycznie się zamyka <p>.
Konrad Borowski
@xfix Czy masz odniesienie do specyfikacji, w której zdefiniowano to zachowanie? Walidator W3 zadławi się tym błędem, którego mógłbym się spodziewać. Myślę, że opisujesz implementację przeglądarki, a nie sam HTML.
George Reith,
1
Być może myślisz o XHTML. W HTML4 i HTML5 <p>jest zamknięty przez niektóre tagi. Dla walidatora HTML4 otrzymuję „tag końcowy dla elementu„ P ”, który nie jest otwarty”.
Konrad Borowski
@xfix Masz rację! Zmienię to później. Na zdrowie
George Reith
Czy to nigdy nie widziałeś typowego HTML-a dla deweloperów Java, czy po prostu nie chcesz wymieniać tak wielu złamanych standardów?
Erik Reppen
12

HTTP / 1.1: Odpowiedź - kod stanu i fraza przyczyny

Element Status-Code to 3-cyfrowy ...

Czy muszę iść dalej? Ten kod stanu nie jest jednym z kodów zdefiniowanych w standardzie. Nie zaczyna się nawet od jednej z wymaganych cyfr kategorii. Nie ma nawet 3 cyfr.

Moja przeglądarka nadal ładuje się poprawnie.

Ponadto ta odpowiedź łamie jeden ze „standardów” tej witryny :)

Dane wyjściowe (linia statusu):

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 (węzeł)

Kendall Frey
źródło
1
Z ciekawości wypróbowałeś czterocyfrowy kod statusu? Pięć cyfr?
MatrixFrog
@MatrixFrog Próbowałem 4-cyfrowego kodu. Przeglądarka była w porządku. Poszedłem z 0, ponieważ to łamie więcej standardu.
Kendall Frey
12

Ile standardów właśnie złamałem?

Rzeczywiście zrobiłem tutaj okropne programowanie.

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;

Pisanka: The echoletters ED, jeśli czytać pionowo, będzie czytać just killed standarDs!.

Sidenote: Uruchomienie tego programu spowoduje wyświetlenie nazwiska faceta, który naprawdę kochał gotos.

Vereos
źródło
1
Jeśli od razu to powiesz, to nie jest „easter egg” ...
Denys Séguret
9

C # - łamanie Unicode

Prosty algorytm odwracania łańcucha:

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();
}

To łamie standard Unicode , ponieważ nie utrzymuje poprawnie par zastępczych razem, tworząc nieprawidłowy ciąg. W .NET i wielu innych platformach / językach programowania a charnie jest tak naprawdę znakiem, ale jednostką kodu UTF-16 .

NB: Zmienia także, która litera jest łączona z kolejnymi łączącymi znakami (np. Znaki diakrytyczne), które mogą, ale nie muszą być zamierzone.

Sebastian Negraszus
źródło
8

JavaScript

Uruchom go w konsoli na tej stronie.

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)
}

Zainspirowany przez

Większość odpowiedzi na tej stronie narusza co najmniej jeden standard kodowania ... - Comintern 1 godzinę temu

To, co robi, jest wyjściem losowa odpowiedź spośród 1000 najlepszych głosowanych z codegolf.SE (tj. Rozwiązanie problemu w bardzo meta-stylu!), Wraz z formatowaniem i wszystkim na twojej stronie!


Niestety, to technicznie nie spełnia zasad, ponieważ wynikiem jest kod ze złamanymi standardami, więc złamałem standard w tym kodzie - użyłem document.write(ewwww). Muszę również podać link, więc tutaj: Dlaczego document.write jest uważane za „złą praktykę”?

Jeśli to nie liczy się jako „łamanie standardów”, na wszelki wypadek owinąłem sznurek unescape(escape()) , który jest przestarzały, zgodnie z MDN .

Zauważ, że tak naprawdę robię to wszystko, aby ominąć reguły, a głównym celem tej odpowiedzi jest jej wynik.


Przykładowy przebieg (kliknij obraz, aby powiększyć):

screenshot

Klamka
źródło
Powinieneś także usunąć te varoświadczenia, aby bardziej niezgodne ze standardami.
Scimonster,
6

XML

Nie mój „wynalazek”, tak naprawdę muszę pracować z XML-ami, które otrzymujemy z bardzo tajnego miejsca:

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

Nie sprawdza się względem własnego osadzonego DTD, zawiera wiele rdzeni i nieskalowane znaki handlowe. (Są też inne błędy wyższego poziomu, niejednoznaczny model treści itp., Których tutaj nie pokazano). Bardzo smutne.

fejesjoco
źródło
Jakie jest bardzo tajne miejsce? Wygląda na to, że dzieje się tam świetne programowanie! ;)
George
Czy to ściśle tajny kod FBI?
węgierskie rzeczy prawdopodobnie :)
masterX244
6

Ustawienie maski sieci na nieinwazyjne maski bitowe było dozwolone, ale bardzo zniechęcone przez RFC 950, ale jest zabronione od RFC 1219. Niemniej jednak, polubienia BSD pozwalają to zrobić.

Maski sieciowe IPv4 to kombinacja czterech bajtów, podobnie jak adres IP. Służy do obliczania, czy dwa hosty o znanych adresach IP i maskach sieciowych są w tej samej sieci. Zasadniczo adres IP składa się z dwóch części: sieci i części hosta. Powiedz, że Twoja sieć w domu to 192.168.1.1- 192.168.1.254. Część hosta to pierwsze trzy bajty adresu IP, a mianowicie 192.168.1.x. Oznacza to, że maska ​​sieci jest 255.255.255.0, co oznacza, że ​​pierwsze 24 bity są częścią sieci. W trybie binarnym wygląda maska 11111111.11111111.11111111.00000000. 1-bit są ciągłe. W moim przykładzie maska ​​sieci byłaby 00010111.00000000.00000000.00101010. Co by się stało, gdyby maska ​​sieci nie była ciągła? Zamiast znajdować się po prawej stronie, część hosta jest rozproszona po całym adresie IP, co sprawia, że ​​bardzo trudno ją odczytać, tak jak tutaj to wyjaśniłem.

NIE oczekuj, że potem coś zadziała!

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
źródło
Fajnie, ale czym jest niesąsiadująca maska ​​bitowa? Google nie zwraca niczego, co ma dla mnie znaczenie. (Przepraszam!)
George
Dodałem kilka wyjaśnień, może to pomaga, nie jestem dobry w wyjaśnianiu rzeczy związanych z siecią.
Max Ried
1
W rzeczywistości napotkałem (i musiałem naprawić program, aby zabronić) nieciągłe maski sieciowe w systemie Windows, ponieważ użytkownik popełnił literówkę (225 zamiast 252).
dan04
6

do

Ile błędów można znaleźć, co prawdopodobnie spowoduje, że większość firm odrzuci Twój kod (szczególnie dobre). Większość z nich to prawdopodobnie błędy w stylu (których, mam nadzieję, nikt nie robi), ale niektóre z nich są niezdefiniowanym zachowaniem.

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

1. Definiuje makra, które sprawiają, że C czuje się jak inny język (większość wskazówek dotyczących stylu kodowania).
2. mainFunkcja powraca void, kiedy powinna powrócićint (zachowanie zdefiniowane w implementacji).
3. mainużywa formularza z trzema argumentami, gdy nie jest on standardowy (zachowanie niezdefiniowane).
4. Argumenty te mają niepoprawne nazwy (większość wytycznych stylu kodowania).
5. argc(powinien być argv) ma nieprawidłowy typ. Powinno tak być char **, ale jest char *(zachowanie nieokreślone).
6. Mieszanie stylów deklaracji C i C ++, które różnią się *pozycją (większość wytycznych dla kodelin chce spójnego kodu).
7. Dziwny styl kodowania, w którym wymagany jest głębszy kod (większość wskazówek dotyczących stylu kodowania).
8. Użycie funkcji ( printf) bez importowania poprawnego nagłówka (niezdefiniowane zachowanie, ponieważ jest to funkcja wariadyczna).
9. Używanie Caps Lock do pisania wiadomości (większość wytycznych językowych). 11. Wiele instrukcji w jednym wierszu (większość wskazówek dotyczących stylu kodowania). 12. Na końcu nie jest drukowana nowa linia, co powoduje, że na końcu programu zostanie wyświetlony monit (zachowanie zdefiniowane w implementacji). 14. Wartość zwracana nie jest zdefiniowana (zachowanie zdefiniowane w implementacji).
10. Brak spacji po przecinku (większość wytycznych językowych).


Konrad Borowski
źródło
5

Udać się

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

Wyjaśnienie jest tutaj . Zasady „choć” i „pomimo wszystkich obiekcji” nie pojawiają się w specyfikacji, ale leksykon po prostu je omija, jak rodzaj pisanki. Myślę, że linijka jest bardziej zgodna ze standardami, ponieważ jeśli klikniesz „Format” w tym linku Go Playground, pojawi się błąd analizy.

MatrixFrog
źródło
4

JavaScript

standards:
while(1)
   break standards

Wyjaśnienie:

Pętla while oznaczona jako „standardy” została zakończona.

Standardy złamane:

standards: <-- that one
while(1)
   break standards
12Me21
źródło
2

GML łamie masę standardów. Jednym z nich jest piękno niedopuszczania do korzystania z operatorów trójskładnikowych. Zamiast używać Ternary Operators, w GML zrobiłbym to:

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

Gdzie równoważnikiem trójskładnikowym jest:

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

Pierwszy jest dość paskudny, zwłaszcza gdy zaczynasz dodawać inne operacje.

FatalSleep
źródło
1

Haskell

Mój program tak naprawdę nie łamie żadnych standardów, ale po prostu losowo wybiera jeden z nich. Stara się być uczciwy w różnych standardach. Oto mój kod.

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

fairUnlinesweźmie listę Ciągów i dołączy je przy użyciu losowych standardów znaków nowej linii. Poza tym po raz pierwszy zastosowałem styl aplikacji, niemniej jednak na IO.

PyRulez
źródło
1

Grzmotnąć

Biorąc z twojego przykładu:

ping 192.168.0.1 -c 1 -s 10000

Zakładając, że router jest w 192.168.0.1

Uwaga: maksymalny rozmiar ping to 65 kb, więc zrobiłem 10 kb zamiast 10 mb

Doktor
źródło
Świetna odpowiedź! Czy jest dostępna wersja dla Windows (oprócz Cygwin)?
George
@GeorgeH - nie o tym wiem
TheDoctor
Ok - Będę musiał ponownie uruchomić Virtualbox (minęło sporo czasu!)
George
0

Jawa

Och, kochanie, ktoś znowu zapomniał o getterze ...

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");
    }
}

UsefulPole powinno być małe litery :useful

Nie jestem pewien, czy jest to standard: bezużyteczny import symboli wieloznacznych (powinien być po prostu java.lang.reflect.Fielddlatego, że to wszystko, co jest używane).

Benjamin Urquhart
źródło