Bowling mã nguyên sơ và độc đáo


81

Thử thách của bạn rất đơn giản: viết càng dài một chương trình nguyên sơ càng tốt bằng ngôn ngữ bạn chọn chỉ sử dụng các byte duy nhất. (Định nghĩa đầy đủ của một chương trình nguyên sơ, được sao chép từ liên kết đó, nằm ở cuối câu hỏi này.)

Đúng vậy, không có chuỗi đính kèm. Mã của bạn hoàn toàn không phải làm bất cứ điều gì, chỉ cần chạy mà không gặp lỗi, đáp ứng các yêu cầu cho một chương trình nguyên sơ (được liên kết ở trên) và không bao gồm các byte trùng lặp trong mã hóa bạn sử dụng.

Đối với mục đích giải thích ở trên và định nghĩa được liên kết của "chương trình nguyên sơ", một lỗi được định nghĩa là bất cứ điều gì khiến chương trình hoàn toàn không chạy hoặc chấm dứt với mã thoát không khác sau một khoảng thời gian hữu hạn.

Vì đây là , dài nhất , không ngắn nhất, mã thắng (được đo bằng số byte). Điểm số lý thuyết tối đa có thể là 256, vì có 256 byte riêng biệt có thể. Trong trường hợp hòa, câu trả lời đầu tiên ở điểm cao nhất sẽ thắng.


Đây là định nghĩa đầy đủ của một chương trình nguyên sơ, được sao chép từ liên kết trên:

Chúng ta hãy định nghĩa một chương trình nguyên sơ là một chương trình không có bất kỳ lỗi nào nhưng sẽ lỗi nếu bạn sửa đổi nó bằng cách xóa bất kỳ chuỗi con liền kề nào của N ký tự, trong đó 1 <= N < program length.

Ví dụ, chương trình ba ký tự Python 2

`8`

là một chương trình nguyên sơ bởi vì tất cả các chương trình dẫn đến việc loại bỏ các chuỗi con có độ dài 1 gây ra lỗi (thực tế là lỗi cú pháp, nhưng bất kỳ loại lỗi nào cũng sẽ xảy ra):

8`
``
`8

và tất cả các chương trình dẫn đến việc loại bỏ các chuỗi con có độ dài 2 gây ra lỗi:

`
`

Ví dụ, `8nếu là một chương trình `8`không có lỗi thì sẽ không còn nguyên sơ vì tất cả các kết quả loại bỏ chuỗi con phải bị lỗi.


37
Thán phục bạn vì đã quản lý để tạo ra một thử thách chơi bowling tốt !
Sản phẩm ETH

Nếu một chương trình con chạy mãi nhưng không lỗi thì điều đó có làm cho câu trả lời không hợp lệ không?
dylnan

1
@dylnan "một lỗi được định nghĩa là [...] chấm dứt [...] sau một khoảng thời gian hữu hạn ."
dùng202729

3
@Baldrickk Không, nó sẽ không được phép cho thử thách này. (Nếu bạn đang đề cập đến ví dụ trong câu hỏi, đó là một cuộc biểu tình của những gì một chương trình nguyên sơ, nhưng mà không đáp ứng được yêu cầu bổ sung của byte độc đáo.)
Aidan F. Pierce

1
Chúng ta có thể tính hành vi không xác định là lỗi không nếu trong thực tế, nó thường dẫn đến lỗi? Tôi đang nghĩ về một cái gì đó giống như JMP <address outside of the program's memory>trong lắp ráp. Về nguyên tắc trên một máy tính thực, nó có thể lặp vô hạn hoặc thoát với một lỗi khác không, nhưng nó thường sẽ bị sập một cách ngoạn mục.
Chris

Câu trả lời:


22

Thạch , 253 254 256 byte

M“¢£¥¦©¬®µ½¿€ÆÇÐÑ×ØŒÞßæçðıȷñ÷øœþ !"#%&'()*+,-./0145689:;<=>?@ABCDEFGHIJKNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|~¶°¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ƁƇƑƓƘⱮƝƤƬƲȤɓƈɗƒɠɦƙɱɲƥʠɼʂƭʋȥẠḄḌẸḤỊḲḶṂṆỌṚṢṬỤṾẈỴẒȦḂĊḊĖḞĠḢİĿṀṄȮṖṘṠṪẆẊẎŻḅḍẹḥịḳḷṃṇọṛṣṭụṿẉỵẓȧḃċḋėḟġḣŀṁṅȯṗṙṡṫẇẋẏż”L»«’Ɗạ‘}237$¤¡

Hãy thử trực tuyến! hoặc xác minh nó!

Hóa ra ngôn ngữ chơi gôn có thể bát ...

  • +1 byte bằng cách làm việc trong . Bây giờ chỉ «»không được sử dụng
  • +2 byte với «». Bây giờ có điểm tối ưu!

Làm sao?

Tính năng quan trọng của Jelly làm cho điều này trở nên khả thi là các ký tự mở và đóng cho các chuỗi ký tự không giống như trong hầu hết các ngôn ngữ khác.

Cấu trúc chương trình như sau:

M <239 character long string> L»«’Ɗạ‘}237$¤¡

Mtìm thấy các chỉ số của đối số của nó trỏ đến các phần tử tối đa. Tất cả vấn đề là không có đối số cho chương trình này, Jelly gán 0cho chuỗi và lỗi Jelly khi Mđược áp dụng 0.

Để ngăn chặn Mhoạt động 0trong toàn bộ chương trình, chúng tôi sử dụng ¡nhanh, áp dụng Mmột số lần được xác định bởi kết quả của liên kết ngay trước nó. Trong trường hợp này liên kết là <239 character long string> L»«’Ɗạ‘}237$¤.

Llấy độ dài của chuỗi này (239) và »«’Ɗgiảm xuống còn 238. Phần »«này không làm gì cả Ɗ(ba liên kết cuối cùng là một đơn nguyên) làm cho nó nếu chúng bị xóa thì sẽ xảy ra lỗi. Sau đó lấy sự khác biệt tuyệt đối giữa kết quả »«’Ɗvà đơn nguyên ‘}237$được áp dụng cho chuỗi. gia tăng và là một đơn nguyên, nhưng }biến điều này thành một con đê và áp dụng nó vào lý lẽ đúng đắn của nó 237, mang lại 238. Do đó mang lại 0trong chương trình đầy đủ.

¤liên kết trở lại chuỗi theo nghĩa đen tạo thành một nilad. Kết quả của việc này là 0, do đó hoàn toàn Mkhông được áp dụng, ngăn ngừa bất kỳ lỗi nào.

Các chương trình con có thể:

  • Nếu bất kỳ phần nào của chuỗi bị loại bỏ, <string>..¤sẽ khác không và Mđược áp dụng 0, gây ra lỗi.
  • Nếu bất kỳ phần nào L»«’Ɗạ‘}237$bị xóa Msẽ được áp dụng 0hoặc sẽ có các hoạt động giữa chuỗi và số, dẫn đến a TypeError.
  • Nếu bất kỳ trong số đó ¤¡được gỡ bỏ, Mđược áp dụng cho 0.
  • Nếu ký tự đóng chuỗi và cả hai ’‘bị loại bỏ và không, mọi thứ sau khi Mbiến thành chuỗi Msẽ hoạt động 0.
    • Nếu ký tự đóng chuỗi bị xóa và không, mọi thứ giữa biến thành một danh sách các số nguyên.
  • Nếu Mmột mình bị loại bỏ, có một EOFErrorbởi vì ¡mong đợi một liên kết trước nilad trước.
  • Nếu M“và bất kỳ số lượng ký tự nào sau khi bị xóa, sẽ có một EOFError¤tìm kiếm một con số không trước nó nhưng không tìm thấy. 238không được tính bởi vì nó là một phần của một đơn nguyên.

Điều này khá nhiều bao gồm tất cả mọi thứ.

Trước đây tôi đã không sử dụng «»‘vì hai cái sau không thể được bao gồm trong chuỗi vì chúng khớp với ký tự để tạo thành những thứ khác ngoài chuỗi. «cũng không thể ở trong một “”chuỗi nhưng tôi không biết tại sao.


31

Haskell , 39 45 50 52 60 byte

main=do{(\𤶸	陸 ⵙߜ 新->pure fst)LT
EQ[]3
2$1}

Định danh mainphải có loại IO acho một số loại a. Khi chương trình được thực thi, việc tính toán mainđược thực hiện và kết quả của nó bị loại bỏ. Trong trường hợp này loại của nó là IO ((a,b)->a).

Kết quả là một ứng dụng của hàm (λ a b c d e f → return fst), hàm hằng sáu đối số trả về hàm fst (cung cấp phần tử đầu tiên của 2-tuple), được đưa vào đơn vị IO. Sáu đối số LT(enum cho ít hơn), EQ(enum cho bình đẳng), danh sách trống [], 3, 21.

Không gian nào sẽ được thay thế bằng các ký tự duy nhất được tính là khoảng trắng: tab, không gian không phá vỡ, nguồn cấp dữ liệu, tab dọc, Dấu không gian OGHAM, không gian thông thường, dòng mới và trả về vận chuyển. Nếu bất kỳ trong số này bị thiếu, sẽ có sự không phù hợp về số lượng đối số. Tên tham số được chọn là ba hoặc bốn ký tự UTF-8 byte 𤶸陸ⵙ商ߜ新, chọn cẩn thận các ký tự không dẫn đến các byte trùng lặp.

Cảm ơn @BMO vì những đóng góp quý báu của anh ấy.

Đổ lục giác:

00000000: 6d61 696e 3d64 6f7b 285c f0a4 b6b8 09ef  main=do{(\......
00000010: a793 c2a0 e2b5 990c e595 860b df9c e19a  ................
00000020: 80e6 96b0 2d3e 7075 7265 2066 7374 294c  ....->pure fst)L
00000030: 540a 4551 5b5d 330d 3224 317d            T.EQ[]3.2$1}

Hãy thử trực tuyến!


Hừm, '\109999'dường như là hợp lệ, ít nhất là trong GHC 8.2.2. '\10999a'tạo ra một lỗi từ vựng.
chepner

@chepner: Tôi vừa thử nghiệm với GHC 8.2.2 và cũng 𚶯tạo ra một lỗi từ vựng.
giờ 43 phút

2
@chepner: Char lớn nhất là maxBound :: Char, tức là '\1114111'. Lưu ý: các số là số thập phân theo mặc định, vì vậy nếu bạn muốn hex, bạn phải đặt xsau \ , ví dụ '\x10999a'.
nimi

@nimi Aaaand Tôi nghĩ rằng chúng tôi đã thiết lập tần suất tôi thực sự sử dụng thoát Unicode :) Sử dụng biểu mẫu chính xác cho các giá trị hex, \x10ffffhoạt động tốt và \x110000cung cấp một lỗi ngoài phạm vi như mong đợi.
chepner

24

Python 2 ,  20 21 33 39 45  50 byte

Bây giờ rất nhiều nỗ lực hợp tác!

+2 nhờ Aidan F. Pierce (thay thế sorted({0})bằng map(long,{0}))

+8 nhờ dylnan (sử dụng \ và dòng mới để thay thế không gian; đề xuất chuyển từ 0biểu thức toán học; thay thế -1bằng -True; sử dụng hệ thập lục phân)

+11 nhờ Angs ( 4*23+~91-> ~4836+9*1075/2sau đó ~197836254+0xbCABdDF-> ~875+0xDEAdFBCbc%1439/2*6)


if\
map(long,{~875+0xDEAdFBCbc%1439/2*6})[-True]:q

Hãy thử trực tuyến! Hoặc xem bộ xác nhận

0xDEAdFBCbclà thập lục phân và đánh giá 59775106236.
~là bổ sung bit-khôn ngoan để ~875đánh giá -876.
%là toán tử modulo để 0xDEAdFBCbc%1439đánh giá 293.
/là phép chia số nguyên để 0xDEAdFBCbc%1439/2đánh giá 146.
*là phép nhân để xDEAdFBCbc%1439/2*6đánh giá 876.
+là bổ sung để ~875+xDEAdFBCbc%1439/2*6đánh giá 0.
... không có phiên bản tước cũng đánh giá 0.

{0}là một setphần tử có chứa một 0.

Gọi sortedvới một setđối số mang lại một danh sách, có thể được lập chỉ mục với [...].

Không có sorted({0}) sẽ chỉ mang lại setvà điều này không thể được lập chỉ mục theo cùng một cách, if({0})[-True]:qsẽ tăng a TypeError.

Lập chỉ mục trong Python là dựa trên 0 và cho phép lập chỉ mục tiêu cực từ phía sau và Truetương đương với 1, do đó sorted({0})[-True]tìm thấy phần tử 0, trong khi sorted({0})[True]sẽ tăng mộtIndexError cú pháp , như ý muốn sorted({})[-True]sorted({0})[]là cú pháp không hợp lệ.

Cái 0được tìm thấy là falsey nên cơ thể của if,q không bao giờ được thực thi, tuy nhiên nếu nó sẽ tăng lên NameErrorqnó chưa được xác định.

Vì một danh sách không trống là sự thật, chúng tôi không thể cắt giảm thành if[-1]:qmột trong hai.

Xem bộ xác nhận để xem: xác nhận các byte là duy nhất; tất cả các lỗi; và sự thành công của chính mã.


17

C (tcc) , x86_64, 29 31 33 39 40 byte

main[]={(23*8),-~0xABEDFCfebdc%95674+1};

Trả về 0 . Cảm ơn @feersum đã gợi ý các chữ số hex chữ hoa.

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

Bài tập ghi hai int ( 18449664 ) vào vị trí bộ nhớ của main . Với ints 32 bit và thứ tự byte cuối nhỏ, các byte chính xác là b8 00 00 00 00 c2 00 00.

Vì tcc không khai báo mảng được xác định là .data (hầu hết các trình biên dịch sẽ), do đó, việc chuyển sang chính sẽ thực thi mã máy mà nó trỏ tới.

  • b8 00 00 00 00( mov eax, imm32) lưu trữ int 0 trong thanh ghi eax.

  • c2 00 00( ret imm16) bật thêm 0 byte từ ngăn xếp và trả về. (Giá trị trong thanh ghi eax là giá trị trả về của hàm).


Liên kết TIO đang hiển thị lỗi phân đoạn cho tôi.
pppery

15

> <> , 122 byte

e"~l=?!z6-d0p}xwutsrqonmkjihgfcba`_]\[>ZYXWVUTSRQPONMLKJIHGFEDCB@<:98754321/,+*)('&%$# .	|{Ay

Hãy thử trực tuyến!

Không lam gi cả. Dựa trên cùng định dạng với câu trả lời Lập trình Thế giới Nguyên sơ của tôi .

Đầu tiên, chúng tôi kiểm tra xem độ dài của mã là 122 và lỗi nếu không. ><>các chương trình không thể kết thúc mà không sử dụng ;lệnh, nhưng nếu lệnh này có trong chương trình, chúng ta có thể xóa mọi thứ trước khi chương trình kết thúc ngay lập tức. Để chống lại điều này, chúng tôi sử dụng plệnh để đặt ;mã trong thời gian chạy. Để làm điều này, chúng tôi trừ 6 Avà đặt nó saup .

Có lẽ tôi sẽ thêm hầu hết các giá trị khác trên 127 sau khi tôi tìm ra hai giá trị byte đúng. 5 giá trị còn thiếu là v^;và hai dòng mới.

Trong số 7502 chương trình con, 7417 trong số đó bị lỗi từ các hướng dẫn không hợp lệ, 72 từ tràn bộ nhớ và 13 do hết bộ nhớ.


13

JavaScript, 42 byte

if([0XacdCADE*Proxy.length]!=362517948)田
  • Loại bỏ i, fhoặc ifsẽ gây ra SyntaxError: missing ; before statement;
  • Loại bỏ sẽ gây ra SyntaxError: expected expression, got end of script;
  • Loại bỏ 1 hoặc 2 byte khỏi sẽ gây ra Invalid or unexpected token;
  • Sửa đổi biểu thức boolean sẽ gây ra Lỗi cú pháp hoặc Lỗi tham chiếu trên

00000000: 6966 285b 3058 6163 6443 4144 452a 5072  if([0XacdCADE*Pr
00000010: 6f78 792e 6c65 6e67 7468 5d21 3d33 3632  oxy.length]!=362
00000020: 3531 3739 3438 29e7 94b0                 517948)...


9

Brain-Flak , 2 byte

<>

Hãy thử trực tuyến!

Ngoài ra [], {}hoặc (). Loại bỏ một trong hai khung làm cho khung khác trở nên không khớp.

Bằng chứng rằng đây là giải pháp tối ưu:

Một chương trình Brain-Flak được tạo ra từ nilad (một cặp dấu ngoặc đơn) hoặc monads (một cặp dấu ngoặc chứa 1 hoặc nhiều nilad). Một đơn nguyên không thể nằm trong một chương trình nguyên sơ, vì bạn chỉ cần loại bỏ một hoặc nhiều nilad. Tương tự, bạn không thể có nhiều hơn một con số không trong chương trình, vì bạn có thể loại bỏ một trong số chúng mà không phá vỡ chương trình.

Như vậy, đây có thể là ngôn ngữ tối ưu nhất cho lập trình nguyên sơ hoặc duy nhất.


6

Ada, 110 byte (latin1)

Có lẽ câu trả lời tốt nhất bạn sẽ thoát khỏi bất kỳ ngôn ngữ nào được sử dụng trong công nghiệp?

Hexdump:

0000000: 7061 636b 4167 4520 6266 686a 6c6d 6f71  packAgE bfhjlmoq
0000010: 7274 7576 7778 797a e0e1 e2e3 e4e5 e6e7  rtuvwxyz........
0000020: e8e9 eaeb eced eeef f0f1 f2f3 f4f5 f6f8  ................
0000030: f9fa fbfc fdfe 0d69 730b 656e 6409 4246  .......is.end.BF
0000040: 484a 4c4d 4f51 5254 5556 5758 595a c0c1  HJLMOQRTUVWXYZ..
0000050: c2c3 c4c5 c6c7 c8c9 cacb cccd cecf d0d1  ................
0000060: d2d3 d4d5 d6d8 d9da dbdc ddde 3b0a       ............;.

Biên dịch bằng cách lưu vào bất kỳ tập tin kết thúc .adsvà chạy gcc -c <filename>. Sản xuất một thực thi mà không làm gì. (Không thể cung cấp liên kết TIO vì TIO đặt mã vào một .adbtệp và gcctheo mặc định cố gắng tìm thông số phù hợp cho chúng)

Về cơ bản khai báo một gói với một tên lạm dụng chữ hoa / chữ thường Latin1. Cần một ký tự khoảng trắng khác nhau cho mỗi khoảng trắng, vì vậy nó sử dụng khoảng trắng, CR, LF và TAB.

Nó trông như thế nào trong phiên bản vim:

packAgE bfhjlmoqrtuvwxyzàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþ^Mis^Kend^IBFHJLMOQRTUVWXYZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ;

Làm thế nào nó hoạt động

Trong Ada thậm chí spec có thể được biên dịch. Spec giống như các tệp tiêu đề của c, nhưng có đầy đủ tính năng hơn và có thể biên dịch một số mã cơ bản. Để có giá trị bất kỳ đặc điểm kỹ thuật phải có định dạng: package <NAME> is ... end <NAME>;với <NAME>phù hợp. Điều tốt đẹp về Ada là nó hoàn toàn không nhạy cảm. Do đó, miễn là tên của bạn có các biến thể chữ hoa và chữ thường, bạn sẽ ổn thôi!

Phần khó là nhận được một đơn vị biên dịch. Thông thường các chương trình Ada có quy trình hoặc chức năng 'chính' nằm ngoài bất kỳ gói nào sẽ trở thành tệp thực thi cuối cùng. Thật không may, các thủ tục yêu cầu begintừ khóa, dẫn đến quá nhiều es (chỉ có 2 trường hợp được biết) trong khi các hàm yêu cầu returntừ khóa, dẫn đến quá nhiều ns. Vì vậy, tôi đã phải biên dịch một gói.


5

C, 8 byte

main(){}

Không lam gi cả.

Hãy thử trực tuyến!


1
Có thể tôi không hiểu thử thách nhưng còn vềmain(){short x;}
Jerry Jeremiah

@JerryJeremiah: không, main(){short;}biên dịch chỉ với a warning: useless type name in empty declaration. Tôi nghĩ C99 và C ++ yêu cầu loại trả về rõ ràng, vì vậy int main(hoặc có thể unsigned main) có thể hoạt động, nhưng không phải với gcc mà chỉ cảnh báo ngay cả với -std=c11.
Peter Cordes

@JerryJeremiah: return 0;có thể có thể xảy ra với C89, ở đó không có ẩn return 0ở cuốimain . Thoát khỏi trạng thái khác không có thể được coi là thất bại, theo các câu trả lời khác. Việc thêm các cờ biên dịch như -Werrorđếm vào điểm số theo cách tốt trong trò chơi bowling? Bởi vì việc thực thi nghiêm túc các vi phạm của C11 có thể cho phép một chương trình dài hơn nhiều. Hmm, #include<>một cái gì đó và sau đó sử dụng nó; bạn không thể xóa cả bao gồm và sử dụng, và nếu nó gặp sự cố mà không có nguyên mẫu hoặc macro def, bạn sẽ thắng.
Peter Cordes

@PeterCordes Tôi đã nghĩ về điều đó, nhưng mainincludecả hai đều chứai , nên bạn không thể có cả hai. Tương tự như vậy để khai báo và sử dụng một hàm. Cũng sử dụng returntất cả đến để nghĩ về nó.
Chris

Rất tiếc, tôi quên mất yêu cầu byte duy nhất; Tất nhiên là int mainkhông thể làm việc.
Peter Cordes

4

JavaScript, 22 byte

with(0xF?JSON:[])parse

Hãy thử trực tuyến!

Lỗi có thể

Khi bị thay đổi, nó sẽ đưa ra một trong các lỗi sau 1 :

[some_identifier] is not defined
expected expression, got ')'
expected expression, got ':'
expected expression, got '?'
expected expression, got ']'
expected expression, got end of script
identifier starts immediately after numeric literal
missing ( before with-statement object
missing ) after with-statement object
missing : in conditional expression
missing ] after element list
missing exponent
missing hexadecimal digits after '0x'
missing octal digits after '0o'
unexpected token: ')'
unexpected token: ']'
unexpected token: identifier

1. Số lỗi chính xác phụ thuộc vào động cơ. Danh sách này được tạo bằng SpiderMonkey (Firefox).


4

Python 3 + Flask-Env , 7 13 14 17 byte

import\
flask_env

Không có TIO vì nó không có flask-env.

Tìm thấy tên mô-đun dài nhất không có giao điểm với import và không có bất kỳ số nào ở cuối tên. _sha256dài hơn nhưng 256bản thân nó không có lỗi. Tôi đã tìm thấy một thư viện, b3j0f.syncđó là một byte dài hơn nhưng tôi không thể nhập nó để nhập đúng.

  • +1 byte bằng cách thay thế một khoảng trắng sau importbằng \<newline>. Lấy ra một trong hai hoặc cả hai đều gây ra lỗi.

Vẫn có thể có các tùy chọn dài hơn flask_env, tôi thực sự không thực hiện tìm kiếm toàn diện nhưng tôi đã xem qua ~ 70.000 mô-đun. Mở để đề xuất.


256chạy mà không bị lỗi.
Aidan F. Pierce

@ AidanF.Pierce Cảm ơn, đã sửa.
dylnan

Tôi đã thử import *[hawkey]và tương tự nhưng tiếc là không hoạt động ...
dylnan

1
hawkey không có trong thư viện tiêu chuẩn, vì vậy đây là "Python with hawkey" (có thể có thể làm tốt hơn với một số mô-đun khác ở đâu đó)
Jonathan Allan

@Jonathan ALLan Điểm tốt. Phải đi ngay bây giờ nhưng tôi sẽ tìm kiếm sau
dylnan

3

R , 14 byte

(Sys.readlink)

Hãy thử trực tuyến!

Đây có thể là thời gian dài nhất có thể trong R. Gọi bất kỳ chức năng nào đều bị thất bại, bởi vì bạn sẽ có thể xóa mọi thứ trừ tên hàm, điều này sẽ dẫn đến việc in mã nguồn của chức năng. Đây là đối tượng được đặt tên dài nhất trong thiết lập R mặc định không có ký tự trùng lặp và không còn tên đối tượng khi xóa các ký tự liền kề.

Lần thử đầu tiên này không hiệu quả, nhưng tôi đã học được rất nhiều bằng cách thử!

dontCheck({family;NROW})


2

Perl 5, 3 byte

y=>

=>là "dấu phẩy béo", trích dẫn bareword bên trái. Vì vậy, điều này tương đương với

"y",

mà không làm gì cả

Không có dấu phẩy béo, y là toán tử chuyển ngữ, không hợp lệ nếu không có ba ký tự giống nhau được lặp lại sau đó.

Dấu phẩy chất béo một mình cũng không hợp lệ, như là =>một mình.




1

ML chuẩn , 22 byte

val 1089=op-(765,~324)

Hãy thử trực tuyến! op-(a,b)là hình thức khử đường của a-b. ~biểu thị điểm trừ đơn nguyên, vì vậy chúng tôi thực sự đang tính toán 765+324. Biểu thức này được khớp mẫu trên hằng số1089 . Trận đấu này thành công nếu chương trình không bị can thiệp và không - tốt, không có gì.

Nếu trận đấu không thành công vì một số chữ số đã bị xóa, người ta sẽ nhận được một unhandled exception: Bind. Xóa op-kết quả trong một lỗi loại vì một tuple được khớp trên một int. Tất cả các loại bỏ khác sẽ dẫn đến một lỗi cú pháp.


1

Swift 4 , 19 byte

[].contains{1 !=
0}

Hãy thử trực tuyến!

Tất cả các lỗi có thể tôi đã tìm thấy là:

  • Loại bỏ bất kỳ [, ], {hoặc }sẽ gây ra một lỗi cú pháp
  • Loại bỏ [].sẽ dẫn đếnUse of unresolved identifier 'contains'
  • Loại bỏ .sẽ dẫn đếnConsecutive statements on a line must be separated by ';'
  • Loại bỏ []sẽ dẫn đếnReference to member 'contains' cannot be resolved without a contextual type
  • Loại bỏ {1 !=␊0}sẽ dẫn đếnExpression resolves to an unused function
  • Loại bỏ 1 !=␊0sẽ dẫn đếnMissing return in a closure expected to return 'Bool'
    • Xóa dòng mới sẽ dẫn đến '!=' is not a prefix unary operator
    • Xóa không gian sẽ dẫn đến '=' must have consistent whitespace on both sides
    • Loại bỏ !=sẽ dẫn đếnMissing return in a closure expected to return 'Bool'
      • Ngoài ra loại bỏ dòng mới sẽ dẫn đến Consecutive statements on a line must be separated by ';'
      • Xóa khoảng trắng và dòng mới (và 0 hoặc một trong các chữ số) sẽ dẫn đến Contextual type for closure argument list expects 1 argument, which cannot be implicitly ignored
  • Loại bỏ [].containssẽ dẫn đếnClosure expression is unused

Một số chương trình thú vị khác là (một trên mỗi dòng):

[].isEmpty
[:].values
[1:2]

Nó chứa hai as
caird coinheringaahing



0

Võng mạc , 2 byte

Tôi sẽ không ngạc nhiên nếu điều này là tối ưu ...

()

Hãy thử trực tuyến!

Regex chứa một nhóm trống. Loại bỏ một trong hai paren sẽ gây ra lỗi phân tích cú pháp do dấu ngoặc đơn chưa từng có.

Giải pháp khác là: \(, \), \[, \], \*, \+, \?,a]


a]không có lỗi.
jimmy23013

@ jimmy23013 À, tôi không biết mình đã bỏ lỡ điều đó như thế nào. Cuộn lại.
mbomb007

-2

C (gcc) , 73 75 byte

#include <ftw.h>
ABCEGHIJKLMNOPQRSUVXYZabjkmopqrsvxz234567890(){g FTW_D-1;}

Hãy thử trực tuyến!

Dựa trên câu trả lời của @Steadybox, cảm ơn @Angs vì đã phát hiện ra lỗi nghiêm trọng.

Đúng, đó một bản hack bẩn (vì thực tế nó sử dụng #definevới -DABCEGHIJKLMNOPQRSUVXYZabjkmopqrsvxz234567890=main-Dg=return), nhưng tôi không thấy bất kỳ quy tắc nào cấm tùy chọn trình biên dịch như vậy.


Dòng đầu tiên có thể bị lấy đi để chương trình không còn nguyên sơ
Angs

@Angs Cảm ơn, đã sửa (với giá thêm tùy chọn trình biên dịch khác)
xe đẩy813

7
Theo bài đăng meta này , bài đăng của bạn không còn bằng ngôn ngữ C, mà là C89 + -DABCEGHIJKLMNOPQRSUVXYZabjkmopqrsvxz234567890=main+ -Dg=return, vì vậy tôi cho rằng điều này sử dụng ngôn ngữ tạo ra được thiết kế riêng cho thử thách , bị cấm theo mặc định.
Dennis

Bạn có thể xóa -1mà không bị lỗi
Jo King
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.