Tóm lược
Một ngôn ngữ thao tác chuỗi mới đã được tạo ra, chỉ sử dụng các ký tự $+#-!*|@>
! Nhiệm vụ của bạn là triển khai một trình thông dịch cho nó với càng ít byte càng tốt.
Đầu vào
Một chuỗi, là một dòng duy nhất của ngôn ngữ này. Điều này có thể được thực hiện theo bất kỳ cách hợp lý nào (stdin, tham số hàm, đối số dòng lệnh, v.v.) hoặc như một biến được xác định trước. Nếu chương trình yêu cầu đầu vào của người dùng, hãy chấp nhận tất cả đầu vào của người dùng mà nó yêu cầu từ stdin và không có gì nữa, xem bên dưới. Bạn có thể cho rằng nó là một chương trình hợp lệ.
Đầu ra
Dù ngôn ngữ sẽ xuất ra, thông số kỹ thuật dưới đây. Bạn phải xuất một chuỗi, theo bất kỳ cách hợp lý nào (thiết bị xuất chuẩn, đầu ra hàm, v.v.) hoặc giá trị biến. Khi ngôn ngữ đầu ra rõ ràng, điều này phải đi đến thiết bị xuất chuẩn. Sơ hở tiêu chuẩn bị cấm.
Thông số kỹ thuật ngôn ngữ
Xử lý và cú pháp
Ngôn ngữ có một hình thức xử lý rất đơn giản vì nó chỉ thực hiện thao tác chuỗi: nó bắt đầu bằng một chuỗi rỗng ( ""
) và thay đổi nó theo từng thuật ngữ. Một thuật ngữ được tạo thành từ một hoặc hai phần: một hàm (bên dưới) theo sau có thể là một tham số (bên dưới), điều chỉnh hành vi của nó. Các điều khoản được phân tách bằng đường ống ( |
). Bạn có thể cho rằng nó sẽ không phải là một chương trình trống và không có thuật ngữ nào sẽ trống. Bạn nên xuất giá trị ở cuối chương trình.
Chức năng
Ngôn ngữ chỉ có 6 chức năng, như hình dưới đây. Mỗi chức năng chấp nhận một hoặc không tham số.
+
nối chuỗi (lấy một tham số chuỗi, nối chuỗi đó với giá trị hiện tại)!
đảo ngược thứ tự ký tự của giá trị hiện tại (không có tham số)*
lặp lại chuỗi (lấy một tham số nguyên, lặp lại giá trị hiện tại nhiều lần)-
xóa tất cả các lần xuất hiện của một giá trị (lấy một tham số chuỗi, xóa tất cả các lần xuất hiện của nó khỏi giá trị hiện tại)$
[pseudo-] ngẫu nhiên xáo trộn giá trị hiện tại (không có tham số)<
xuất giá trị hiện tại thànhstdout
(không có tham số)
Giá trị
Đây là các giá trị có thể được truyền cho các hàm, được biểu thị bằng biểu thức chính quy phù hợp với chúng:
@[^|]*
một chuỗi ký tự, bao gồm bất kỳ ký tự nào khác ngoài đường ống. Nó có thể trống rỗng.#[0-9]+
một số nguyên>
dòng tiếp theo củastdin
. Nếu được sử dụng với*
, chuyển đổi thành số nguyên.
Các trường hợp thử nghiệm
╔════════════════════════╤═════════════╤══════════════╗
║code │input │output ║
╟────────────────────────┼─────────────┼──────────────╢
║+>|!|+@hello|*> │13 │31hello31hello║
║ │2 │ ║
╟────────────────────────┼─────────────┼──────────────╢
║+>|+@abcdefg|$ │hello │hcloeebafdlg ║
╟────────────────────────┼─────────────┼──────────────╢
║+@how areyou|-@o|-> │w │h areyu ║
╟────────────────────────┼─────────────┼──────────────╢
║+@out|<|*#3 │ │out ║
║ │ │outoutout ║
╟────────────────────────┼─────────────┼──────────────╢
║+> │what ever 345│what ever 345 ║
╟────────────────────────┼─────────────┼──────────────╢
║+@$pe<i@l|<|-@$pe<i@l|+>│A|$o $pe<!@| │$pe<i@l ║
║ │ │A|$o $pe<!@| ║
╟────────────────────────┼─────────────┼──────────────╢
║<|+>|!|< │input text | ║
║ │ │txet tupni ║
║ │ │txet tupni ║
╟────────────────────────┼─────────────┼──────────────╢
║+@># │ |># ║
╚════════════════════════╧═════════════╧══════════════╝
Lưu ý rằng trường hợp thử nghiệm 2 là ngẫu nhiên, vì vậy mọi hoán vị của các ký tự trong đó đều hợp lệ. Ngoài ra, các đầu ra trong bảng được phân tách bằng các dòng mới, nhưng chương trình của bạn không phải làm như vậy. Giá trị cuối cùng trong mỗi trường hợp đầu ra cuối cùng.
Ví dụ (Un-golfed) trình thông dịch python
Hãy thử trực tuyến! IMO tốt hơn nếu bạn chạy nó thông qua IDLE hoặc bất cứ điều gì bạn sử dụng. (Tôi đã đánh nó xuống còn 424 byte sau đó, nhưng tôi chắc chắn rằng bạn có thể làm tốt hơn nhiều).
<
lần gặp phải. Đây có phải là bắt buộc?
+@>#
gì? Tôi đã sử dụng #
aswell.