ised: 72 46文字
これはほぼ完璧にフィットします...数学のゴルフのために正確に意図されているように見える「言語」があります:ised。その難読化された構文により、非常に短いコードが作成されます(名前付き変数はなく、整数のメモリスロットと、多用途の単一文字演算子が多数あります)。積分を使用してガンマ関数を定義すると、80のランダムな文字になりました
@4{:.1*@+{@3[.,.1,99]^x:*exp-$3}:}@6{:@{$4::@5avg${0,1}>$2}$5:}@0,0@1,99;$6:::.
ここで、メモリスロット$ 4は階乗関数であり、メモリスロット$ 6は二分関数であり、メモリスロット$ 2は入力に設定されると予想されます(このコードをソースする前に与えられます)。スロット$ 0および$ 1は、二分境界です。呼び出し例(上記のコードがfileにあると仮定inversefactorial.ised
)
bash> ised '@2{556}' --f inversefactorial.ised
556
5.86118
もちろん、ビルトインを使用することもできます!演算子。この場合、45文字まで取得できます。
@6{:@{{@5avg${0,1}}!>$2}$5:}@0,0@1,99;$6:::.
慎重に、オペレーターの優越性は時々奇妙です。
編集:関数を保存する代わりにインライン化することを忘れないでください。72文字でMathematicaを打ち負かす!
@0,0@1,99;{:@{{:.1*@+{@3[.,.1,99]^x:*exp-$3}:}::@5avg${0,1}>$2}$5:}:::.
そして!組み込みで41が得られます。
1年延滞の更新:
これは非常に非効率的であることに気づきました。60文字までゴルフダウン:
@0#@1,99;{:@{.1*@3[.,.1,99]^@5avg${0,1}@:exp-$3>$2}$5:}:::.
utf-8が使用されている場合(Mathematicaも同様)、57に到達します。
@0#@1,99;{:@{.1*@3[.,.1,99]^@5avg${0,1}·exp-$3>$2}$5:}∙.
少し異なる書き換えにより、46(または組み込み!を使用している場合は27)に削減できます。
{:x_S{.5@3[.,.1,99]^avgx·exp-$3*.1<$2}:}∙∓99_0
答えを2回印刷しても問題ない場合は、最後の2文字を削除できます。