Về cơ bản, quá tẻ nhạt để viết thủ công bất kỳ mã nào. Thách thức của bạn là dịch văn bản ASCII sang mã nguồn của Cuba.
Cơ bản
Đây chỉ là một sự cố nhanh chóng của Cubally; các kho lưu trữ có hướng dẫn đầy đủ hơn và chi tiết.
Thực chất là một esolang tôi đã viết cách đây một thời gian, được thiết kế để gây đau đớn khi sử dụng. Nó chứa hai mảnh bộ nhớ, khối Rubik 3x3x3 và một thanh ghi gọi là "notepad".
Ký ức
Khối Rubik nội bộ được khởi tạo như thế này:
000
000 top face
000
111222333444 left, front, right, and back faces, respectively
111222333444
111222333444
555
555 down face
555
Sau khi thực hiện quay 90 ° theo chiều kim đồng hồ ở mặt phải, khối bộ nhớ sẽ trông như thế này:
002
002
002
111225333044
111225333044
111225333044
554
554
554
Các lệnh
Một ký tự không nguyên đặt lệnh mặc định. Đối với mỗi số nguyên trước khi lệnh mặc định được đặt lại một lần nữa, lệnh được thực hiện với số nguyên đó. Ví dụ, x524y312
sẽ thực hiện lệnh x
với 5, sau đó với 2, sau đó với 4, sau đó thực hiện lệnh y
với 3, sau đó với 1, sau đó với 2.
Các số nguyên mà các lệnh sử dụng đại diện cho các chỉ mục khuôn mặt. Vì thếx0
sẽ thực hiện x
trên mặt UP (0-index). x1
sẽ thực hiện x
trên mặt TRÁI (1 chỉ mục), v.v.
Thực hiện bất kỳ lệnh nào 6
sẽ thực hiện lệnh đó trên giá trị notepad. Thực hiện bất kỳ lệnh nào với bất kỳ số nguyên nào trên 6 sẽ dẫn đến lỗi.
Dưới đây là một số lệnh ví dụ:
R1
- xoay mặt PHẢI theo chiều kim đồng hồ 90 ° để khối bên trong sẽ trông giống như ví dụ thứ hai ở trênR11
- xoay mặt PHẢI theo chiều kim đồng hồ 90 ° hai lần, giống hệt vớiR2
+0
- thêm tất cả các giá trị của mặt UP vào notepad+000
- thêm tất cả các giá trị của mặt UP vào notepad ba lần@6
- in khuôn mặt không có chỉ số thứ 6 (bộ nhớ) dưới dạng ký tự%4
- in tổng của tất cả các giá trị trên mặt BACK dưới dạng số nguyên
Một danh sách đầy đủ các lệnh và cú pháp có sẵn tại kho lưu trữ .
Thử thách
Bạn sẽ lấy văn bản ASCII làm đầu vào và in chương trình Lập phương làm đầu ra.
Ví dụ (bị đánh cắp từ đây và đây ):
Input -> Output
Hello, World! -> +53@6+1F2L2+0@6L2F2U3R3F1L1+2@66L3F3R1U1B3+0@6:4U1R1+00@6-000@6*0-4+000@6-00@6+2-000000@6-5+4000@6-00@6/0+00@6:0+0/0+00@6
1$2$3$4$5$6$7$8$9$10$ -> B1+2/2%6@4+00/0%6@4+00/1%6@4+21/1%6@4+30/0%6@4+22/1%6@4+22/1%6@4+40/1%6@4+52/1%6@4+42/1%6@4
Quy tắc
- Chương trình của bạn không được chứa từ điển chứa các bản dịch cho 100 testcase.
- Chương trình của bạn phải hoàn thành trong vòng chưa đầy 180 giây (không có chương trình vũ phu nào phải mất hàng tuần).
- Chương trình của bạn phải xuất mã hợp lệ hoàn thành trong vòng chưa đầy 180 giây.
- Chương trình của bạn sẽ nhận đầu vào thông qua đầu vào tiêu chuẩn, trừ khi bạn muốn gây rối với trình điều khiển thử nghiệm.
- Chương trình của bạn phải xuất mã Mã không tạo ra gì ngoài đầu vào của chương trình khi chạy. ಠ_ಠ
Chấm điểm
Bạn sẽ kiểm tra chương trình của mình với 100 chuỗi pseudorandom có độ dài giả ngẫu nhiên. (Một tập lệnh bash được cung cấp sẽ làm điều này cho bạn.) Đây là cách bạn sẽ ghi điểm:
- Đặt độ dài của chương trình đầu ra là o .
- Đặt độ dài của chuỗi đầu vào là l .
- Đặt một biến r là kết quả của o / l .
- Tìm trung bình của tất cả r : (r 1 + r 2 + r ... + r 100 ) / 100 .
Thử nghiệm với kịch bản này. Bạn sẽ phải sửa đổi nó theo hướng dẫn. Lưu ý rằng chương trình không kiểm tra xem đầu ra có hợp lệ không. Nếu bạn không thể làm cho kịch bản hoạt động, tôi có thể giúp. Ping tôi trong phòng chat Cuba .
@6
- in tổng của khuôn mặt không có chỉ số thứ 6 (notepad) dưới dạng ký tự" có chính xác hơn không? Là %4
cũng là một tổng? Là +
các lệnh tổng mặt sau đó thêm nó vào tất cả các giá trị hoặc ...?
@6
/ %6
chỉ in trực tiếp giá trị notepad dưới dạng ký tự / số nguyên. @x
/ %x
(trong đó x là bất kỳ mặt hiện có nào) thêm tất cả các giá trị trên x
mặt -exexed và in tổng dưới dạng một ký tự / số nguyên. +
thêm tất cả các giá trị trên mặt được chỉ định vào thanh ghi.