Anda memiliki sejumlah polinomial yang kesepian, jadi jadikan mereka teman (yang tidak akan mengancam untuk menusuk)!
Untuk polinomial derajat n
, ada matriks kubusn by n
pengiring untuk itu. Anda perlu membuat fungsi yang menerima daftar koefisien untuk polinomial baik dalam urutan naik ( ) atau turun ( ) (tetapi tidak keduanya) dan mengeluarkan matriks pendamping. a + bx +cx^2 + …
ax^n + bx^(n-1) + cx^(n-2)+…
untuk polinomial c0 + c1x + c2x^2 + ... + cn-1x^(n-1) + x^n
, matriks pengiringnya adalah
(0, 0, 0, ..., -c0 ),
(1, 0, 0, ..., -c1 ),
(0, 1, 0, ..., -c2 ),
(...................),
(0, 0, ..., 1, -cn-1)
catat bahwa koefisien untuk x^n
adalah 1. Untuk nilai lainnya, bagi semua sisa koefisien dengan x^n
'. Selain itu, 1 adalah offset dari diagonal.
Jika bahasa yang Anda gunakan sudah mengandung fungsi atau modul yang melakukan ini, Anda tidak dapat menggunakannya - Anda harus menulis sendiri.
Misalnya, jika Anda punya 4x^2 – 7x + 12
, koefisien dalam urutan naik adalah (12, -7, 4)
dan urutan menurun (4, -7, 12)
. Fungsi atau program harus menampilkan [(0, -3.0), (1, 1.75)]
untuk salah satu urutan. Tentukan pesanan mana yang diterima oleh kode Anda. Polinomial minimum harus kuadratik. Koefisien terbatas pada bilangan real.
Di bawah ini adalah contoh - output Anda tidak harus cocok dengan format cantik tetapi harus menampilkan baris (dalam ()
) dari matriks secara berurutan.
Urutan naik:
input:
[3., 7., -5., 4., 1.]
output:
[(0, 0, 0, -3.),
(1, 0, 0, -7.),
(0, 1, 0, 5.),
(0, 0, 1, -4.)]
input:
[-4., -7., 13.]
output:
[(0, 0.30769231),
(1, 0.53846154)]
input:
[23., 1., 92., 8., -45., 88., 88.]
output:
[(0, 0, 0, 0, 0, -0.26136364),
(1, 0, 0, 0, 0, -0.01136364),
(0, 1, 0, 0, 0, -1.04545455),
(0, 0, 1, 0, 0, -0.09090909),
(0, 0, 0, 1, 0, 0.51136364),
(0, 0, 0, 0, 1, -1. )]
Urutan menurun:
input:
[1., 4., -5., 7., 3.]
output:
[(0, 0, 0, -3.),
(1, 0, 0, -7.),
(0, 1, 0, 5.),
(0, 0, 1, -4.)]
input:
[13., -7., -4.]
output:
[(0, 0.30769231),
(1, 0.53846154)]
input:
[88., 88., -45., 8., 92.,1., 23.]
output:
[(0, 0, 0, 0, 0, -0.26136364),
(1, 0, 0, 0, 0, -0.01136364),
(0, 1, 0, 0, 0, -1.04545455),
(0, 0, 1, 0, 0, -0.09090909),
(0, 0, 0, 1, 0, 0.51136364),
(0, 0, 0, 0, 1, -1. )]
Dennis menang dengan 20 byte!
Jawaban:
CJam,
2320 byteIni adalah fungsi yang mengeluarkan input (urutan menaik) dari tumpukan dan mendorong hasilnya sebagai balasan.
Cobalah online di penerjemah CJam .
Bagaimana itu bekerja
sumber
CJam,
323128 byteCobalah online
Ini mengambil input dalam urutan menaik, menggunakan format daftar CJam. Input sampel:
Penjelasan:
sumber
APL,
4030 byteMenerima input dalam urutan menaik.
Penjelasan:
Cobalah online
sumber
Julia, 43 byte
Ini menggunakan urutan menurun untuk input. Ini membangun matriks diputar 180 derajat, untuk memungkinkan penggunaan "mata" yang lebih efisien, kemudian memutar matriks ke arah yang benar.
sumber
Julia,
6444 byteMenerima vektor koefisien dalam urutan menaik.
Tidak Disatukan:
Cobalah online
Disimpan 20 byte berkat Glen O!
sumber
R,
7159 byteMengambil input dalam urutan menaik.
Tidak Disatukan:
sumber
Matlab, 66 byte
Ini menggunakan urutan naik untuk input, dengan format
[3., 7., -5., 4., 1.]
atau[3. 7. -5. 4. 1.]
.Cobalah online (dalam Oktaf).
Contoh (dalam Matlab):
Jika suatu program valid (alih-alih fungsi), dengan stdin dan stdout:
Matlab, 59 byte
sumber
n=numel(c=input(''));
n=numel(input(''))
akan valid, tetapi saya perlu menggunakanc
lagi nantiOktaf,
4544 byteDengan asumsi
c
adalah vektor kolom dengan koefisien kekuatan tertinggix
di akhir.Versi lama:
Lima tinggi, Julia!
sumber
Python 2, 141 byte
Usaha saya sendiri:
Mengambil daftar koefisien dalam urutan menurun dan pertama-tama membuat transpose dari matriks pendamping - dikenal dengan penusukan dan banyak bicara. Pengembalian menggunakan zip untuk menghasilkan transpose dari transpose ini untuk mendapatkan matriks yang sebenarnya.
sumber
JavaScript (ES6) 85
Urutan naik.
Tes menjalankan cuplikan di bawah ini di peramban apa pun yang mendukung EcmaScript 6.
sumber
TI-BASIC, 50 byte
Mengambil input dalam urutan menaik. Perhatikan bahwa ini tidak akan berfungsi untuk polinomial derajat <2, karena TI-BASIC tidak mendukung matriks atau daftar kosong. Sambil menunggu keputusan dari OP, saya dapat memperbaikinya dengan biaya beberapa byte.
Pertama, kami menyimpan daftar
∟X
untuk menggunakan elemen terakhir nanti; kemudian, kami menghitungΔList(Ans-cumSum(Ans))
, yang hanya daftar yang dinegasikan dengan elemen terakhir dipotong, dan mengubahnya menjadi vektor kolom. KarenaList▶matr(
tidak memodifikasiAns
, kita dapat menggunakan baris berikutnya untuk mengambil dimensi dari daftar, yang kita gunakan tiga kali. TI-BASIC tidak memiliki penggabungan vertikal, jadi kita perlu mengambil transpos dan penggabungan secara horizontal. Di baris terakhir,[A]/∟X(Ans
tidak akan berfungsi karena matriks dapat dikalikan dengan skalar tetapi tidak dibagi.Samping: Untuk menghasilkan vektor baris nol, kami memanfaatkan
randM(
perintah yang jarang berguna .randM(
membuat matriks acak, tetapi entri-entrinya selalu bilangan bulat acak antara -9 dan 9 (!), jadi itu benar-benar hanya berguna untuk membuat matriks nol.sumber
Pari / GP , 49 byte
Cobalah online!
sumber