Нарушать некоторые стандарты! [закрыто]


14

Всем известна фраза «Правила созданы для того, чтобы их нарушать!», Поэтому вот ваша задача:

Напишите код на любом языке, который нарушает стандарт. Это может быть что угодно, от подключения к USB-кабелю 240 В до проверки связи с маршрутизатором (а не с чужого веб-сайта!) С пакетом 10 Мб! (Не принимайте никаких идей, оба они, вероятно, вызовут все виды гибели!)

Ответ, получивший наибольшее количество голосов через 10 дней (т.е. самое серьезное нарушение), победит!

Правила:

  1. Код должен быть объяснен.
  2. Стандарт, который вы нарушаете, должен быть связан с вами, и вы должны объяснить, что вы делаете (подразумевает 1), чтобы нарушить его. В противном случае ответы не будут приняты.
  3. Ответы, которые просто сбивают переводчика или заставляют его перестать работать, не принимаются. Я хотел бы получить креативные ответы, а не просто вставить что-то вроде 𐒢в IDLE (что приводит к сбою)
  4. Использование ошибок не допускается, если они не нарушают стандарт. В противном случае ответы не будут приняты

Начни и получай удовольствие!


18
Большинство ответов на этом сайте нарушают хотя бы один стандарт кодирования ...
Comintern

2
Это не оригинально со мной, но ... анимированный JPEG!
Кендалл Фрей

Эй, ты прав насчет 𐒢
TheDoctor

4
Мои студенты, как правило, нарушают любые стандарты качества при написании кода. Они заслуживают победы!
Макс Райд

1
Вдохновение можно найти в разделе «Как реализовать GOTO в Java»: stackoverflow.com/questions/2430782/…
Abulafia

Ответы:


68

питон

print 'Hello World'

Объяснение:

Стандарт Программирование Puzzles & Code Golf Stack биржи является

Внимательно прочитайте вопрос. Что конкретно задает вопрос? Убедитесь, что ваш ответ предусматривает, что


Этот код не отвечает на вопрос, поэтому он нарушает стандарт.


1
Или нарушить стандарт в Python 2,print("hello world")
TheDoctor

10
@TheDoctor, но если я нарушу стандарт python, я не смогу нарушить стандарт
codegolf.SE

18
Но если этот вопрос нарушает стандарт для этого вопроса и объясняет его, он не нарушает стандарт. Но тогда он недействителен и должен нарушать стандарт Python, а это не так! Парадокс - это нарушает сами стандарты реальности!
Кодзиро

2
Поскольку это конкурс популярности, я должен пойти с этим невероятно креативным ответом, который набрал наибольшее количество голосов! Несмотря на то, что ничего не сломалось / не перезапустилось :(. Однако хороший ответ. Молодец :)
Джордж

5
Это правильный ответ, поскольку он не является правильным.
Примо

24

C
Вот факториальная программа, которая успешно компилируется и запускается (с gcc4.6.3 в Ubuntu 12.04), но при этом вызывает столько неопределенного поведения в соответствии со стандартом C, сколько я могу втиснуть. Большинство вдохновлено здесь . Большая часть оставшегося юридического кодекса просто плохая.

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
}

1
Отрицательные индексы вполне допустимы, если указатель не указывает на начало массива. Черт, законно индексировать число массивом, а не наоборот.
user2357112 поддерживает Monica

17

XHTML

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

Спецификация W3C ( http://www.w3.org/TR/html-markup/p.html#p ):

п - абзац

Элемент p представляет абзац.

Разрешенное содержание

Фразированное содержание

О, я чувствую себя грязным!

Редактировать: @xfix указал, что ошибка, которую я отображал, на самом деле была XHTML. Это HTML-ошибка круче и менее очевидна, так что:

<p><div></div><p>становится <p /><div></div></p>потому, что <div>заставляет <p>себя закрывать. Это приводит к ошибке, потому что мы пытаемся закрыть абзац, который не существует.


Это не проблема здесь. Реальная проблема в том, что </p>тег существует без его закрытия, так как <div>автоматически закрывается <p>.
Конрад Боровски

@xfix У вас есть ссылка на спецификацию, где это поведение определяется? Валидатор W3 захлебнется этим с ошибкой, которую я ожидаю, я думаю, вы описываете реализацию браузера, а не сам HTML.
Джордж Райт

1
Вы можете думать о XHTML. В HTML4 и HTML5 <p>закрывается определенными тегами. Для валидатора HTML4 я получаю «конечный тег для элемента« P », который не открыт».
Конрад Боровский

@xfix Ты прав! Я отредактирую это позже. Приветствия
Джордж Райт

Это то, что вы никогда не видели типичный Java dev HTML или просто не хотите перечислять столько нарушенных стандартов?
Эрик Реппен

12

HTTP / 1.1: Ответ - код состояния и фраза причины

Элемент Status-Code представляет собой 3-значный ...

Нужно ли идти дальше? Этот код состояния не является одним из кодов, определенных в стандарте. Это даже не начинается с одной из требуемых цифр категории. Это даже не 3 цифры в длину.

Мой браузер по-прежнему удается нормально загрузить страницу.

Кроме того, этот ответ нарушает один из «стандартов» этого сайта :)

Выход (строка состояния):

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 (узел)


1
Из любопытства, вы пробовали четырехзначный код состояния? Пять-значный?
MatrixFrog

@MatrixFrog Я попробовал 4-значный код. Браузер был в порядке с этим. Я пошел с 0, потому что это нарушает больше стандарта.
Кендалл Фрей

12

Сколько стандартов я только что нарушил?

Я действительно сделал немного ужасного программирования здесь.

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;

Easter Egg: В echoред буквы, если читать его вертикально, будет читать just killed standarDs!.

Sidenote: Запуск этой программы выдаст имя парня, который действительно любил gotos.


1
Если вы сразу скажете это, это не «пасхальное яйцо» ...
Денис Сегюре

9

C # - ломая Unicode

Простой алгоритм для обращения строки:

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

Это нарушает стандарт Unicode , потому что он неправильно хранит суррогатные пары, создавая недопустимую строку. В .NET и многих других платформах / языках программирования, на charсамом деле это не символ, а единица кода UTF-16 .

NB: Это также изменяет, какая буква объединяется с последующими знаками объединения (например, диакритические знаки), что может или не может быть предназначено.


8

JavaScript

Запустите его в консоли на этой странице.

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

Вдохновлен

Большинство ответов на этом сайте нарушают хотя бы один стандарт кодирования ... - Коминтерн 1 час назад

Что он делает, так это выводит случайный ответ из топ-1000, проголосовавших из codegolf.SE (то есть, решая проблему очень мета-способом!), В комплекте с форматированием и всем, на вашей странице!


К сожалению, это технически не удовлетворяет правилам, поскольку вывод - это код с нарушенными стандартами, поэтому я нарушил стандарт в этом коде - я использовал document.write(ewwww). Я также должен предоставить ссылку, поэтому здесь: Почему document.write считается "плохой практикой"?

Если это не считается «нарушением стандартов», на всякий случай я завернул свою строку unescape(escape()), которая устарела, согласно MDN .

Обратите внимание, что я просто делаю все это, чтобы обойти правила, и основной смысл этого ответа - его вывод.


Пробный прогон (нажмите на картинку для увеличения):

Скриншот


Вы также должны удалить varзаявления, чтобы они больше шли вразрез со стандартами.
Scimonster

6

XML

Не мое «изобретение», на самом деле мне приходится работать с XML, подобным этому, который мы получаем из очень секретного места:

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

Не проверяет по собственному встроенному DTD, содержит несколько корней и неэкранированных амперсандов. (Есть и другие ошибки более высокого уровня, неоднозначная модель контента и т. Д., Которые здесь не демонстрируются.) Очень печально.


Что за секретное место? Похоже, там идет отличное программирование! ;)
Джордж

Это совершенно секретный код ФБР?

Венгерский материал, вероятно, :)
masterX244

6

Установка сетевой маски для неконкурентных битовых масок была разрешена, но крайне не рекомендуется в RFC 950, но теперь запрещена в RFC 1219. Тем не менее, BSD-лайки позволяют вам это делать.

Маски IPv4 представляют собой комбинацию из четырех байтов, как и IP-адрес. Он используется для расчета, находятся ли два хоста с известными IP-адресами и сетевыми масками в одной сети. Как правило, IP-адрес состоит из двух частей: сети и узла. Скажем, ваша сеть дома 192.168.1.1- 192.168.1.254. Часть хоста - это первые три байта IP, а именно 192.168.1.x. Это означает, что маска сети означает 255.255.255.0, что первые 24 бита являются частью сети. В двоичном виде маска выглядит так 11111111.11111111.11111111.00000000. 1-бит непрерывен. В моем примере, маска подсети будет 00010111.00000000.00000000.00101010. Так что же произойдет, если маска сети не является непрерывной? Вместо того, чтобы находиться на правильном конце, часть хоста разбросана по всему IP-адресу, что делает его действительно трудным для чтения, как мое объяснение здесь.

НЕ ожидайте, что что-нибудь сработает после этого!

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

Хорошо, но что такое несмежная битовая маска? Google не возвращает ничего значимого для меня. (Извините!)
Джордж

Добавлены некоторые объяснения, может быть, это помогает, я не очень хорошо объясняю сетевые вещи.
Макс Райд

1
Я действительно столкнулся (и должен был исправить программу, чтобы запретить) не непрерывные маски сети в Windows, потому что пользователь сделал опечатку (225 вместо 252).
dan04

6

С

Сколько ошибок вы можете найти, что, вероятно, приведет к тому, что большинство компаний отклонят ваш код (особенно хорошие). Большинство из них, вероятно, являются ошибками стиля (что, я надеюсь, никто не делает), но некоторые из них - неопределенное поведение.

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

1. Он определяет макросы, которые делают C похожим на другой язык (большинство рекомендаций по стилю кода).
2. mainФункция возвращает void, когда она должна вернуться int(поведение, определяемое реализацией).
3. mainиспользует форму с тремя аргументами, когда она не является стандартной (неопределенное поведение).
4. Эти аргументы имеют неправильные имена (большинство правил кодирования).
5. argc(должно быть argv) имеет неправильный тип. Так и должно быть char **, но это char *(неопределенное поведение).
6. Смешивание стилей декларации C и C ++, которые различаются по *положению (большинству руководящих принципов кодовой линии требуется согласованный код).
7. Странный стиль кодирования, когда требуется более глубокий код (большинство рекомендаций по стилю кода).
8. Использование функции ( printf) без импорта правильного заголовка (неопределенное поведение, так как это переменная функция).
9. Использование Caps Lock для написания сообщений (большинство языковых рекомендаций).
10. Нет пробела после запятой (большинство языковых рекомендаций).
11. Несколько операторов в одной строке (большинство правил кодирования).
12. В конце не выводится новая строка, в результате чего подсказка выводится в конце программы (поведение, определяемое реализацией).
14. Возвращаемое значение не определено (поведение, определяемое реализацией).


5

Идти

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

Объяснение здесь . Правила «тогда» и «несмотря на все споры» не указаны в спецификации, но лексер просто пропускает их, как своего рода пасхальное яйцо. Я думаю, что линтер более совместим со стандартами, потому что если вы нажмете «Форматировать» на этой ссылке Go Playground, вы получите ошибку разбора.


4

JavaScript

standards:
while(1)
   break standards

Объяснение:

Цикл while с надписью «стандарты» завершен.

Стандарты нарушены:

standards: <-- that one
while(1)
   break standards


2

GML нарушает тонну стандартов. Одна из них заключается в том, что нельзя использовать троичных операторов. Вместо использования тернарных операторов в GML я бы сделал это:

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

Где троичный эквивалент:

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

Первое довольно неприятно, особенно когда вы начинаете добавлять другие операции.


1

Haskell

Моя программа на самом деле не нарушает никаких стандартов, а просто случайным образом выбирает один для использования. Он пытается быть справедливым в отношении разных стандартов. Вот мой код.

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

fairUnlinesвозьмет список строк и соединит их, используя случайные стандарты символов новой строки. Кроме того, я впервые использую аппликативный стиль, тем не менее, в IO.


1

удар

Из вашего примера:

ping 192.168.0.1 -c 1 -s 10000

Предполагая, что ваш маршрутизатор находится в 192.168.0.1

Примечание: максимальный размер пинга составляет 65 КБ, поэтому я сделал 10 КБ вместо 10 МБ.


Отличный ответ! Есть ли версия для Windows (кроме Cygwin)?
Джордж

@ GeorgeH - не то, что я знаю
TheDoctor

Хорошо - мне придется снова запустить Virtualbox (это было давно!)
Джордж

0

Джава

О, дорогой, кто-то снова забыл добытчик ...

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

UsefulПоле должно быть в нижнем регистре :useful

Не уверен, что это стандарт: бесполезный импорт с подстановочными знаками (должен быть только java.lang.reflect.Fieldпотому, что это все, что используется).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.