Dùng thử esolang đầu tiên của tôi. Sau khi nhầm lẫn ban đầu tôi thấy rằng giải pháp rất đơn giản.
_1 p
_^v>~2+p
> >~3+p
> >~4+X@7~8+~@$^^{;
> >~5+@7~8+~@${;
Giải trình:
chương trình sáp ong hoạt động trên lưới lục giác 2D. Các chương trình được lưu trữ trong một định dạng hình chữ nhật.
a — b — c — d
/ \ / \ / \ /
e — f — g — h
/ \ / \ / \ /
i — j — k — l
được lưu trữ dưới dạng
abcd
efgh
ijkl
Các hướng dẫn để di chuyển theo các hướng nhất định là:
b — d
/ \ / \ bd
< —IP — > or in compact form (β=IP): <β>
\ / \ / pq
p — q
Giải thích ngắn
_1 p
Tạo IP, thêm 1, sau đó chuyển hướng IP sang dòng 2
_^v>~2+p
Tạo một IP khác, chỉ trong trường hợp dòng 1 bị thiếu, làm chậm IP để đảm bảo IP từ dòng một ở phía trước, sau đó thêm 2, sau đó chuyển hướng đến dòng 3
> >~3+p
Thêm 3, sau đó chuyển hướng đến dòng 4
> >~4+X@7~8+~@$^^{;
Thêm 4, sau đó đặt giá trị lstack thứ 2 thành 15, sau đó XOR lstack top và giá trị thứ 2, làm chậm IP (để đảm bảo IP ở dòng 5 ở phía trước, nếu dòng 5 tồn tại) và xuất kết quả, sau đó kết thúc chương trình.
> >~5+@7~8+~@${;
Thêm 5, sau đó làm tương tự như trong dòng 4, ngoại trừ việc làm chậm.
Về cơ bản chương trình chỉ tính tổng xor 15
- Chương trình nguyên vẹn: (1 + 2 + 3 + 4 + 5) xor 15 = 0
- Thiếu dòng 1: (2 + 3 + 4 + 5) xor 15 = 1
- Thiếu dòng 2: (1 + 3 + 4 + 5) xor 15 = 2
- Thiếu dòng 3: (1 + 2 + 4 + 5) xor 15 = 3
- Thiếu dòng 4: (1 + 2 + 3 + 5) xor 15 = 4
- Thiếu dòng 5: (1 + 2 + 3 + 4) xor 15 = 5
Việc bổ sung >
trong các dòng 3 đến 5 chỉ đảm bảo rằng nếu thiếu một trong các dòng 2 đến 4, IP vẫn được chuyển hướng đúng cách và không rời khỏi chương trình.
Bạn có thể sao chép trình thông dịch sáp ong của tôi, được viết bằng Julia, từ kho GitHub của tôi
Các readme trên GitHub được cập nhật hơn và có cấu trúc tốt hơn trang esolangs.