Transformasi Laplace polinomial
Ini adalah repost dari tantangan ini , dimaksudkan untuk mengubahnya menjadi format I / O yang lebih longgar dan aturan yang diperbarui
Anda harus menulis program yang mengambil polinomial integer di \$t\$sebagai input dan output transformasi Laplace dari polinomial ini. Beberapa definisi dan properti:
- Transformasi Laplace dari fungsi tertentu \$f(t)\$ aku s
$$\mathcal{L}\{f(t)\} = F(s) = \int_0^\infty f(t)e^{-st}dt$$
- Transformasi Laplace dari \$f(t) = t^n, \, n = 0, 1, 2, ...\$ aku s
$$\mathcal{L}\{t^n\} = \frac{n!}{s^{n+1}}$$
- Transformasi Laplace didistribusikan di atas penambahan:
$$\mathcal{L}\{f(t)+g(t)\} = \mathcal{L}\{f(t)\} + \mathcal{L}\{g(t)\}$$
- Transformasi Laplace dari konstanta dikalikan dengan fungsi sama dengan konstanta dikalikan dengan transformasi:
$$\mathcal{L}\{af(t)\} = a\mathcal{L}\{f(t)\}$$
- Polinomial bilangan bulat adalah polinomial yang setiap suku memiliki koefisien bilangan bulat, dan urutan non-negatif
Contoh yang berhasil:
$$\begin{align} \mathcal{L}\{3t^4+2t^2+t-4\} & = \mathcal{L}\{3t^4\}+\mathcal{L}\{2t^2\}+\mathcal{L}\{t\}-\mathcal{L}\{4\} \\ & = 3\mathcal{L}\{t^4\}+2\mathcal{L}\{t^2\}+\mathcal{L}\{t\}-4\mathcal{L}\{1\} \\ & = 3\left(\frac{4!}{s^5}\right)+2\left(\frac{2!}{s^3}\right)+\left(\frac{1!}{s^2}\right)-4\left(\frac{0!}{s}\right) \\ & = \frac{72}{s^5}+\frac{4}{s^3}+\frac{1}{s^2}-\frac{4}{s} \end{align}$$
Anda dapat memasukkan masukan dalam representasi standar polinomial. Beberapa contoh (untuk \$3x^4+2x^2+x-4\$ sebagai contoh) adalah:
- Daftar koefisien.
[-4, 1, 2, 0, 3]
atau[3, 0, 2, 1, -4]
- Pasangan koefisien dan pangkat.
[[3, 4], [2, 2], [1, 1], [-4, 0]]
dan berbagai macam pemesanan - Sebuah string, menggunakan variabel apa pun yang Anda suka.
3x^4+2x^2+x-4
Demikian pula, karena keluarannya berupa polinomial dengan urutan negatif, Anda dapat mengeluarkan dalam format yang serupa, seperti (menggunakan \$\mathcal{L}\{3x^4+2x^2+x-4\} = \frac{72}{s^5}+\frac4{s^3}+\frac1{s^2}-\frac4s\$):
- Daftar koefisien.
[72, 0, 4, 1, -4]
atau[-4, 1, 4, 0, 72]
- Pasangan koefisien dan pangkat.
[[72, -5], [4, -3], [1, -2], [-4, -1]]
dan berbagai urutan berbeda (atau versi positif dari kekuatan) - Sebuah string, menggunakan variabel apa pun yang Anda suka.
72s^-5+4s^-3+s^-2-4s^-1
Jika Anda memiliki metode I / O alternatif yang tidak Anda yakini, silakan beri komentar di bawah ini untuk bertanya.
Ini adalah kode-golf jadi kode terpendek dalam byte menang.
Jawaban
Haskell , 25 byte
zipWith(*)$scanl(*)1[1..]
Cobalah secara online!
Cukup mudah: Menghasilkan daftar faktorial [1,1,2,6,...]
dengan a scanl
, lalu zipWith(*)
mengalikan setiap elemen input dengan nilai yang sesuai.
32 byte
foldr(\(i,x)r->x:map((i+1)*)r)[]
Cobalah secara online!
Solusi berbasis lipat yang cantik. Mengambil masukan sebagai (exponent, coefficient)
pasangan.
menyampaikan , 15 byte
v"*<
0+1"
1{*}
Cobalah secara online!
Dua kolom kiri menyalin "
1, 2, 3,… ke atas *
. Nilai di kanan atas dikalikan dengan itu setiap putaran, jadi kami mendapatkan (mulai dengan tambahan 1 = 0!) 1 !, 2 !, 3 !,… disalin ke bagian bawah *
. {
membaca masukan, mengalikannya dengan faktorial dan mengeluarkannya }
.
Jelly , 4 byte
J’!×
Mengambil masukan sebagai daftar koefisien.
Penjelasan
J’!×
J | Returns an array of elements from 1 to length of input array
’ | Subtracts 1 from each
! | Factorial each
×| Multiply each item in the original array by the created array
Cobalah secara online!
APL (Dyalog Unicode) , 3 byte
×∘!
Cobalah secara online!
Membawa I / O liberal secara ekstrem: menggunakan polinomial \$ 3x^4 + 2x^2+x-4 \$sebagai dua argumen, koefisien di kiri dan pangkat di kanan dalam urutan menurun dan termasuk suku nol, seperti pada 3 0 2 1 ¯4 f 4 3 2 1 0
. Mengembalikan polinomial sebagai vektor koefisien.
PowerShell , 28 byte
Masukkan sebagai daftar koefisien
$p++;$args|%{$p*$_;$p*=++$i}
Cobalah secara online!
APL (Dyalog Unicode) , 7 byte
⊢×!∘⍳∘≢
Cobalah secara online!
Kegunaan ⎕IO←0
(0-pengindeksan)
Masukkan sebagai daftar koefisien.
Bahasa Wolfram (Mathematica) , 10 byte
#2!#&@@@#&
Cobalah secara online!
Masukkan daftar pasangan koefisien / daya, termasuk koefisien nol, diurutkan berdasarkan daya, dan keluarkan daftar koefisien yang sesuai.
Built-in lebih panjang: 23 byte
LaplaceTransform[#,t,]&
Cobalah secara online!
Masukkan polinomial dalam suku t
, dan keluaran satu suku Null
.
Retina , 30 byte
L$`.+ $&$:&* +`\d+_ $.(*$(_$%'
Cobalah secara online! I / O adalah daftar koefisien yang dipisahkan baris baru dari tingkat terendah hingga tertinggi. Penjelasan:
L$`.+ $&$:&*
Untuk setiap koefisien, tambahkan sejumlah garis bawah yang sama dengan derajatnya.
+`\d+_
$.(*$(_$%'
Sampai tidak ada garis bawah yang tersisa, kalikan setiap koefisien dengan jumlah garis bawah berikut, menghapus satu dalam proses.
Scala 3, 52 48 byte
p=>p.indices.scanLeft(1)(_*_.+(1))zip p map(_*_)
Cobalah secara online!
Input dan output sebagai daftar bilangan bulat, dari derajat terendah hingga tertinggi.
p.indices
memberi kita rentang dari 0 hingga p.size - 1
. Pemindaian ke kiri dengan perkalian memberikan faktorial pada setiap indeks, tetapi karena elemen pertama adalah 0, kita perlu menambahkan 1 (karenanya _.+(1)
). Kemudian semua faktorial dikompresi dengan koefisien dan dikalikan bersama.
Python 2 , 39 byte
p=i=1
while 1:print p*input();p*=i;i+=1
Cobalah secara online!
Input dan output adalah koefisien, satu per baris, dimulai dengan derajat terkecil (nol terdekat).
Mengambil (coefficient, exponent)
berpasangan ternyata sedikit lebih lama.
p=1
while 1:x,i=input();print p*x;p*=i+1
Cobalah secara online!
Raku , 15 byte
*Z*1,|[\*] 1..*
Cobalah secara online!
[\*] 1..*
adalah deret tak hingga faktorial yang dimulai dengan 1!
. Tambahan 1
(untuk 0!
) ditempelkan ke depan, lalu semuanya di-zip-kan dengan perkalian ( Z*
) dengan satu-satunya urutan masukan *
.
Japt -m , 3 byte
*Vl
Coba di sini
R , 34 28 25 byte
(x=scan())*gamma(seq(!x))
Cobalah secara online!
Cukup mudah.
R tidak memiliki fungsi faktorial bernama pendek, tetapi memiliki gamma
.
Menghasilkan urutan bersama x
menggunakan trik dari @Giuseppe .
JavaScript (ES6), 31 29 byte
I / O: daftar koefisien, dari tingkat terendah hingga tertinggi.
a=>a.map((v,i)=>v*=p=i?p*i:1)
Cobalah secara online!
Berkomentar
a => // a[] = polynomial coefficients
a.map((v, i) => // for each coefficient v at position i in a[]:
v *= // multiply v by:
p = // the updated factorial p, which is:
i ? // if i > 0:
p * i // multiplied by i
: // else:
1 // initialized to 1
) // end of map()
SageMath , 27 23 byte
Disimpan 4 byte berkat ovs !!!
lambda f:f.laplace(x,x)
Cobalah secara online!
Berfungsi dari \$x\$sebagai input dan mengembalikan transformasi Laplace sebagai fungsi dari \$x\$.
Arang , 12 byte
IEA×ιΠ⊞Oυ∨κ¹
Cobalah secara online! Tautan adalah untuk verbose versi kode. I / O adalah daftar koefisien dari tingkat terendah hingga tertinggi. Penjelasan:
A Input array
E Map over elements
ι Current element
× Multiplied by
Π Product of
υ Predefined empty list
⊞O After pushing
∨ Logical Or of
κ Current index
¹ Literal 1
I Cast to string
Implicitly print
05AB1E , 4 byte
εN!*
Cobalah secara online.
Atau sebagai alternatif:
ā<!*
Cobalah secara online.
Keduanya mengambil daftar koefisien sebagai masukan.
Penjelasan:
ε # Map over each value of the (implicit) input-list
N # Push the 0-based map-index
! # Pop and take it's faculty
* # Multiply it by the current value
# (after the map, the resulting list is output implicitly)
ā # Push a list in the range [1,length] based on the (implicit) input-list
< # Decrease each by 1 to make the range [0,length)
! # Take the faculty of each
* # And multiply it to the values at the same positions in the (implicit) input-list
# (after which the result is output implicitly)