Befunge - 37 x 5 = 185 38 x 3 = 114 znaków
Jest to ograniczone do liczb całkowitych, ponieważ Befunge nie obsługuje zmiennoprzecinkowych.
&v /& _ #`&# "-"$# -#< v
>~:0`!#v_:" "`! #v_:","`#^_"*"`#v_&*>
^ ># $ .# @#< >&+
Wyjaśnienie
Największą cechą wyróżniającą Befunge jest to, że zamiast być liniowym zestawem instrukcji, jak większość języków; jest siatką 2d instrukcji jednoznakowych, w których kontrola może płynąć w dowolnym kierunku.
Pierwsza &po prostu wprowadza pierwszą liczbę. vA >następnie przekierowanie sterowania do głównej ścieżki w drugim rzędzie.
~:0`!#v_
To wprowadza znak ( ~), powiela go ( :), wypycha zero na stos ( 0), wyskakuje z górnych dwóch elementów i określa, czy drugi jest większy od pierwszego ( ` jestem zaskoczony, że nie można użyć `` '', aby uzyskać kod backticks. ), odwraca prawdziwość górnego elementu ( !), a następnie idzie w prawo, jeśli wynosi zero, w przeciwnym razie ( #v_).
Zasadniczo sprawdza, czy dane wejściowe -1nie reprezentują już danych wejściowych.
># $ .# @
Jeśli dane wejściowe były -1następnie zduplikowane wartości wejściowe są odrzucane ( $), górna część stosu jest wyprowadzana jako liczba całkowita ( .), a program jest zatrzymywany ( @).
:" "`! #v_
W przeciwnym razie podobny proces powtarza się w celu ustalenia, czy dane wejściowe są mniejsze lub równe spacji. Jeśli jest to spacja, kontrola spada, w przeciwnym razie kieruj w prawo.
^ ># $ .# @#<
Jeśli jest to spacja, to przekierowuje left ( <); program halt ( @), output ( .) i prawe przekierowanie ( >) są pomijane za pomocą #; ale odrzucenie jest wykonywane w celu usunięcia przestrzeni ze stosu. Wreszcie jest przekierowywany w celu rozpoczęcia następnego wykonania ( ^).
:","`#^_
Jeśli nie była to spacja, ten sam proces jest używany do podziału, jeśli jest odpowiednio w [+, *]lub w [-, \]prawo i w górę.
>~ "*"`#v_&*>
^ >&+
Na [+, *]to jest podzielona w celu określenia, czy jest to +albo *. Jeśli +jest skierowany w dół, to wprowadzana jest następna liczba ( &) i są one dodawane ( +), a następnie formant zawija się i zostaje przekierowany do głównej ścieżki dla następnego znaku. Jeśli *następnie wpisze ( &) i mnoży ( *), wówczas bezpośrednio się zawija.
/& _ #`&# "-"$# -#<
Ponieważ [-, \]zaczyna się po prawej stronie po lewej stronie. #„S pominąć znak po nich tak początkowa jest ścieżka "-"`_, która określa, czy po prostu jest -albo /. Jeśli tak, /to kontynuuje wprowadzanie ( &) i dzielenie ( /). Jeśli tak, -to kieruje się w prawo, ponownie pomijając znaki, aby wykonać, &"-"$-powodując wprowadzenie liczby ( &), -znak jest wypychany na stos, a następnie odrzucany ( "-"$), a następnie obliczane jest odejmowanie ( -). Sterowanie jest następnie przekierowywane z powrotem do głównej ścieżki.