Phá vỡ một số tiêu chuẩn! [đóng cửa]


14

Mọi người đều biết cụm từ "Các quy tắc được thực hiện để được phá vỡ!", Vì vậy đây là nhiệm vụ của bạn:

Viết một số mã bằng bất kỳ ngôn ngữ nào phá vỡ một tiêu chuẩn. Đây có thể là bất cứ điều gì, từ việc đặt 240 volt xuống cáp USB, cho đến bộ định tuyến của bạn ( KHÔNG phải trang web của ai đó!) Với gói 10mb! (Đừng có bất kỳ ý tưởng nào, cả hai điều này có thể sẽ gây ra tất cả các loại cam chịu!)

Câu trả lời được đánh giá cao nhất sau 10 ngày (tức là vi phạm nghiêm trọng nhất) sẽ giành chiến thắng!

Quy tắc:

  1. Mã phải được giải thích.
  2. Tiêu chuẩn mà bạn đang phá vỡ phải được liên kết đến và bạn phải giải thích những gì bạn đang làm (ngụ ý 1) để phá vỡ nó. Nếu không, câu trả lời sẽ không được chấp nhận.
  3. Câu trả lời chỉ làm hỏng trình thông dịch hoặc làm cho nó ngừng hoạt động sẽ không được chấp nhận. Tôi muốn một số câu trả lời sáng tạo, không chỉ dán một cái gì đó như 𐒢vào IDLE (mà làm hỏng nó)
  4. Khai thác lỗi không được phép, trừ khi chúng phá vỡ một tiêu chuẩn. Nếu không, câu trả lời sẽ không được chấp nhận

Bắt đầu, và vui chơi!


18
Phần lớn các câu trả lời trên trang web này vi phạm ít nhất một tiêu chuẩn mã hóa ...
Comitern

2
Đây không phải là bản gốc với tôi, nhưng ... JPEG hoạt hình!
Kendall Frey

Này, bạn nói đúng về 𐒢
TheDoctor

4
Học sinh của tôi có xu hướng vi phạm bất kỳ tiêu chuẩn QA nào khi viết mã. Họ xứng đáng chiến thắng!
Max Ried

1
Cảm hứng có thể có tại "Cách triển khai GOTO trong Java": stackoverflow.com/questions/2430782/
mẹo

Câu trả lời:


68

Con trăn

print 'Hello World'

Giải trình:

Các tiêu chuẩn của Puzzles & Mã Golf stack Trao đổi trình

Đọc câu hỏi cẩn thận. Điều gì, cụ thể, là câu hỏi yêu cầu? Hãy chắc chắn rằng câu trả lời của bạn cung cấp rằng


Mã này không trả lời câu hỏi, vì vậy nó phá vỡ tiêu chuẩn.


1
Hoặc để phá vỡ một tiêu chuẩn trong python 2, print("hello world")
TheDoctor

10
@TheDoctor nhưng nếu tôi phá vỡ tiêu chuẩn python, tôi không thể phá vỡ tiêu chuẩn codegolf.SE
user12205

18
Nhưng nếu câu hỏi này phá vỡ tiêu chuẩn cho câu hỏi này và giải thích nó, thì nó không phá vỡ tiêu chuẩn. Nhưng sau đó, nó không hợp lệ và phải phá vỡ một tiêu chuẩn Python, điều đó không phải! Một nghịch lý - nó phá vỡ các tiêu chuẩn của thực tế!
kojiro

2
Vì đây là một cuộc thi nổi tiếng, tôi phải đi với câu trả lời vô cùng sáng tạo này có nhiều phiếu bầu nhất! Mặc dù nó không gây ra bất cứ điều gì để phá vỡ / khởi động lại :(. Tuy nhiên, câu trả lời tốt. Hoàn thành tốt :)
George

5
Đây là một câu trả lời hợp lệ, bởi vì không phải là một câu trả lời hợp lệ.
primo

24

C
Đây là một chương trình giai thừa biên dịch và chạy thành công (với gcc4.6.3 trên Ubuntu 12.04), nhưng gọi ra nhiều hành vi không xác định theo tiêu chuẩn C như tôi có thể nhồi nhét. Hầu hết được lấy cảm hứng từ đây . Rất nhiều mã hợp pháp còn lại chỉ là xấu.

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
Các chỉ số phủ định là hoàn toàn hợp pháp nếu con trỏ không trỏ đến điểm bắt đầu của mảng. Heck, nó là hợp pháp để lập chỉ mục một số với một mảng thay vì cách khác.
user2357112 hỗ trợ Monica

17

XHTML

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

Đặc tả W3C ( http://www.w3.org/TR/html-markup/p.html#p ):

p - đoạn

Phần tử p đại diện cho một đoạn văn.

Nội dung được phép

Phrasing nội dung

Ôi tôi thấy bẩn!

Chỉnh sửa: @xfix chỉ ra rằng lỗi tôi đang hiển thị thực sự là XHTML. Lỗi HTML này gây ra mát hơn và ít rõ ràng hơn:

<p><div></div><p>trở thành <p /><div></div></p>vì những <div>nguyên nhân <p>để tự đóng. Do đó dẫn đến một lỗi vì chúng tôi đang cố gắng đóng một đoạn không tồn tại.


Đây không phải là một vấn đề ở đây. Vấn đề thực sự là </p>thẻ đó tồn tại mà không đóng nó, vì nó <div>tự động đóng lại <p>.
Konrad Borowski

@xfix Bạn có tham chiếu đến đặc tả nơi hành vi này được xác định không? Trình xác nhận W3 sẽ bóp nghẹt điều này với lỗi tôi mong đợi, tôi nghĩ bạn đang mô tả một triển khai trình duyệt chứ không phải HTML.
George Reith

1
Bạn có thể nghĩ về XHTML. Trong HTML4 và HTML5, <p>được đóng bởi các thẻ nhất định. Đối với trình xác nhận HTML4, tôi nhận được "thẻ kết thúc cho phần tử" P "không mở".
Konrad Borowski

@xfix Đúng rồi bạn ạ! Tôi sẽ chỉnh sửa điều này sau. Chúc mừng
George Reith

Có phải bạn chưa bao giờ thấy Java dev HTML điển hình hay bạn chỉ không muốn liệt kê nhiều tiêu chuẩn bị hỏng?
Erik Reppen

12

HTTP / 1.1: Phản hồi - Mã trạng thái và cụm từ lý do

Phần tử Mã trạng thái là 3 chữ số ...

Cần tôi đi xa hơn? Mã trạng thái này không phải là một trong những mã được xác định trong tiêu chuẩn. Nó thậm chí không bắt đầu với một trong các chữ số danh mục bắt buộc. Nó thậm chí không dài 3 chữ số.

Trình duyệt của tôi vẫn quản lý để tải trang tốt.

Ngoài ra, câu trả lời này phá vỡ một trong những "tiêu chuẩn" của trang web này :)

Đầu ra (dòng trạng thái):

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 (Nút)


1
Vì tò mò, bạn đã thử mã trạng thái gồm bốn chữ số chưa? Năm chữ số?
MatrixFrog

@MatrixFrog Tôi đã thử mã gồm 4 chữ số. Trình duyệt đã ổn với nó. Tôi đã đi với 0 vì nó phá vỡ nhiều tiêu chuẩn hơn.
Kendall Frey

12

Có bao nhiêu tiêu chuẩn tôi vừa phá vỡ?

Tôi đã làm một số chương trình khủng khiếp thực sự ở đây.

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: Các echochữ ed, nếu đọc theo chiều dọc, sẽ đọcjust killed standarDs! .

Sidenote: Chạy chương trình này sẽ xuất ra tên của một chàng trai thực sự yêu gotos.


1
Nếu bạn nói ngay lập tức, đó không phải là "trứng Phục sinh" ...
Denys Séguret

9

C # - phá vỡ Unicode

Thuật toán đơn giản để đảo ngược một chuỗi:

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

Điều này phá vỡ tiêu chuẩn Unicode , vì nó không giữ các cặp thay thế chính xác với nhau, tạo ra một chuỗi không hợp lệ. Trong .NET và nhiều nền tảng / ngôn ngữ lập trình khác, charkhông thực sự là một ký tự, mà là UTF-16 đơn vị mã .

Lưu ý: Nó cũng thay đổi chữ cái nào được kết hợp với các dấu kết hợp tiếp theo (ví dụ: dấu phụ), có thể có hoặc không có ý định.


8

JavaScript

Chạy nó trong giao diện điều khiển trên trang này.

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

Lấy cảm hứng từ

Phần lớn các câu trả lời trên trang web này vi phạm ít nhất một tiêu chuẩn mã hóa ... - Comitern 1 giờ trước

Những gì nó làm là đưa ra một câu trả lời ngẫu nhiên trong số 1000 câu trả lời hàng đầu từ codegolf.SE (nghĩa là giải quyết vấn đề theo kiểu meta!), Hoàn thành với định dạng và tất cả, trên trang của bạn!


Thật không may, về mặt kỹ thuật này không thỏa mãn các quy tắc, vì đầu ra là mã với các tiêu chuẩn bị hỏng, vì vậy tôi đã phá vỡ một tiêu chuẩn trong mã này - tôi đã sử dụng document.write(ewwww). Tôi cũng phải cung cấp một liên kết, vì vậy ở đây: Tại sao document.write được coi là một "thực hành xấu"?

Nếu điều đó không được tính là "phá vỡ các tiêu chuẩn", chỉ trong trường hợp, tôi đã gói chuỗi của mình vào unescape(escape()), không được chấp nhận, theo MDN .

Lưu ý rằng tôi thực sự chỉ làm tất cả những điều này để giải quyết các quy tắc và điểm chính của câu trả lời này là đầu ra của nó.


Chạy mẫu (bấm vào hình để phóng to):

ảnh chụp màn hình


Bạn cũng nên loại bỏ các vartuyên bố để làm cho nó đi ngược lại các tiêu chuẩn hơn.
Scimonster

6

XML

Không phải là "phát minh" của tôi, tôi thực sự phải làm việc với XML như thế này mà chúng tôi nhận được từ một nơi rất bí mật:

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

Không xác nhận đối với DTD nhúng của chính nó, chứa nhiều gốc và ký hiệu không được giải mã. (Ngoài ra còn có các lỗi cấp cao hơn khác, mô hình nội dung mơ hồ, v.v., không được trình bày ở đây.) Rất buồn.


Nơi bí mật là gì? Âm thanh như một số chương trình tuyệt vời đi trên đó! ;)
George

Đây có phải là mã FBI tối mật không?

Công cụ có lẽ là :)
masterX244

6

Việc đặt netmask thành bitmas không tiếp giáp đã được cho phép nhưng không được khuyến khích bởi RFC 950, nhưng hiện bị cấm kể từ RFC 1219. Tuy nhiên, thích BSD cho phép bạn làm điều này.

Netmasks IPv4 là sự kết hợp của bốn byte, giống như một địa chỉ IP. Nó được sử dụng để tính toán, nếu hai máy chủ có địa chỉ IP và netmasks đã biết nằm trên cùng một mạng. Nói chung, một địa chỉ IP bao gồm hai phần: Mạng và phần máy chủ. Nói rằng mạng của bạn ở nhà là 192.168.1.1- 192.168.1.254. Phần lưu trữ là ba byte đầu tiên của IP, cụ thể là 192.168.1.x. Điều này có nghĩa là netmask 255.255.255.0, có nghĩa là 24 bit đầu tiên là phần mạng. Trong nhị phân mặt nạ trông như thế 11111111.11111111.11111111.00000000. Các bit 1 là liên tục. Trong ví dụ của tôi, netmask sẽ là 00010111.00000000.00000000.00101010. Vì vậy, những gì sẽ xảy ra, nếu netmask là không liên tục? Thay vì ở phía bên phải, phần máy chủ nằm rải rác trên toàn bộ địa chỉ IP, khiến nó thực sự khó đọc, giống như lời giải thích của tôi ở đây.

KHÔNG mong đợi bất cứ điều gì để làm việc sau này!

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

Đẹp, nhưng bitmask không liền kề là gì? Google không trả lại bất cứ điều gì có ý nghĩa với tôi. (Xin lỗi!)
George

Đã thêm một số giải thích, có thể điều này giúp ích, tôi không giỏi trong việc giải thích những thứ kết nối mạng.
Max Ried

1
Tôi thực sự đã gặp phải (và phải sửa một chương trình để không cho phép) các mạng không liên tục trên Windows, do người dùng mắc lỗi đánh máy (225 thay vì 252).
dan04

6

C

Bạn có thể tìm thấy bao nhiêu lỗi, điều này có thể sẽ khiến hầu hết các công ty từ chối mã của bạn (đặc biệt là các lỗi tốt). Hầu hết trong số này có thể là lỗi phong cách (mà tôi hy vọng không ai mắc phải), nhưng một số trong số đó là hành vi không xác định.

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

1. Nó định nghĩa các macro làm cho C cảm thấy giống như một ngôn ngữ khác (hầu hết các hướng dẫn về kiểu chữ).
2. mainHàm trả về void, khi nào nó sẽ trả về int(hành vi được xác định do thực hiện).
3. mainsử dụng một biểu mẫu với ba đối số, khi đó không phải là tiêu chuẩn (hành vi không xác định).
4. Những đối số có tên không chính xác (hầu hết các hướng dẫn về kiểu chữ).
5. argc(nên argv) có loại không chính xác. Nó nên như vậy char **, nhưng đó là char *(hành vi không xác định).
6. Trộn các kiểu khai báo C và C ++, khác nhau về *vị trí (hầu hết các nguyên tắc mã hóa đều muốn mã nhất quán).
7. Phong cách mã hóa kỳ lạ trong đó mã sâu hơn được dự định (hầu hết các hướng dẫn về mã hóa).
8. Sử dụng một hàm ( printf) mà không nhập tiêu đề chính xác (hành vi không xác định, vì đó là một hàm biến đổi).
9. Sử dụng Caps Lock để viết tin nhắn (hầu hết các hướng dẫn ngôn ngữ).
10. Không có khoảng trắng sau dấu phẩy (hầu hết các hướng dẫn ngôn ngữ).
11. Nhiều câu lệnh trên một dòng (hầu hết các hướng dẫn về kiểu chữ).
12. Không có dòng mới được in ở cuối, khiến cho lời nhắc được rút ra ở cuối chương trình (hành vi được xác định theo thực hiện).
14. Giá trị trả về không được xác định (hành vi xác định thực hiện).


5

Đi

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

Giải thích là đây . Các quy tắc "trong khi" và "despiteallobjections" không xuất hiện trong thông số kỹ thuật, nhưng từ vựng chỉ bỏ qua chúng, như một loại trứng Phục sinh. Tôi đoán rằng kẻ nói dối tuân thủ các tiêu chuẩn hơn bởi vì nếu bạn nhấp vào "Định dạng" trên liên kết Go Playground đó, bạn sẽ gặp lỗi phân tích cú pháp.


4

JavaScript

standards:
while(1)
   break standards

Giải trình:

Một vòng lặp while có nhãn "tiêu chuẩn" đã thoát.

Tiêu chuẩn bị phá vỡ:

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


2

GML phá vỡ một tấn tiêu chuẩn. Một là vẻ đẹp của việc không cho phép sử dụng các toán tử Ternary. Thay vì sử dụng Toán tử Ternary, trong GML tôi sẽ làm điều này:

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

Trường hợp tương đương Ternary là:

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

Đầu tiên là khá khó chịu đặc biệt là khi bạn bắt đầu thêm vào các hoạt động khác.


1

Haskell

Chương trình của tôi không thực sự phá vỡ bất kỳ tiêu chuẩn nào, mà chỉ chọn ngẫu nhiên một tiêu chuẩn để sử dụng. Nó cố gắng công bằng trên các tiêu chuẩn khác nhau. Đây là mã của tôi.

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

fairUnlinessẽ lấy danh sách các Chuỗi và tham gia chúng bằng các tiêu chuẩn ký tự dòng mới ngẫu nhiên. Ngoài ra, đây là lần đầu tiên tôi thực sự sử dụng phong cách ứng dụng, trên IO không hơn không kém.


1

Bash

Lấy từ ví dụ của bạn:

ping 192.168.0.1 -c 1 -s 10000

Giả sử bộ định tuyến của bạn đang ở 192.168.0.1

Lưu ý: kích thước ping tối đa là 65kb, vì vậy tôi đã thực hiện 10 kb thay vì 10 mb


Câu trả lời chính xác! Có phiên bản Windows nào không (Ngoài Cygwin)?
George

@GeorgeH - không phải tôi biết
TheDoctor

Ok - Tôi phải kích hoạt lại Virtualbox một lần nữa (Đã lâu rồi!)
George

0

Java

Ôi trời, ai đó lại quên cái getter ...

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

Các Usefullĩnh vực cần được thành chữ thường :useful

Không chắc chắn đây là một tiêu chuẩn: nhập ký tự đại diện vô dụng (chỉ nên java.lang.reflect.Fieldvì đó là tất cả những gì đang được sử dụng).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.