Trong Befunge-93, thường có thể thuận lợi khi làm phẳng một vòng lặp thành một dòng duy nhất, với phần vòng lặp của mã được thực thi theo cả hai hướng.
Ví dụ, hãy xem xét mã dưới đây, xuất ra chữ cái a
tám lần:
"a"9>1-:#v_@
^\,:\<
Điều này có thể làm phẳng được làm phẳng thành một dòng bằng cách xen kẽ chuỗi vòng lặp với hướng dẫn cầu ( #
):
"a"9>1#\-#,:#:>#\_@
Hãy thử trực tuyến!
Nếu bạn chỉ nhìn vào các ký tự không phải khoảng trắng, bạn có thể có ấn tượng rằng nó dài hơn bản gốc. Nhưng một khi bạn tính đến nguồn cấp dữ liệu và phần đệm bổ sung cần thiết trong phiên bản hai dòng, bạn thực sự sẽ tiết kiệm được bốn byte.
Trong trường hợp cụ thể này, mã được nén hơn nữa bằng cách lưu ý rằng chuỗi đó :#:
có thể được thay thế đơn giản bằng :
.
"a"9>1#\-#,:>#\_@
Hãy thử trực tuyến!
Trong thực tế, bất cứ khi nào bạn có cùng một lệnh được lặp lại ở hai bên của một #
lệnh, bạn có thể đơn giản hóa nó thành chỉ một lệnh, vì vậy đây là điều bạn nên luôn luôn chú ý khi làm phẳng một vòng lặp.
Để hiểu cách thức hoạt động của nó, nó có thể giúp viết ra chuỗi vòng lặp hai lần, một lần với tất cả các ký tự theo sau #
bị loại bỏ (nghĩa là những gì xảy ra khi thực hiện từ trái sang phải) và một lần với các ký tự trước khi #
xóa (nghĩa là thực hiện từ phải sang trái ).
"a"9>1#\-#,:>#\_@
>1 - :> _ ; executing left to right
> \ ,: \_ ; executing right to left
Bây giờ bạn có thể thấy rõ làm thế nào điều này khớp với phiên bản hai dòng gốc của mã.