Befunge- 37 x 5 = 185 38 x 3 = 114文字
Befungeは浮動小数点をサポートしていないため、これは整数に制限されます。
&v /& _ #`&# "-"$# -#< v
>~:0`!#v_:" "`! #v_:","`#^_"*"`#v_&*>
^ ># $ .# @#< >&+
説明
Befungeの最大の特徴は、ほとんどの言語のような線形の命令セットではなく、それは、制御が任意の方向に流れることができる単一文字命令の2Dグリッドです。
最初は&単純に最初の数字を入力します。vそして>、次に2行目のメインパスに制御をリダイレクトします。
~:0`!#v_
これは文字を入力し(~)、それを複製し(:)、ゼロをスタックにプッシュし(0)、上の2つの要素をポップし、2番目の要素が最初の要素より大きいかどうかを判断し` ます(取得するために `` `を使用できないことに驚いていますコードバックティック))、最上位要素の真実性を反転し(!)、ゼロの場合は右に、そうでない場合は下に(#v_)。
基本的には、入力が-1これ以上入力を表していないかどうかをチェックしています。
># $ .# @
入力が-1複製された入力値であった場合は破棄され($)、スタックの最上部は整数として出力され(.)、プログラムは停止します(@)。
:" "`! #v_
そうでない場合、入力がスペース以下かどうかを判別するために、同様のプロセスが繰り返されます。スペースである場合、コントロールはダウンします。
^ ># $ .# @#<
スペースの場合、左にリダイレクトされ<ます()。プログラムの停止(@)、出力(.)、および右リダイレクト(>)はすべて#; を使用してスキップされます。ただし、スタックからスペースを削除するために破棄が実行されます。最後に、次の実行を開始するためにリダイレクトされます(^)。
:","`#^_
それがスペースではなかった場合、同じプロセスが使用されて、それぞれ上[+, *]または[-, \]右にある場合と上にある場合に分割されます。
>~ "*"`#v_&*>
^ >&+
というのも[+, *]、それはa +かa かを決定するために再び分割されるからです*。場合+、それがダウン向けられ、その後、次の数(入力され&()およびそれらが追加される+)、その後、制御はラップアラウンドし、次の文字のメインパスまでリダイレクトされます。場合*、それは(入力&)と乗算(*)、直接ラップアラウンドします。
/& _ #`&# "-"$# -#<
なぜなら、[-, \]それは右から左に向かって始まるからです。#最初のパスがあるので、のは、それらの後の文字をスキップする"-"`_ことがある場合は、単純に決定します-か/。そうである場合は/、入力(&)および除算(/)に進みます。そうである場合-、それは右ヘッド、再びそれが実行されるように文字をスキップ&"-"$-入力(ある数をもたらす&)-文字捨て、スタックにプッシュされる("-"$)、次いで減算が計算されます(-)。その後、コントロールはメインパスにリダイレクトされます。