Befunge - 37 x 5 = 185 38 x 3 = 114 caracteres
Esto está limitado a números enteros ya que Befunge no tiene soporte de coma flotante.
&v /& _ #`&# "-"$# -#< v
>~:0`!#v_:" "`! #v_:","`#^_"*"`#v_&*>
^ ># $ .# @#< >&+
Explicación
La mayor característica distintiva de Befunge es que, en lugar de ser un conjunto lineal de instrucciones como la mayoría de los idiomas; Es una cuadrícula 2D de instrucciones de un solo carácter, donde el control puede fluir en cualquier dirección.
El primero &simplemente ingresa el primer número. El vy >luego redirige el control a la ruta principal en la segunda fila.
~:0`!#v_
Esto ingresa un carácter ( ~), lo duplica ( :), empuja cero a la pila ( 0), muestra los dos elementos superiores y determina si el segundo es mayor que el primero ( ` me sorprende que no pueda usar `` para obtener código backticks. ), invierte la veracidad del elemento superior ( !), luego va a la derecha si es cero, de lo contrario hacia abajo ( #v_).
Básicamente es verificar si la entrada -1no representa más entradas.
># $ .# @
Si la entrada fue -1entonces, el valor de entrada duplicado se descarta ( $), la parte superior de la pila se emite como un entero ( .) y el programa se detiene ( @).
:" "`! #v_
De lo contrario, se repite un proceso similar para determinar si la entrada es menor o igual que un espacio. Si es un espacio, entonces el control se cae, de lo contrario, los cabezales de control están a la derecha.
^ ># $ .# @#<
Si es un espacio, se redirige a la izquierda ( <); el programa halt ( @), output ( .) y right redirection ( >) se omiten usando #; pero el descarte se ejecuta para eliminar el espacio de la pila. Finalmente se redirige para comenzar la próxima ejecución ( ^).
:","`#^_
Si no era un espacio, el mismo proceso se usa para dividir si está dentro [+, *]o dentro[-, \] entrando yendo hacia la derecha y hacia arriba respectivamente.
>~ "*"`#v_&*>
^ >&+
Porque [+, *]nuevamente se divide para determinar si es a +o a *. Si +se dirige hacia abajo, el siguiente número es input ( &) y se agregan ( +), el control se envuelve y se redirige a la ruta principal para el siguiente carácter. Si *luego ingresa ( &) y multiplica ( *), entonces se envuelve directamente.
/& _ #`&# "-"$# -#<
Porque [-, \]comienza por la derecha en dirección a la izquierda. Se #omiten los caracteres después de ellos, por lo que la ruta inicial es la "-"`_que simplemente determina si es -o /. Si es /así, continúa a la izquierda para ingresar ( &) y dividir ( /). Si es -así, se dirige hacia la derecha, nuevamente omitiendo caracteres para que se ejecute, lo que da como &"-"$-resultado que se ingrese el número ( &), el -carácter se empuje a la pila y luego se descarte ( "-"$) y luego se calcule la resta ( -). El control se redirige a la ruta principal.