Порушуйте деякі стандарти! [зачинено]


14

Всім відома фраза "Правила зроблені для порушення", тому ось ваше завдання:

Напишіть якийсь код будь-якою мовою, яка порушує стандарт. Це може бути що завгодно - від підключення 240 вольт до USB-кабелю, до пінг-роутера ( НЕ чужого веб-сайту!) Пакетом 10 Мб! (Не майте жодних ідей, і те, ймовірно, викличе всіляку приреченість!)

Переможе найбільш відповідна через 10 днів (тобто найсерйозніше порушення)!

Правила:

  1. Код повинен бути пояснений.
  2. Стандарт, який ви порушуєте, повинен бути пов'язаний, і ви повинні пояснити, що ви робите (мається на увазі 1), щоб його порушити. Інакше відповіді не приймаються.
  3. Відповіді, які просто перекладають перекладача або змушують його перестати працювати, не приймаються. Мені хотілося б декількох творчих відповідей, а не просто вставляти щось на зразок 𐒢IDLE (що виходить з ладу)
  4. Експлуатування помилок заборонено, якщо вони не порушують стандарт. Інакше відповіді не приймаються

Почніть, і веселіться!


18
Більшість відповідей на цьому веб-сайті порушує принаймні один стандарт кодування ...
Комінтерн

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, чого це не так! Парадокс - він порушує самі стандарти реальності!
kojiro

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 підтримує Моніку

17

XHTML

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

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

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 Право ти! Я відредагую це пізніше. Ура
Джордж Рейт

Це те, що ви ніколи не бачили типового HTML для Java-версії або просто не хочете перераховувати багато порушених стандартів?
Ерік Реппен

12

HTTP / 1.1: Відповідь - код статусу та фраза приводу

Елемент Status-Code - це тризначний ...

Потрібно піти далі? Цей код статусу не є одним із кодів, визначених у стандарті. Він навіть не починається з однієї з необхідних цифр категорії. Це навіть не три цифри.

Мій браузер все ще вдається завантажувати сторінку.

Крім того, ця відповідь порушує один із "стандартів" цього сайту :)

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

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
Якщо ви негайно це скажете, це не "пасхальне яйце" ...
Denys Séguret

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 та багатьох інших платформах / мовах програмування a char- це насправді не персонаж, а кодова одиниця UTF-16 .

Примітка: Він також змінює, яка літера поєднується з подальшими комбінованими знаками (наприклад, діакритикою), які можуть бути, а можуть і не бути призначеними.


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 .

Зауважте, що я справді просто роблю все це, щоб обійти правила, і головний пункт цієї відповіді - її результат.


Виконання зразка (натисніть на зображення, щоб збільшити):

screenshot


Ви також повинні видалити 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 ++, які відрізняються 8. Використання функції ( ) без імпорту правильного заголовка (невизначене поведінка, оскільки це варіативна функція).* положенням (більшість вказівок для кодеклін бажають узгодженого коду).
7. Дивний стиль кодування, де глибший код призначений (більшість вказівок щодо стилю кодування).
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

Пояснення:

Час циклу з написом "стандарти" виходить.

Стандарти порушені:

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


2

GML порушує тонну стандартів. Однією з красень є те, що не дозволяють використовувати термінальні оператори. Замість використання термінальних операторів у GML я би зробив це:

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

Якщо термінальний еквівалент:

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

Перший досить неприємний, особливо коли ви починаєте додавати в інші операції.


1

Хаскелл

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

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візьме список рядків і приєднається до них за допомогою випадкових стандартних символів. Крім того, це перший раз, коли я фактично використовую прикладний стиль, не менш.


1

Баш

Беручи зі свого прикладу:

ping 192.168.0.1 -c 1 -s 10000

Якщо припустити, що ваш маршрутизатор є 192.168.0.1

Примітка: максимальний розмір пінг - 65 кбіт, тому я зробив 10 кб замість 10 мб


Чудова відповідь! Чи існує версія Windows для цього (крім Cygwin)?
Джордж

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

Гаразд - мені доведеться знову запустити Virtualbox (Це було давно!)
Джордж

0

Java

О, дорогий, хтось знову забув геттера ...

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.