Befunge - 37 x 5 = 185 38 x 3 = 114 caractères
Ceci est limité aux nombres entiers car Befunge n'a pas de support en virgule flottante.
&v /& _ #`&# "-"$# -#< v
>~:0`!#v_:" "`! #v_:","`#^_"*"`#v_&*>
^ ># $ .# @#< >&+
Explication
La plus grande caractéristique distinctive de Befunge est qu'au lieu d'être un ensemble linéaire d'instructions comme la plupart des langues; c'est une grille 2D d'instructions à caractère unique, où le contrôle peut circuler dans n'importe quelle direction.
Le premier &saisit simplement le premier nombre. Le v, >puis rediriger le contrôle vers le chemin principal sur la deuxième ligne.
~:0`!#v_
Cela entre un caractère ( ~), le duplique ( :), pousse zéro sur la pile ( 0), fait apparaître les deux premiers éléments et détermine si le second est supérieur au premier ( ` je suis surpris que vous ne puissiez pas utiliser `` `pour obtenir code backticks. ), inverse la véracité de l'élément supérieur ( !), puis va à droite s'il est nul, vers le bas sinon ( #v_).
Fondamentalement, il vérifie si l'entrée ne -1représente plus d'entrée.
># $ .# @
Si l'entrée était -1alors la valeur d'entrée dupliquée est supprimée ( $), le haut de la pile est sorti sous forme d'entier ( .) et le programme est arrêté ( @).
:" "`! #v_
Sinon, un processus similaire est répété pour déterminer si l'entrée est inférieure ou égale à un espace. S'il s'agit d'un espace, le contrôle descend, sinon le contrôle se dirige vers la droite.
^ ># $ .# @#<
S'il s'agit d'un espace, il est redirigé vers la gauche ( <); le programme halt ( @), output ( .) et redirection droite ( >) sont tous ignorés en utilisant #; mais le rejet est exécuté pour supprimer l'espace de la pile. Enfin, il est redirigé vers le haut pour commencer la prochaine exécution ( ^).
:","`#^_
Si ce n'était pas un espace, le même processus est utilisé pour se diviser s'il est dans [+, *]ou en [-, \]allant à droite et en haut respectivement.
>~ "*"`#v_&*>
^ >&+
Car [+, *]il est de nouveau divisé pour déterminer s'il s'agit d'un +ou d'un *. S'il +est dirigé vers le bas, le nombre suivant est input ( &) et ils sont ajoutés ( +), le contrôle se retourne et est redirigé vers le chemin principal pour le caractère suivant. Si *alors il entre ( &) et multiplie ( *), il s'enroule directement.
/& _ #`&# "-"$# -#<
Car [-, \]cela commence à droite en direction de gauche. Les #sautent le caractère après eux pour que le chemin initial soit "-"`_qui détermine simplement si c'est -ou /. Si c'est le cas, il /continue à gauche pour entrer ( &) et diviser ( /). Si c'est le cas, il se -dirige vers la droite, en ignorant à nouveau les caractères afin qu'il s'exécute, &"-"$-ce qui entraîne l'entrée du nombre ( &), le -caractère étant poussé sur la pile, puis rejeté ( "-"$) et la soustraction calculée ( -). Le contrôle est ensuite redirigé vers le chemin principal.