Befunge - 37 x 5 = 185 38 x 3 = 114 karakter
Ini terbatas pada angka integer karena Befunge tidak memiliki dukungan floating point.
&v /& _ #`&# "-"$# -#< v
>~:0`!#v_:" "`! #v_:","`#^_"*"`#v_&*>
^ ># $ .# @#< >&+
Penjelasan
Fitur pembeda terbesar dari Befunge adalah bahwa alih-alih menjadi seperangkat instruksi linier seperti kebanyakan bahasa; itu adalah kotak 2d instruksi karakter tunggal, di mana kontrol dapat mengalir ke segala arah.
Yang pertama &
hanya memasukkan angka pertama. The v
dan >
kemudian kontrol redirect ke jalan utama di baris kedua.
~:0`!#v_
Ini menginput karakter ( ~
), menduplikatnya ( :
), mendorong nol ke tumpukan ( 0
), muncul dua elemen teratas dan menentukan apakah yang kedua lebih besar dari yang pertama ( `
saya terkejut Anda tidak dapat menggunakan `` `untuk mendapatkan kode backticks. ), membalikkan kebenaran dari elemen atas ( !
), lalu berbelok ke kanan jika nol, turun sebaliknya ( #v_
).
Pada dasarnya memeriksa apakah input -1
mewakili tidak ada input lagi.
># $ .# @
Jika input -1
kemudian nilai input duplikat dibuang ( $
), bagian atas tumpukan adalah output sebagai integer ( .
) dan program dihentikan ( @
).
:" "`! #v_
Kalau tidak, proses serupa diulang untuk menentukan apakah input kurang dari atau sama dengan spasi. Jika itu adalah ruang maka kontrol turun, jika tidak kontrol kepala kanan.
^ ># $ .# @#<
Jika ini adalah spasi maka dialihkan ke kiri ( <
); program halt ( @
), output ( .
) dan redirection kanan ( >
) semuanya dilewati menggunakan #
; tetapi buangan dijalankan untuk menghilangkan ruang dari tumpukan. Akhirnya diarahkan untuk memulai eksekusi berikutnya ( ^
).
:","`#^_
Jika itu bukan ruang, proses yang sama digunakan untuk membagi jika itu dalam [+, *]
atau di [-, \]
masing-masing naik dan naik.
>~ "*"`#v_&*>
^ >&+
Untuk [+, *]
itu lagi dibagi untuk menentukan apakah itu a +
atau a *
. Jika +
diarahkan ke bawah maka angka berikutnya adalah input ( &
) dan mereka ditambahkan ( +
), kontrol kemudian membungkus dan diarahkan ke jalur utama untuk karakter berikutnya. Jika *
kemudian input ( &
) dan dikalikan ( *
) maka langsung membungkus.
/& _ #`&# "-"$# -#<
Untuk [-, \]
itu dimulai di sebelah kanan menuju kiri. Itu #
melewatkan karakter setelah mereka sehingga jalur awal adalah "-"`_
yang hanya menentukan apakah itu -
atau /
. Jika ya /
maka terus ke input ( &
) dan bagi ( /
). Jika itu -
kemudian mengarah ke kanan, sekali lagi melewatkan karakter sehingga dieksekusi &"-"$-
menghasilkan angka yang menjadi input ( &
) -
karakter didorong ke tumpukan kemudian dibuang ( "-"$
) dan kemudian pengurangan dihitung ( -
). Kontrol kemudian diarahkan kembali ke jalur utama.