Sie haben eine Reihe von Polynomen, die einsam sind, also machen Sie sie zu Gefährten (die nicht drohen zu erstechen)!
Für ein Polynom vom Grad n
gibt es eine n by n
Begleiter Würfelmatrix für sie. Sie müssen eine Funktion erstellen, die eine Liste von Koeffizienten für ein Polynom in aufsteigender ( ) oder absteigender ( ) Reihenfolge (aber nicht in beiden) akzeptiert, und die Begleitmatrix ausgeben. a + bx +cx^2 + …
ax^n + bx^(n-1) + cx^(n-2)+…
für ein Polynom c0 + c1x + c2x^2 + ... + cn-1x^(n-1) + x^n
ist seine Begleitmatrix
(0, 0, 0, ..., -c0 ),
(1, 0, 0, ..., -c1 ),
(0, 1, 0, ..., -c2 ),
(...................),
(0, 0, ..., 1, -cn-1)
Beachten Sie, dass der Koeffizient für x^n
1 ist. Teilen Sie für jeden anderen Wert alle übrigen Koeffizienten durch x^n
's. Zusätzlich sind die Einsen von der Diagonalen versetzt.
Wenn die von Ihnen verwendete Sprache bereits eine Funktion oder ein Modul enthält, die bzw. das dies tut, können Sie sie nicht verwenden - Sie müssen Ihre eigene schreiben.
Wenn Sie dies getan haben 4x^2 – 7x + 12
, sind die Koeffizienten in aufsteigender Reihenfolge (12, -7, 4)
und absteigender Reihenfolge (4, -7, 12)
. Die Funktion oder das Programm sollte [(0, -3.0), (1, 1.75)]
für jede Bestellung ausgegeben werden. Geben Sie an, welche Bestellung Ihr Code akzeptiert. Das minimale Polynom sollte quadratisch sein. Koeffizienten sind auf reelle Zahlen beschränkt.
Unten sind Beispiele aufgeführt - Ihre Ausgabe muss nicht mit der hübschen Formatierung übereinstimmen, sondern sollte die Zeilen (in der ()
) der Matrix in der angegebenen Reihenfolge ausgeben .
Aufsteigende Reihenfolge:
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. )]
Absteigende Reihenfolge:
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 gewinnt mit 20 Bytes!
Antworten:
CJam,
2320 BytesDies ist eine Funktion, die die Eingabe (aufsteigende Reihenfolge) vom Stapel abruft und die Ausgabe zurückschiebt.
Probieren Sie es online im CJam-Interpreter aus .
Wie es funktioniert
quelle
CJam,
323128 BytesProbieren Sie es online aus
Dies nimmt die Eingabe in aufsteigender Reihenfolge vor, wobei das CJam-Listenformat verwendet wird. Beispieleingabe:
Erläuterung:
quelle
APL,
40-30BytesAkzeptiert die Eingabe in aufsteigender Reihenfolge.
Erläuterung:
Probieren Sie es online aus
quelle
Julia, 43 Bytes
Dies verwendet absteigende Reihenfolge für die Eingabe. Es konstruiert die um 180 Grad gedrehte Matrix, um eine effizientere Nutzung des "Auges" zu ermöglichen, und dreht dann die Matrix in die richtige Ausrichtung.
quelle
Julia,
6444 BytesAkzeptiert einen Vektor der Koeffizienten in aufsteigender Reihenfolge.
Ungolfed:
Probieren Sie es online aus
Dank Glen O 20 Bytes gespart!
quelle
R
7159 BytesNimmt die Eingabe in aufsteigender Reihenfolge vor.
Ungolfed:
quelle
Matlab, 66 Bytes
Die Eingabe erfolgt in aufsteigender Reihenfolge, mit Format
[3., 7., -5., 4., 1.]
oder[3. 7. -5. 4. 1.]
.Versuchen Sie es online (in Oktave).
Beispiel (in Matlab):
Wenn ein Programm gültig ist (anstelle einer Funktion), mit stdin und stdout:
Matlab, 59 Bytes
quelle
n=numel(c=input(''));
n=numel(input(''))
wäre gültig, aber ich mussc
später wieder verwendenOktave,
4544 BytesAngenommen
c
ist ein Spaltenvektor mit dem Koeffizienten der höchsten Potenz vonx
am Ende.Alte Version:
High Five, Julia!
quelle
Python 2, 141 Bytes
Mein eigener Versuch:
Erstellt eine Liste der Koeffizienten in absteigender Reihenfolge und erstellt zuerst die Transponierung der Begleitmatrix - bekannt für das Stechen und Sprechen. Die Rückgabe erzeugt mit zip die Transponierung dieser Transponierung, um die eigentliche Matrix zu erhalten.
quelle
JavaScript (ES6) 85
Aufsteigende Reihenfolge
Testen Sie das folgende Snippet in einem beliebigen EcmaScript 6-kompatiblen Browser.
quelle
TI-BASIC, 50 Bytes
Nimmt die Eingabe in aufsteigender Reihenfolge vor. Beachten Sie, dass dies für Polynome vom Grad <2 nicht funktioniert, da TI-BASIC keine leeren Matrizen oder Listen unterstützt. In Erwartung einer Entscheidung von OP kann ich dies auf Kosten einiger Bytes beheben.
Zuerst speichern wir die Liste in
∟X
, um später das letzte Element zu verwenden. Dann berechnen wirΔList(Ans-cumSum(Ans))
, das ist nur die negierte Liste mit dem zuletzt abgeschnittenen Element, und konvertieren sie in einen Spaltenvektor. DaList▶matr(
nicht geändert wirdAns
, können wir die nächste Zeile verwenden, um die Dimension der Liste zu ermitteln, die wir dreimal verwenden. TI-BASIC hat keine vertikale Verkettung, daher müssen Transponierungen vorgenommen und horizontal verkettet werden. In der letzten Zeile[A]/∟X(Ans
würde das nicht funktionieren, da Matrizen mit Skalaren multipliziert, aber nicht geteilt werden können.Nebenbei: Um den Zeilenvektor aus Nullen zu generieren, nutzen wir den selten nützlichen
randM(
Befehl.randM(
Erstellt eine zufällige Matrix, deren Einträge jedoch immer zufällige Ganzzahlen zwischen -9 und 9 (!) sind. Es ist also wirklich nur sinnvoll, Nullmatrizen zu erstellen.quelle
Pari / GP , 49 Bytes
Probieren Sie es online!
quelle