CJam(59バイト)
{[WZ~C24X8TT]f*[4XGYC6 4Y].+_0=!>2%Z65135Zb+:(3/.f#:.*)W*+}
これは、スタックで整数または倍精度浮動小数点数型を取り、3つの倍精度浮動小数点数型を持つ配列を生成する匿名ブロック(関数)です。1つのケースでのみ0.25
またはで中断するため、すべての非負入力を処理するために内部的に2つのケースがあります4
。入力に対してはまだ壊れています-12
と-1.3333333333333333
でますが、仕様ではそれが可能です...
オンラインデモそれを実行して、値を加算し、4つのすべてを印刷し、乗算彼らはそれが元の値(モジュロ丸め誤差)を取得していることを示すために。
数学的背景
w=−x−y−zx+y+z+w=0−xyzw=axyzw+a=0。これには多くの対称性があります。どのソリューションにも4つのフォーミュラがあり、3つの最もゴルフらしいフォーミュラを選択できます。
Elkiesは、ソリューションの4つのファミリーを提供します。オイラー:
xyzw====6ast3(at4−2s4)2(4at4+s4)(2a2t8+10as4t4−s8)3s5(4at4+s4)22t(at4−2s4)(2a2t8+10as4t4−s8)2(2a2t8+10as4t4−s8)3s3t(4at4+s4)−(2a2t8+10as4t4−s8)6s3t(at4−2s4)
オイラーに関連するもの:
xyzw====(8s8+a2)(8s8−88as4−a2)12s3(s4−a)(8s8+20as4−a2)(8s8+a2)(8s8−88as4−a2)12s3(8s4+a)(8s8+20as4−a2)192as5(s4−a)2(8s4+a)2(8s8+a2)(8s8−88as4−a2)(8s8+20as4−a2)−3s(8s8+20as4−a2)34(s4−a)(8s4+a)(8s8+a2)(8s8−88as4−a2)
より簡単なもの:
バツyzw====(s4− 4 a )22 秒3(s4+ 12 a )2 a (3 s4+ 4 a )2s3(s4− 4 a )(s4+ 12 a )s5+ 12 秒2(3s4+4a)−2s5(s4+12a)(s4−4a)(3s4+4a)
And one related to that one:
xyzw====s5(s4−3a)32(s4+a)(s12+12as8−3a2s4+2a3)s12+12as8−3a2s4+2a32s3(s4−3a)(3s4−a)2a(s4+a)2(3s4−a)2s3(s4−3a)(s12+12as8−3a2s4+2a3)−2s(s12+12as8−3a2s4+2a3)(s4−3a)(s4+a)(3s4−a)
Observe that every family has at least two denominators of the form ps4−qa for positive p and q: since all the terms involved are rational, that means that there's some positive a for which we get division by zero. Therefore we must use at least two sets of solutions which have their singularities at different values of a. Intuitively it's going to be golfiest to choose two sets from the same family. I've chosen the simplest family (the third one) with parameters s=1 and s=2.