多項式->積分


11

有理係数を持つ1つの変数の多項式が与えられた場合1、変数、定積分のみを含む同等の式を出力します。例えば、 - X 2 ∫のように表すことができるX1 1 1D T X D U

E := 1 | var | ∫EEEdvar

合理的な入力/出力方法が許可されます。

例:

\ Large 1 = 1 \ \ Large x = x \ \ Large 0 = \ int_1 ^ 1 1 \ text dt \ \ Large 2 = \ int _ {\ int_1 ^ {\ int_1 ^ 1 1 \ text dv} 1 \ text du} ^ 1 1 \ text dt \ \ Large x ^ 2 = \ int _ {\ int_1 ^ 1 1 \ text dt} ^ xx \ text dv \ \ Large \ frac 12 = \ int _ {\ int_1 ^ 1 1 \ text dt} ^ 1 v \ text dv

スコアは、コード長にテストケースで使用されるシンボルの数を掛けたものになります。プログラムを採点できるはずです。最低スコアが勝ちます。

テストケース:

4/381*x^2+49/8*x^3-17/6
311/59*x^2-92/9*x^3-7/15*x
333/29*x^3+475/96*x^8

ゴルフだけはコードやアウトプットだけでゴルフをすることはできませんので、ゴルフは難しくなります。したがって、試してみるまで変化が私のスコアを助けるか傷つけるかはわかりません。

スコアが作成を制限しないようにしてください。他の部分がひどく残ったとしても、スコアの主に適切に最適化された部分で答えることを歓迎します。


関連する。重複しますか?
オリビエグレゴワール

@OlivierGrégoireインバースワーク
l4m2

これは興味深い課題であり、スコアリングシステムによってさらに悪化します。コードの長さに関係なく、変数に代入(または同等)し、それを記号として使用して、シンボルのゼロオカレンスを発生させるだけで、即座にスコア0を要求できchr(8747)ます。私は思い強く、このバニラコードゴルフに挑戦することをお勧めします。
コイナーリンガーアーイング

3
@cairdcoinheringaahing出力形式を使用しても、たとえば0=[1,1,1]「1 」としてカウントされます。したがって、あなただけのテストケースに0のスコアを取得することができます1し、x
l4m2

1
個人的には、これはコードゴルフの質問としては良いと思います。どのソリューションも印象的なものになるので、できるだけ少ない統合を必要とする必要はないと思います。
mbomb007

回答:


5

Python 2、315バイト* 5113 = 1610595スコア

私はまだスコアのゴルフに取り組んでいます。ゴルフだけはコードやアウトプットだけでゴルフをすることはできませんので、ゴルフは難しくなります。したがって、試してみるまで変化が私のスコアを助けるか傷つけるかはわかりません。

これをゴルフするのは面倒ですが、私は微積分を楽しみました。

t='t'
Z=lambda n:N(Z(-n))if n<0else[1,t,N(1),Z(n-1)]if n>1else[[1,t,1,1],1][n]
N=lambda a:[1,t,a,Z(0)]
x=lambda n:n>1and[x(n-1),t,Z(0),'x']or'x'
M=lambda a,b:[b,t,Z(0),a]
print reduce(lambda a,b:[1,t,N(a),b],[M((lambda a,b:M(Z(a),[x(b-1)if b>1else 1,'x',Z(0),1]))(*c),x(i)if i else 1)for i,c in enumerate(input())])

オンラインでお試しください!

すべてのテストケースを実行します -スコアリングするに[は、出力ですべてをカウントします。

入力多項式は、(分子、分母)係数のペアのリストとして取得されxます。(0, 1)(ゼロ)は、欠損電力に使用されます。

出力は、リストによって表される各積分で与えられる[f,t,a,b]∫表すためにB 、F、D 、Tを

検証

以下は、統合用の有効なMathematica構文を出力する、やや控えめなバージョンで、オンラインノートブックでテストできます。残念ながら、適切なサイズのプログラムは無料のノートブックでは完了しません。

ここに移動、一番下までスクロールして「新規ノートブックを作成」、貼り付け(Wolfram言語入力)、評価(Shift + Enter)(num-pad Enterを使用しても機能しないことに注意してください)

説明

次の方程式を使用します。

-a = \ int_a ^ {0} 1〜dt

n = \ int _ {-1} ^ {n-1} 1〜dt、n> 1

x ^ n = \ int_0 ^ {x} x ^ {n-1}〜dt

a + b = \ int _ {-a} ^ b 1〜dt

ab = \ int_0 ^ ab〜dt

\ frac {1} {n} = \ int_0 ^ {1} x ^ {n-1}〜dx

リンク集


@ l4m2これらのコメントを削除できるように、質問へのリンクを追加しました。ありがとう。
mbomb007

Z(n)として定義def Z(n):return N(Z(-n)) if n<0 else[1,t,1,1] if n<1 else 1 if n<2 else[1,t,N(1),Z(n-1)]
l4m2

またはZ=lambda n:N(Z(-n))if n<0else[1,t,N(1),Z(n-1)]if n>1else[[1,t,1,1],1][n]
18


0

JavaScript(Node.js)、220バイト* 616積分= 135520スコア

O=[1,T='t',1,1]
D=(q,t)=>[t,'c',[q,T,1,O],q]
N=n=>n>0?[N(-n),T,1,O]:n?[D(1,1),'c',n&1?[T,T,O,1]:O,N(n/2|0)]:O
P=n=>n?[D(n%2?'x':1,T),T,O,P(n>>1)]:1
F=([e,...s])=>e?[1,T,[F(s),T,'x',O],[N(e[0]),T,O,[P(e[1]-1),'x',O,1]]]:O

オンラインでお試しください!

ここに画像の説明を入力してください ここに画像の説明を入力してください ここに画像の説明を入力してください


方程式function unpack(x) { return x instanceof Array ? `\\int_{${unpack(x[2])}}^{${unpack(x[3])}}${unpack(x[0])}\\text d${unpack(x[1])}` : x }; console.log (unpack(F([[0, 1], [-7, 15], [311, 59], [-92, 9]])).replace(/\{(.)\}/g,'$1'));
l4m2

既存の回答を編集するだけです。異なるスコアの試行ごとに個別の回答は必要ありません。また、含めた方程式の画像は読みにくいため、含める価値さえありません。
mbomb007

1
@ mbomb007通常、私は同じようなソリューションを一緒に配置し、まったく異なるソリューションを分離します。前の数回は、画像を取得するときに許可されていない記号が使用されていたので、ここに
置いて
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.