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 vdan >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 -1mewakili tidak ada input lagi.
># $ .# @
Jika input -1kemudian 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.