Polinomial -> Integrasikan

11

Diberikan polinomial dalam satu variabel dengan koefisien rasional, menghasilkan ekspresi setara yang hanya berisi 1, variabel, dan integral tertentu. Misalnya, - x 2 dapat dinyatakan sebagai ∫ x1 1 1d t x d u .

E := 1 | var | ∫EEEdvar

Metode input / output yang masuk akal diizinkan.

Contoh:

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

Skor Anda akan menjadi panjang kode Anda dikalikan dengan jumlah simbol yang digunakan pada kasus uji. Anda harus dapat menilai program Anda. Skor terendah menang.

Kasus uji:

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

Golf akan menjadi sulit, karena saya tidak bisa golf hanya kode atau hanya output, dan karena itu saya tidak tahu apakah perubahan akan membantu atau merusak skor saya sampai saya mencobanya, yang menyebalkan menurut saya.

Jangan biarkan skor membatasi kreasi Anda. Anda dipersilakan untuk menjawab dengan sebagian besar bagian dari skor dioptimalkan dengan baik, bahkan jika yang lainnya tertinggal dengan baik.

l4m2
sumber
terkait . Duplikat?
Olivier Grégoire
@ OlivierGrégoire Pekerjaan terbalik
l4m2
Ini adalah tantangan yang menarik, diperburuk oleh sistem skoringnya. Saya langsung dapat mengklaim skor 0 , terlepas dari panjang kode saya, hanya dengan menugaskan chr(8747)(atau setara) ke suatu variabel, dan menggunakannya sebagai tanda, menimbulkan nol kemunculan simbol. Saya sangat merekomendasikan menjadikan ini tantangan golf kode vanilla.
caird coinheringaahing
3
@cairdcoinheringaahing Tidak peduli Anda menggunakan format output apa pun, misalnya 0=[1,1,1], itu masih dihitung sebagai "1 ". Dengan demikian Anda hanya bisa mendapatkan skor 0 pada test case 1danx
14m2
1
Secara pribadi, saya pikir ini akan lebih baik sebagai pertanyaan kode-golf. Solusi apa pun akan mengesankan, jadi saya rasa tidak perlu membutuhkan sesedikit mungkin integrasi.
mbomb007

Jawaban:

5

Python 2 , 315 byte * 5113 = skor 1610595

Saya masih bekerja pada golf skor. Golf akan menjadi sulit, karena saya tidak bisa golf hanya kode atau hanya output, dan karena itu saya tidak tahu apakah perubahan akan membantu atau merusak skor saya sampai saya mencobanya, yang menyebalkan menurut saya.

Terlepas dari gangguan golf ini, saya menikmati kalkulus.

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())])

Cobalah online!

Jalankan semua test case - untuk mencetak skor, hitung semua [dalam output.

Input polinomial diambil sebagai daftar pasangan koefisien (pembilang, penyebut) dalam urutan dari daya terendah ke tertinggi x. (0, 1)(nol) digunakan untuk daya yang hilang.

Output diberikan dengan masing-masing terpisahkan diwakili oleh daftar [f,t,a,b]untuk mewakili ∫ a b f d t

Verifikasi

Berikut adalah versi yang sedikit kurang golf yang menghasilkan sintaksis Mathematica yang valid untuk integrasi, yang dapat diuji dalam buku catatan online. Sayangnya, program berukuran layak tidak akan lengkap dalam buku catatan gratis.

Buka di sini , gulir ke bawah, "Buat Notebook Baru", rekatkan (Input Bahasa Wolfram), dan evaluasi (Shift + Enter) (Perhatikan bahwa menggunakan num-pad Enter tidak berfungsi) .

Penjelasan

Gunakan persamaan ini:

-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

Tautan

mbomb007
sumber
@ l4m2 Saya menambahkan tautan ke pertanyaan sehingga kami dapat menghapus komentar ini. Terima kasih.
mbomb007
Tentukan Z(n)sebagai 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)]?
14m2
atauZ=lambda n:N(Z(-n))if n<0else[1,t,N(1),Z(n-1)]if n>1else[[1,t,1,1],1][n]
14m2
1

JavaScript (Node.js) , 152 byte * 5113 integral = skor 777176

T='t';P=n=>--n?[T,'u',O,P(n)]:1;N=n=>n-1?n>-1?[1,T,N(1-n),1]:[1,T,N(-n),O]:1;O=N(0)
F=([e,...s])=>e?[1,T,[F(s),T,'x',O],[N(e[0]),T,O,[P(e[1]),T,O,1]]]:O

Cobalah online!

Terutama menggunakan dua persamaan ini:

\ ax + b: = \ int _ {\ int_a ^ 0x \ text dt} ^ b1 \ text dt \\ frac 1a = \ int_0 ^ 1u ^ {a-1} \ du

l4m2
sumber
0

JavaScript (Node.js) , 220 byte * 616 integral = skor 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

Cobalah online!

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

l4m2
sumber
Persamaan-> Lateks: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'));
14m2
Edit saja jawaban Anda yang ada. Kami tidak memerlukan jawaban terpisah untuk setiap upaya dengan skor berbeda. Juga, gambar persamaan yang Anda masukkan bahkan tidak layak termasuk karena mereka tidak dapat dibaca.
mbomb007
1
@ mbomb007 Biasanya saya menempatkan solusi serupa bersama-sama dan yang sangat berbeda dipisahkan. Beberapa kali sebelumnya saya menemukan beberapa simbol yang tidak diizinkan yang digunakan ketika saya mendapatkan gambar, jadi saya menyimpannya di sini agar lebih mudah dilihat legal
l4m2