Befunge - 37 x 5 = 185, 38 x 3 = 114 Zeichen
Dies ist auf Ganzzahlen beschränkt, da Befunge keine Gleitkomma-Unterstützung bietet.
&v /& _ #`&# "-"$# -#< v
>~:0`!#v_:" "`! #v_:","`#^_"*"`#v_&*>
^ ># $ .# @#< >&+
Erläuterung
Das größte Unterscheidungsmerkmal von Befunge ist, dass es sich nicht wie bei den meisten Sprachen um einen linearen Befehlssatz handelt. Es ist ein 2D-Raster mit Einzelzeichenanweisungen, bei denen die Steuerung in jede Richtung fließen kann.
Der erste gibt &
einfach die erste Zahl ein. Das Steuerelement v
und >
leiten dann auf den Hauptpfad in der zweiten Zeile um.
~:0`!#v_
Dies gibt ein Zeichen ein ( ~
), dupliziert es ( :
), legt eine Null auf den Stapel ( 0
), fügt die beiden obersten Elemente ein und bestimmt, ob die zweite größer ist als die erste ( `
ich bin überrascht, dass Sie nicht `` `verwenden können, um zu erhalten Code Backticks. ), invertiert die Wahrheit des obersten Elements ( !
), geht dann nach rechts, wenn es Null ist, andernfalls nach unten ( #v_
).
Grundsätzlich wird geprüft, ob der Eingang -1
keinen Eingang mehr darstellt.
># $ .# @
Wenn die Eingabe -1
dann war, wird der duplizierte Eingabewert verworfen ( $
), die Oberseite des Stapels wird als Ganzzahl ausgegeben ( .
) und das Programm wird angehalten ( @
).
:" "`! #v_
Andernfalls wird ein ähnlicher Vorgang wiederholt, um festzustellen, ob die Eingabe kleiner oder gleich einem Leerzeichen ist. Wenn es sich um ein Leerzeichen handelt, geht die Kontrolle zurück, ansonsten geht die Kontrolle nach rechts.
^ ># $ .# @#<
Wenn es sich um ein Leerzeichen handelt, wird es umgeleitet left ( <
); Das Programm stop ( @
), output ( .
) und right redirection ( >
) werden mit übersprungen #
. Das Verwerfen wird jedoch ausgeführt, um den Speicherplatz vom Stapel zu entfernen. Schließlich wird es weitergeleitet, um mit der nächsten Ausführung zu beginnen ( ^
).
:","`#^_
Wenn es sich nicht um ein Leerzeichen handelt, wird derselbe Prozess verwendet, um es zu teilen, wenn es richtig ist [+, *]
oder wenn es [-, \]
richtig ist und aufwärts geht.
>~ "*"`#v_&*>
^ >&+
Denn [+, *]
es wird erneut aufgeteilt, um festzustellen, ob es sich um eine +
oder eine handelt *
. Wenn +
es nach unten gerichtet ist, wird die nächste Zahl eingegeben ( &
) und sie werden hinzugefügt ( +
), das Steuerelement wird dann umgebrochen und zum Hauptpfad für das nächste Zeichen weitergeleitet. Wenn es *
dann eingibt ( &
) und multipliziert ( *
), wird es direkt umbrochen.
/& _ #`&# "-"$# -#<
Denn [-, \]
es beginnt auf der rechten Seite links. Die #
's überspringen das Zeichen nach ihnen, so dass der Anfangspfad "-"`_
einfach festlegt, ob es -
oder ist /
. Wenn dies der Fall ist /
, wird die Eingabe ( &
) und Division ( /
) fortgesetzt . Wenn dies der Fall ist -
, werden die Zeichen erneut übersprungen und ausgeführt, &"-"$-
was zur Eingabe der Zahl führt ( &
). Das -
auf den Stapel geschobene Zeichen wird verworfen ( "-"$
) und anschließend die Subtraktion berechnet ( -
). Das Steuerelement wird dann zurück zum Hauptpfad umgeleitet.