Befunge - 37 x 5 = 185 38 x 3 = 114 символів
Це обмежено цілими числами, оскільки Befunge не підтримує плаваючу крапку.
&v /& _ #`&# "-"$# -#< v
>~:0`!#v_:" "`! #v_:","`#^_"*"`#v_&*>
^ ># $ .# @#< >&+
Пояснення
Найбільша відмітна риса Росії Befunge є те, що замість того, щоб бути лінійним набором інструкцій, як більшість мов; це 2d сітка інструкцій з одним символом, де управління може протікати в будь-якому напрямку.
Перший &
просто вводить перше число. Елемент управління, v
а >
потім переспрямування на основний шлях у другому ряду.
~:0`!#v_
Це вводить символ ( ~
), дублює його ( :
), натискає нуль на стек ( 0
), вискакує перші два елементи і визначає, чи є другий більший за перший ( `
я здивований, що ви не можете використовувати `` `для отримання задні коди. зворотного списку ), інвертує правдивість верхнього елемента ( !
), а потім виходить правильно, якщо він дорівнює нулю, вниз інакше ( #v_
).
В основному це перевірка, чи є вхід -1
представляє більше вводу.
># $ .# @
Якщо вхід був, -1
тоді дублюється вхідне значення відкидається ( $
), верхня частина стека виводиться у вигляді цілого числа ( .
), а програма зупиняється ( @
).
:" "`! #v_
В іншому випадку подібний процес повторюється, щоб визначити, чи вхід менший або рівний пробілу. Якщо це пробіл, то управління опускається вниз, інакше голови керують правою.
^ ># $ .# @#<
Якщо це пробіл, то він переспрямований вліво ( <
); програмні зупинки ( @
), виводу ( .
) та правильного перенаправлення ( >
) пропускаються за допомогою #
; але відкидання виконується, щоб видалити простір зі стека. Нарешті його переспрямовано до початку наступного виконання ( ^
).
:","`#^_
Якщо це не був пробіл, той самий процес використовується для поділу, якщо він знаходиться [+, *]
в[-, \]
йти вправо і вгору відповідно.
>~ "*"`#v_&*>
^ >&+
Бо [+, *]
він знову розщеплений, щоб визначити, це він +
чи а *
. Якщо +
він спрямований вниз, наступне число вводиться ( &
), і вони додаються ( +
), потім елемент керування обертається навколо і перенаправляється до основного шляху для наступного символу. Якщо *
тоді він вводить ( &
) і множиться ( *
), то безпосередньо завертається.
/& _ #`&# "-"$# -#<
Бо [-, \]
він починається з правого заголовка ліворуч. #
«S пропустити символ після них , так що початковий шлях , "-"`_
який просто визначає , буде це -
чи /
. Якщо це так, /
воно продовжується ліворуч на введення ( &
) та розділення ( /
). Якщо це -
тоді, він рухається праворуч, знову пропускаючи символи, щоб він виконував, в &"-"$-
результаті чого число вводиться ( &
), що -
символ висувається на стек, потім відкидається ( "-"$
), а потім вираховується віднімання ( -
). Потім елемент управління перенаправляється назад до основного шляху.