Bởi vì chúng ta không thể có đủ các sân golf ngôn ngữ bí truyền, phải không?
/// - chém phát âm là một ngôn ngữ nhỏ vui nhộn dựa trên s///
chức năng thay thế regex của danh tiếng Perl. Nó chỉ chứa hai ký tự đặc biệt, dấu gạch chéo /
và dấu gạch chéo ngược \
. Bạn có thể tìm thấy một bài viết đầy đủ về nó tại wiki esolang , nhưng tôi sẽ sao chép một mô tả về ngôn ngữ dưới đây, cũng như một số ví dụ.
Nói tóm lại, nó hoạt động bằng cách xác định /pattern/repl/rest
trong chương trình và thực hiện thay thế nhiều lần nhất có thể. Không có ký tự nào đặc biệt ngoại trừ /
và \
: /
phân định các mẫu và thay thế trong chương trình, trong khi \
cho phép bạn chèn chữ /
hoặc \
ký tự vào mã của mình. Đáng chú ý, đây không phải là biểu thức chính quy, chỉ là sự thay thế chuỗi đơn giản.
Thách thức của bạn là tạo ra một trình thông dịch cho ngôn ngữ ///, vì một chương trình đọc STDIN hoặc một hàm lấy một đối số chuỗi, càng ít ký tự càng tốt.
Bạn có thể sử dụng bất kỳ ngôn ngữ nào ngoại trừ ///. Bạn không được sử dụng bất kỳ thư viện nào diễn giải ///; tuy nhiên, bạn có thể sử dụng regexes, thư viện regex hoặc thư viện khớp chuỗi.
Chấp hành
Có bốn trạng thái, in , mẫu , thay thế và thay thế . Ở mọi tiểu bang ngoại trừ thay thế :
- Nếu chương trình trống, thực thi tạm dừng.
- Khác, nếu nhân vật đầu tiên là
\
, làm một cái gì đó với nhân vật tiếp theo (nếu có) và loại bỏ cả hai khỏi chương trình. - Khác, nếu ký tự đầu tiên là
/
, loại bỏ nó, và thay đổi sang trạng thái tiếp theo. - Khác, làm một cái gì đó với nhân vật đầu tiên và loại bỏ nó khỏi chương trình.
- Nói lại.
Các trạng thái chu kỳ thông qua in , mẫu , thay thế và thay thế theo thứ tự.
- Trong chế độ in , 'làm điều gì đó' có nghĩa là xuất ký tự.
- Trong chế độ mẫu , 'làm điều gì đó' có nghĩa là thêm ký tự vào Mẫu hiện tại.
- Trong chế độ thay thế , 'làm điều gì đó' có nghĩa là thêm ký tự vào Thay thế hiện tại.
Trong chế độ thay thế , bạn tuân theo một bộ quy tắc khác. Liên tục thay thế lần xuất hiện đầu tiên của Mẫu hiện tại bằng Thay thế hiện tại trong chương trình, cho đến khi không thể thay thế nữa. Tại thời điểm đó, xóa Mẫu và Thay thế và trở về chế độ in .
Trong chương trình /foo/foobar/foo foo foo
, những điều sau đây xảy ra:
/foo/foobar/foo foo foo
foo foo foo
foobar foo foo
foobarbar foo foo
foobarbarbar foo foo
...
Vòng lặp này mãi mãi và không bao giờ thoát khỏi chế độ thay thế . Tương tự, nếu Mẫu trống, thì lần xuất hiện đầu tiên của chuỗi rỗng ở đầu chương trình, luôn luôn khớp, do đó, chế độ thay thế lặp lại mãi mãi, không bao giờ dừng lại.
Ví dụ
no
Đầu ra : no
.
/ world! world!/Hello,/ world! world! world!
Đầu ra : Hello, world!
.
/foo/Hello, world!//B\/\\R/foo/B/\R
Đầu ra : Hello, world!
.
a/ab/bbaa/abb
Đầu ra : a
. Chương trình không dừng lại.
//
Đầu ra: không có.
///
Đầu ra: không có. Chương trình không dừng lại.
/\\/good/\/
Đầu ra : good
.
Ngoài ra còn có một quine trên wiki bạn có thể thử.
\
vật thoát khỏi bất kỳ nhân vật nào theo sau nó, bao gồm /
, sau này có thể được sử dụng như bình thường. Mặc dù điều này trông không giống lắm, nhưng điều này làm cho /// Turing-Complete .
///
IDE của tôi mà tôi đang thực hiện!
/-/World//--/Hello//--W/--, w/---!
Không yêu là gì? (Thử xóa dấu gạch ngang từ cuối)