Befunge - 37 х 5 = 185 38 х 3 = 114 символов
Это ограничено целыми числами, поскольку у Befunge нет поддержки с плавающей запятой.
&v /& _ #`&# "-"$# -#< v
>~:0`!#v_:" "`! #v_:","`#^_"*"`#v_&*>
^ ># $ .# @#< >&+
объяснение
Самая большая отличительная черта Befunge состоит в том, что вместо линейного набора инструкций, как большинство языков; это двумерная сетка односимвольных инструкций, где управление может проходить в любом направлении.
Первый &просто вводит первый номер. Затем vи >перенаправить элемент управления на основной путь во второй строке.
~:0`!#v_
Он вводит символ ( ~), дублирует его ( :), помещает ноль в стек ( 0), выводит два верхних элемента и определяет, больше ли второй, чем первый ( ` я удивлен, что вы не можете использовать `` `, чтобы получить backticks кода. ), инвертирует истинность верхнего элемента ( !), затем идет вправо, если он равен нулю, в противном случае - вниз ( #v_).
По сути, он проверяет, не -1представляет ли вход больше ввода.
># $ .# @
Если вход был -1тогда, дублированное входное значение отбрасывается ( $), вершина стека выводится как целое число ( .), и программа останавливается ( @).
:" "`! #v_
В противном случае аналогичный процесс повторяется, чтобы определить, является ли ввод меньше или равен пробелу. Если это пробел, управление падает, иначе управление движется вправо.
^ ># $ .# @#<
Если это пробел, то он перенаправляется влево ( <); программа halt ( @), output ( .) и перенаправление справа ( >) пропускаются с помощью #; но сброс выполняется, чтобы удалить пространство из стека. Наконец, он перенаправляется вверх, чтобы начать следующее выполнение ( ^).
:","`#^_
Если это был не пробел, то для разделения используется тот же процесс, если он идет [+, *]или [-, \]идет вправо и вверх соответственно.
>~ "*"`#v_&*>
^ >&+
Поскольку [+, *]это снова разделено, чтобы определить, является ли это +или *. Если +он направлен вниз, то следующим числом является input ( &), и они добавляются ( +), затем элемент управления оборачивается и перенаправляется на основной путь для следующего символа. Если *тогда он вводит ( &) и умножает ( *), то непосредственно оборачивается.
/& _ #`&# "-"$# -#<
Ибо [-, \]он начинается с правой стороны влево. Символ #пропускает после них символ, поэтому начальный путь "-"`_просто определяет, является ли он -или /. Если это так, /то он продолжается влево до input ( &) и split ( /). Если это так, -то он направляется вправо, снова пропуская символы, чтобы он выполнялся, в &"-"$-результате чего число вводится ( &), -символ помещается в стек, затем отбрасывается ( "-"$), а затем вычисляется вычитание ( -). Затем элемент управления перенаправляется обратно на основной путь.