Vous avez un certain nombre de polynômes qui sont seuls, alors faites-en des compagnons (qui ne menaceront pas de poignarder)!
Pour un polynôme de degré n
, il existe une matrice de cuben by n
compagnon . Vous devez créer une fonction qui accepte une liste de coefficients pour un polynôme dans l'ordre croissant ( ) ou décroissant ( ) (mais pas les deux) et générer la matrice associée. a + bx +cx^2 + …
ax^n + bx^(n-1) + cx^(n-2)+…
pour un polynôme c0 + c1x + c2x^2 + ... + cn-1x^(n-1) + x^n
, sa matrice compagnon est
(0, 0, 0, ..., -c0 ),
(1, 0, 0, ..., -c1 ),
(0, 1, 0, ..., -c2 ),
(...................),
(0, 0, ..., 1, -cn-1)
notez que le coefficient de x^n
est 1. Pour toute autre valeur, divisez tous les autres coefficients par x^n
. De plus, les 1 sont décalés de la diagonale.
Si le langage que vous utilisez contient déjà une fonction ou un module qui fait cela, vous ne pouvez pas l'utiliser - vous devez écrire le vôtre.
Par exemple, si vous en aviez 4x^2 – 7x + 12
, les coefficients dans l'ordre croissant sont (12, -7, 4)
et dans l'ordre décroissant (4, -7, 12)
. La fonction ou le programme doit sortir [(0, -3.0), (1, 1.75)]
pour l'un ou l'autre ordre. Spécifiez la commande acceptée par votre code. Le polynôme minimum doit être quadratique. Les coefficients sont limités aux nombres réels.
Vous trouverez ci-dessous des exemples - votre sortie n'a pas à correspondre à la jolie mise en forme, mais elle doit sortir les lignes (dans le ()
) de la matrice dans l'ordre.
Ordre croissant:
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. )]
Ordre décroissant:
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 gagne avec 20 octets!
Réponses:
CJam,
2320 octetsIl s'agit d'une fonction qui extrait l'entrée (ordre croissant) de la pile et pousse la sortie en retour.
Essayez-le en ligne dans l' interpréteur CJam .
Comment ça fonctionne
la source
CJam,
323128 octetsEssayez-le en ligne
Cela prend l'entrée dans l'ordre croissant, en utilisant le format de liste CJam. Exemple d'entrée:
Explication:
la source
APL,
4030 octetsAccepte les entrées dans l'ordre croissant.
Explication:
Essayez-le en ligne
la source
Julia, 43 octets
Cela utilise l'ordre décroissant pour l'entrée. Il construit la matrice tournée à 180 degrés, afin de permettre une utilisation plus efficace de "l'oeil", puis fait pivoter la matrice dans la bonne orientation.
la source
Julia,
6444 octetsAccepte un vecteur des coefficients dans l'ordre croissant.
Non golfé:
Essayez-le en ligne
20 octets enregistrés grâce à Glen O!
la source
R,
7159 octetsPrend les entrées dans l'ordre croissant.
Non golfé:
la source
Matlab, 66 octets
Il utilise l'ordre croissant pour l'entrée, au format
[3., 7., -5., 4., 1.]
ou[3. 7. -5. 4. 1.]
.Essayez-le en ligne (dans Octave).
Exemple (dans Matlab):
Si un programme est valide (au lieu d'une fonction), avec stdin et stdout:
Matlab, 59 octets
la source
n=numel(c=input(''));
n=numel(input(''))
serait valide, mais je dois réutiliserc
plus tardOctave,
4544 octetsEn supposant que
c
c'est un vecteur colonne avec le coefficient de la puissance la plus élevée dex
à la fin.Ancienne version:
Haut cinq, Julia!
la source
Python 2, 141 octets
Ma propre tentative:
Prend une liste des coefficients dans l'ordre décroissant et construit d'abord la transposition de la matrice compagnon - connue pour poignarder et être bavarde. Le retour utilise zip pour produire la transposition de cette transposition pour obtenir la matrice réelle.
la source
JavaScript (ES6) 85
Ordre croissant.
Testez l'exécution de l'extrait ci-dessous dans n'importe quel navigateur compatible EcmaScript 6.
la source
TI-BASIC, 50 octets
Prend les entrées dans l'ordre croissant. Notez que cela ne fonctionnera pas pour les polynômes de degré <2, car TI-BASIC ne prend pas en charge les matrices ou listes vides. En attendant une décision de l'OP, je peux résoudre ce problème au prix de quelques octets.
Tout d'abord, nous stockons la liste dans
∟X
pour utiliser le dernier élément plus tard; ensuite, nous calculonsΔList(Ans-cumSum(Ans))
, qui est juste la liste inversée avec le dernier élément coupé, et le convertissons en un vecteur de colonne. PuisqueList▶matr(
ne modifie pasAns
, nous pouvons utiliser la ligne suivante pour prendre la dimension de la liste, que nous utilisons trois fois. TI-BASIC n'a pas de concaténation verticale, nous devons donc prendre des transposés et concaténer horizontalement. Dans la dernière ligne,[A]/∟X(Ans
cela ne fonctionnerait pas car les matrices peuvent être multipliées par des scalaires mais pas divisées.Un côté: pour générer le vecteur ligne de zéros, nous profitons de la
randM(
commande rarement utile .randM(
crée une matrice aléatoire, mais ses entrées sont toujours des entiers aléatoires compris entre -9 et 9 (!), il n'est donc vraiment utile que de créer des matrices nulles.la source
Pari / GP , 49 octets
Essayez-le en ligne!
la source