Bẩn thỉu và độc đáo


26

Trong câu hỏi này tôi sẽ nói về các chương trình dưới dạng chuỗi, đây là chuỗi byte, không phải ký tự. Làm thế nào chương trình kết quả của bạn được hiển thị hoặc hiển thị không quan trọng đối với thử thách này, chỉ là cách nó xuất hiện trong bộ nhớ.

Một chương trình nguyên sơ là một chương trình mà khi chạy không có lỗi, tuy nhiên nó sẽ báo lỗi bất cứ khi nào một chuỗi con liên tục có kích thước n , trong đó 1 n < | S | , bị xóa.Sn1n<|S|

Một chương trình bẩn thỉu thì ngược lại, đó là một chương trình mà khi chạy không có lỗi, tuy nhiên bất cứ khi nào một chuỗi con liên tục có kích thước n , trong đó 1 n < | S | , được gỡ bỏ, nó không lỗi.Sn1n<|S|

Đối với thử thách này, một lỗi là đầu ra không trống cho STDERR.

Thách thức của bạn là viết một chương trình bẩn thỉu sử dụng càng nhiều byte càng tốt. Điều này có nghĩa là bạn sẽ nhận được một điểm cho mỗi byte duy nhất xuất hiện trong mã của bạn với số điểm lớn hơn sẽ tốt hơn. Do đó, điểm tối đa là 256.


Thậm chí có thể trả lời điều này bằng các ngôn ngữ liên quan đến dấu ngoặc / ngoặc đơn không? Có thể xóa một số chuỗi con khỏi mã để có các dấu ngoặc không khớp.
JungHwan Min

@JungHwanMin Nếu ngôn ngữ thực thi các dấu ngoặc đơn cân bằng, tôi sẽ nghi ngờ rằng điều đó là không thể.
Phù thủy lúa mì

@CatWizard để chương trình bẩn thỉu không xảy ra lỗi khi một chuỗi ký tự con liên tục (nghĩa là không đặt byte liên tục) bị xóa, đúng không?
JungHwan Min

@JungHwanMin Xin lỗi. Hên xui. Chúng tôi chỉ quan tâm đến chuỗi liên tục.
Phù thủy lúa mì

Câu trả lời:


18

Unary , 14 byte

123456789ABCDE

Điều này mã hóa chương trình brainfuck [, lỗi do dấu ngoặc không khớp.

Byte loại bỏ sẽ cho kết quả >, <, +, -, ., ,hoặc chương trình trống rỗng, mà là những chương trình Brainfuck hợp lệ.


Đây là giải pháp tối ưu, vì bất kỳ giải pháp nào dài hơn có thể được giảm xuống cho giải pháp này, đó là lỗi
Jo King

Đây cũng là giải pháp duy nhất.
dùng202729

13

R , 3 byte

qrt

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

Tên của một đối tượng là một chương trình hợp lệ trong R.

qrt không phải là tên của bất cứ điều gì, vì vậy nó trả về một lỗi.

q là chức năng bỏ

qr là chức năng phân rã QR

rt là hàm lấy mẫu phân phối t

qt là phân phối nghịch đảo CDF

t là hàm chuyển


2
@pajonk nhưng "r" là một chuỗi con liên tục. Loại bỏ lá "qt"
Orphevs

3
Có chính xác một chương trình bẩn thỉu trong R có độ dài 3, và đây là nó! (chương trình chỉ có giá trị đơn char là 0-9cqtCDFIT, do đó bất kỳ chương trình phải bắt đầu với cm, qf, qr, qt, tshoặc Im. Chiều dài ba khả năng được qrf, qrm, qrt, qtstsdvà chỉ có một trong số này là bẩn thỉu (những người khác có thể không được gia hạn hoặc để làm cho họ bẩn thỉu như không có chức năng rm*, rf*, ts*, sd*)
JDL

@Hoặc tôi xấu, đọc sai thử thách.
pyjama

10

Thạch , 4 5 6 7 8 10 11 byte

“a”;⁽PFð+µU

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

Xác minh điều đó.

Cố gắng thêm một chuỗi với một số nguyên.

Một số chương trình con có thể:

“a” là một chuỗi theo nghĩa đen.

“a là cùng một chuỗi chữ.

là chuỗi rỗng.

“a”; nối "a" với chính nó.

... quá nhiều để liệt kê tất cả.


1
May mắn là Jelly vẫn cho phép bạn gặp lỗi.
dùng202729

6

Đa âm, 3 byte

1 2

Hoạt động trong:

  • JavaScript
  • Hồng ngọc
  • R
  • Octave
  • GHCi
  • Julia

Trong JavaScript, ném SyntaxError: mã thông báo không mong muốn: chữ số hoặc một lỗi tương tự.

Tất cả các chuỗi khác là chữ số hợp lệ ( 1 , 2 hoặc 12 ).


Trong GHCi, cú ném này

<interactive>:1:1: error:
     Non type-variable argument in the constraint: Num (t1 -> t2)
      (Use FlexibleContexts to permit this)
     When checking the inferred type
        it :: forall t1 t2. (Num t1, Num (t1 -> t2)) => t2

Điều này là do nó cố gắng áp dụng 1để 2như một chức năng, tuy nhiên nó không thể. Khi bất kỳ phần nào của điều này được loại bỏ, nó chỉ đơn giản trở thành một chữ số.


Polyglot: R, Octave, Ruby, Pythons ...
ngm

1
@ngm GHCi cũng vậy, tuy nhiên lỗi `2` trong python.
Phù thủy lúa mì

Tôi nghi ngờ rằng nó rất chung chung. Tôi đã biến trang này thành wiki cộng đồng, vì vậy hãy thoải mái chỉnh sửa với tất cả các ngôn ngữ mà công cụ này hoạt động!
Arnauld


5

Python 2/3 , 3 byte

4\f2

HOẶC LÀ

4\x0c2

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

Trong python "\ f" giống như "\ x0c" và là một dạng thức ăn ký tự . Điều này có nghĩa là nó chỉ ra cho một máy in đi đến dòng tiếp theo.

Nếu một biểu thức python bắt đầu hoặc kết thúc bằng \f, về cơ bản nó bị bỏ qua vì vậy đó \f2là một biểu thức hợp lệ.

Các 42có thể là bất kỳ số 0-9. Tuy nhiên, đối với byte đầu tiên 0chỉ có giá trị trong Python 2.7.15, như 02đã được khai báo hợp pháp 2.

Vì vậy, chính biểu thức thất bại với Lỗi cú pháp, bởi vì có hai số được phân tách bằng khoảng trắng. Tuy nhiên, bất kỳ sự rút ngắn nào đặt \fở đầu hoặc cuối, khi nó không quan trọng, hoặc nó tạo ra 42cái nào là hợp lệ.

(Điều đáng chú ý là trong IDLE, tệp này mở ra trông giống như "42".)

Nguồn giải thích nguồn cấp dữ liệu mẫu: /programming//a/26184126


3
Điều này sẽ dễ hiểu hơn nếu bạn sử dụng mã thực tế trong nguồn mà không có \f. Đây là một liên kết thử trực tuyến từ đó bạn có thể nhận được câu trả lời được định dạng trước.
Phù thủy lúa mì

1
Tôi đã thêm nó như là một biến thể để làm rõ. Ngoài ra, cảm ơn bạn đã gợi ý của liên kết.
Matt

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.