Polinom -> Entegre


11

Rasyonel katsayıları olan bir değişkende bir polinom göz önüne alındığında, sadece 1, değişkenleri ve belirli integralleri içeren eşdeğer bir ifade çıkar . Örneğin, - x 2 ∫ olarak ifade edilebilir x1 1 1d t x d u .

E := 1 | var | ∫EEEdvar

Herhangi bir makul giriş / çıkış yöntemine izin verilir.

Örnekler:

\ Büyük 1 = 1 \ \ Büyük x = x \ \ Büyük 0 = \ int_1 ^ 1 1 \ text dt \ \ Büyük 2 = \ int _ {\ int_1 ^ {\ int_1 ^ 1 1 \ text dv} 1 \ text du} ^ 1 1 \ text dt \ \ Büyük 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

Puanınız, kod uzunluğunuzun test senaryolarında kullanılan sembol sayısıyla çarpılması olacaktır . Programınızı puanlayabilmeniz gerekir. En düşük puan kazanır.

Test senaryoları:

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 zor olacak, çünkü sadece kodu veya sadece çıktıyı golf edemem ve bu yüzden bir değişikliğin denemeye kadar yardımcı olup olmayacağını veya puanımı inciteceğini bilmiyorum, ki bence berbat.

Puanın yaratılışınızı kısıtlamasına izin vermeyin. Skorun bir kısmı iyi optimize edilmişse, diğeri kötü bir şekilde bırakılmış olsa bile cevap verebilirsiniz.



@ OlivierGrégoire Ters çalışma
l4m2

Bu, puanlama sistemi tarafından daha da kötüleşen ilginç bir mücadeledir. Kodun uzunluğuna bakılmaksızın, sadece bir değişkene (veya eşdeğerini) atayarak ve bunu işaret olarak kullanarak, sembolün sıfır tekrarını meydana getiren 0 puanını anında talep edebilirim chr(8747). Bu bir vanilya kodu golf meydan okuma şiddetle tavsiye ediyorum .
caird coinheringaahing

3
@cairdcoinheringaahing Herhangi bir çıktı biçimi kullanırsanız kullanın, örneğin 0=[1,1,1], yine de "1 " olarak sayılır . Böylece sadece test 1x
senaryosunda

1
Şahsen, bunun bir kod golf sorusu olarak daha iyi olacağını düşünüyorum. Herhangi bir çözüm etkileyici olacak, bu yüzden mümkün olduğunca az entegrasyona ihtiyaç duyulduğunu sanmıyorum.
mbomb007

Yanıtlar:


5

Python 2 , 315 bayt * 5113 = 1610595 skoru

Hâlâ skoru golf oynamak için çalışıyorum. Golf zor olacak, çünkü sadece kodu veya sadece çıktıyı golf edemem ve bu yüzden bir değişikliğin denemeye kadar yardımcı olup olmayacağını veya puanımı inciteceğini bilmiyorum, ki bence berbat.

Bu golf sıkıntısına rağmen, analizin tadını çıkardı.

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

Çevrimiçi deneyin!

Tüm test senaryolarını çalıştırın - puanlamak için, [çıktıdaki tüm sayıları sayın .

Giriş polinomu, en küçükten en yükseke doğru sırayla (pay, payda) katsayı çiftlerinin bir listesi olarak alınır x. (0, 1)(sıfır) eksik güçler için kullanılır.

Çıktı, [f,t,a,b]a b f d t'yi temsil eden bir liste ile temsil edilen her integralle verilir

Doğrulama

Burada , çevrimiçi bir not defterinde test edilebilecek, entegrasyon için geçerli Mathematica sözdizimi sağlayan biraz daha az golfçü bir sürüm var. Ne yazık ki, düzgün boyutlu programlar ücretsiz bir not defterinde tamamlanmayacak.

Buraya gidin , aşağıya kaydırın, "Yeni Not Defteri Oluştur", yapıştırın (Wolfram Dil Girişi) ve değerlendirin (Shift + Enter) (Num-pad Enter tuşunun kullanılmasının işe yaramadığını unutmayın) .

açıklama

Bu denklemleri kullanır:

-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

Bağlantılar


@ l4m2 Bu yorumları kaldırabilmemiz için soruya bağlantılar ekledim. Teşekkürler.
mbomb007

Define Z(n)olarak 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

veyaZ=lambda n:N(Z(-n))if n<0else[1,t,N(1),Z(n-1)]if n>1else[[1,t,1,1],1][n]
l4m2

1

JavaScript (Node.js) , 152 bayt * 5113 integral = 777176 puan

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

Çevrimiçi deneyin!

Temel olarak bu iki denklemi kullanın:

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


0

JavaScript (Node.js) , 220 bayt * 616 integral = 135520 skor

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

Çevrimiçi deneyin!

resim açıklamasını buraya girin resim açıklamasını buraya girin resim açıklamasını buraya girin


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'));
Denklem-

Sadece mevcut cevabınızı düzenleyin. Farklı bir puan alan her deneme için ayrı bir cevaba ihtiyacımız yok. Ayrıca, eklediğiniz denklem görüntüleri, okunaklı olmadıkları için dahil etmeye bile değmez.
mbomb007

1
@ mbomb007 Genellikle benzer çözümü bir araya getiriyorum ve oldukça farklı olanları ayırıyorum. Önceki birkaç kez, resmi aldığımda izin verilmeyen bazı semboller buldum, bu yüzden yasal olduğunu daha kolay görmek için burada
tutuyorum
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.