Befunge - 37 x 5 = 185 38 x 3 = 114 ký tự
Điều này được giới hạn ở số nguyên vì Befunge không hỗ trợ dấu phẩy động.
&v /& _ #`&# "-"$# -#< v
>~:0`!#v_:" "`! #v_:","`#^_"*"`#v_&*>
^ ># $ .# @#< >&+
Giải trình
Tính năng phân biệt lớn nhất của Befunge là thay vì là một bộ hướng dẫn tuyến tính như hầu hết các ngôn ngữ; nó là một lưới 2d của các lệnh ký tự đơn, trong đó điều khiển có thể chảy theo bất kỳ hướng nào.
Đầu tiên &
chỉ cần nhập số đầu tiên. Các v
và >
sau đó kiểm soát chuyển hướng đến con đường chính vào hàng thứ hai.
~:0`!#v_
Điều này nhập một ký tự ( ~
), sao chép nó ( :
), đẩy số 0 lên ngăn xếp ( 0
), bật hai phần tử trên cùng và xác định xem phần tử thứ hai có lớn hơn phần tử thứ nhất không ( `
tôi ngạc nhiên bạn không thể sử dụng `` `để có được mã backticks. ), đảo ngược tính trung thực của phần tử trên cùng ( !
), sau đó đi đúng nếu nó bằng 0, ngược lại ( #v_
).
Về cơ bản, nó kiểm tra xem đầu vào có -1
đại diện cho đầu vào không nữa.
># $ .# @
Nếu đầu vào là -1
giá trị đầu vào trùng lặp bị loại bỏ ( $
), đỉnh của ngăn xếp là đầu ra dưới dạng một số nguyên ( .
) và chương trình được tạm dừng ( @
).
:" "`! #v_
Mặt khác, một quá trình tương tự được lặp lại để xác định xem đầu vào nhỏ hơn hoặc bằng một khoảng trắng. Nếu đó là một khoảng trắng thì điều khiển đi xuống, nếu không thì điều khiển đầu phải.
^ ># $ .# @#<
Nếu đó là một khoảng trắng thì nó được chuyển hướng trái ( <
); chương trình tạm dừng ( @
), đầu ra ( .
) và chuyển hướng phải ( >
) đều được bỏ qua bằng cách sử dụng #
; nhưng loại bỏ được thực hiện để loại bỏ không gian từ ngăn xếp. Cuối cùng, nó được chuyển hướng lên để bắt đầu thực hiện tiếp theo ( ^
).
:","`#^_
Nếu đó không phải là một không gian, quá trình tương tự được sử dụng để phân chia nếu nó ở trong [+, *]
hoặc [-, \]
đi đúng và lên tương ứng.
>~ "*"`#v_&*>
^ >&+
Đối với [+, *]
nó một lần nữa được phân chia để xác định xem nó là a +
hay a *
. Nếu +
nó được hướng xuống thì số tiếp theo là input ( &
) và chúng được thêm vào ( +
), điều khiển sau đó bao bọc xung quanh và được chuyển hướng đến đường dẫn chính cho ký tự tiếp theo. Nếu *
sau đó, nó nhập ( &
) và nhân ( *
) thì trực tiếp kết thúc.
/& _ #`&# "-"$# -#<
Đối với [-, \]
nó bắt đầu trên tiêu đề bên trái. Các #
's bỏ qua nhân vật sau khi họ để con đường ban đầu là "-"`_
mà chỉ đơn giản xác định nếu nó là -
hay /
. Nếu có /
thì nó tiếp tục sang trái để nhập ( &
) và chia ( /
). Nếu -
đúng, nó sẽ đi đúng, một lần nữa bỏ qua các ký tự để nó thực thi &"-"$-
dẫn đến số được nhập ( &
) -
ký tự được đẩy lên ngăn xếp sau đó loại bỏ ( "-"$
) và sau đó phép trừ được tính ( -
). Kiểm soát sau đó được chuyển hướng trở lại đường dẫn chính.