Befunge là ngôn ngữ lập trình bí truyền 2 chiều. Ý tưởng cơ bản là các lệnh (một ký tự) được đặt trên lưới 2 chiều. Dòng điều khiển đi ngang qua lưới, thực hiện các lệnh mà nó đi qua và thay đổi hướng khi chạm vào một mũi tên ( >^<v
). Các lệnh được dựa trên ngăn xếp; thấy danh sách này . Xem thêm http://esolangs.org/wiki/Befunge .
Thông số kỹ thuật cho Befunge-98 có sẵn.
Vấn đề
Viết chương trình biến đổi chương trình Befunge thành biểu diễn nhỏ gọn hơn. Ví dụ, chương trình sau in 0
:
> 0 v
> @ .
^ <
Trong trường hợp này, nó có thể được nén mà không thay đổi hành vi của chương trình bằng cách xóa các hàng khoảng trắng, để cung cấp
>0v
>@.
^ <
Các phép biến đổi phức tạp hơn có thể xoay hoặc phản chiếu các chuỗi lệnh và loại bỏ các lệnh điều khiển luồng không cần thiết để thu gọn chương trình. Ví dụ, với chương trình này:
>12345v
6
v....7<
.
.
.
@
bạn có thể nhét phần cuối của chương trình vào lỗ:
>12345v
>...@ 6
^....7<
Ví dụ đầu tiên, chương trình nhỏ gọn nhất có thể là
>0.@
Bạn có thể sử dụng bất kỳ biến đổi nào miễn là chương trình đầu ra cho kết quả tương tự.
Chương trình đầu vào
Các chương trình đầu vào là các chương trình Befunge-98 hợp lệ.
Bạn có thể cho rằng chương trình đầu vào là xác định. Đó là, nó không sử dụng các lệnh đọc trạng thái bên ngoài: các lệnh đầu vào của người dùng &
và ~
, bộ ngẫu nhiên hóa ?
, và các lệnh mã tự sửa đổi p
và g
.
Bạn có thể giả sử chương trình đầu vào chấm dứt.
Chấm điểm
Đây không phải là một mã golf, nhưng là một vấn đề để viết một chương trình thực hiện mã golf.
Đầu vào là một tập hợp các trường hợp thử nghiệm (các chương trình Befunge thỏa mãn các hạn chế đầu vào ở trên). Tổng số điểm là tổng số điểm cho các trường hợp kiểm tra.
Điểm cho mỗi trường hợp kiểm tra
Điểm số là diện tích vỏ lồi của các ô không trống trong chương trình đầu ra, trong đó mỗi ô được coi là một hình vuông có bốn góc là các điểm lưới trong mặt phẳng Cartesian. Ví dụ, một chương trình
> v
@ <
được điểm 9,5.
Nếu chương trình của bạn không kết thúc trong một khoảng thời gian và bộ nhớ hợp lý trên một đầu vào cụ thể, thì điểm số là của chương trình đầu vào. (Điều này là do bạn có thể thêm một trình bao bọc giới hạn thời gian, làm cho chương trình đầu vào không thay đổi nếu chương trình của bạn không kết thúc kịp thời.)
Nếu chương trình trường hợp thử nghiệm có kết quả khác (hoặc không kết thúc) sau khi xử lý với chương trình của bạn, điểm số là điểm của chương trình đầu vào cộng với hình phạt là 100 điểm.
.
có nghĩa là số nguyên đầu ra, nhưng nếu bạn bắt đầu từ trên cùng bên trái, thì không có số nguyên trong ngăn xếp để đầu ra.
.
xuất ra một số nguyên. Nhưng ngoài ra, khi không có đủ tham số trên ngăn xếp, befunge giả vờ có đủ số lượng 0 ở đó. Vì vậy, ví dụ thứ hai sẽ xuất ra 000
.
g
và p
không được phép (xin lỗi, quên những thứ đó; đã chỉnh sửa).