Você tem vários polinômios que são solitários, então faça deles alguns companheiros (que não ameaçam esfaquear)!
Para um polinômio de grau n
, há uma matriz de cubon by n
complementar para ele. Você precisa criar uma função que aceite uma lista de coeficientes para um polinômio na ordem crescente ( ) ou decrescente ( ) (mas não ambas) e gerar a matriz complementar. a + bx +cx^2 + …
ax^n + bx^(n-1) + cx^(n-2)+…
para um polinômio c0 + c1x + c2x^2 + ... + cn-1x^(n-1) + x^n
, sua matriz associada é
(0, 0, 0, ..., -c0 ),
(1, 0, 0, ..., -c1 ),
(0, 1, 0, ..., -c2 ),
(...................),
(0, 0, ..., 1, -cn-1)
note que o coeficiente para x^n
é 1. Para qualquer outro valor, divida todo o restante dos coeficientes por x^n
's. Além disso, os 1s são deslocados da diagonal.
Se o idioma que você está usando já contém uma função ou módulo que faz isso, você não pode usá-lo - você deve escrever o seu.
Por exemplo, se você tiver 4x^2 – 7x + 12
, os coeficientes em ordem crescente (12, -7, 4)
e decrescente (4, -7, 12)
. A função ou programa deve gerar[(0, -3.0), (1, 1.75)]
para qualquer ordem. Especifique qual pedido seu código aceita. O polinômio mínimo deve ser quadrático. Os coeficientes são restritos a números reais.
Abaixo estão alguns exemplos - sua saída não precisa corresponder à formatação bonita, mas deve gerar as linhas (na ()
) da matriz em ordem.
Ordem ascendente:
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. )]
Ordem decrescente:
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 vence com 20 bytes!
Respostas:
CJam,
2320 bytesEsta é uma função que exibe a entrada (ordem crescente) da pilha e empurra a saída em troca.
Experimente online no intérprete CJam .
Como funciona
fonte
CJam,
323128 bytesExperimente online
Isso leva a entrada em ordem crescente, usando o formato de lista CJam. Entrada de amostra:
Explicação:
fonte
APL,
4030 bytesAceita entrada em ordem crescente.
Explicação:
Experimente online
fonte
Julia, 43 bytes
Isso usa ordem decrescente para a entrada. Ele constrói a matriz girada 180 graus, a fim de permitir um uso mais eficiente do "olho", depois gira a matriz na orientação correta.
fonte
Julia,
6444 bytesAceita um vetor dos coeficientes em ordem crescente.
Ungolfed:
Experimente online
Economizou 20 bytes graças a Glen O!
fonte
R,
7159 bytesRecebe entrada em ordem crescente.
Ungolfed:
fonte
Matlab, 66 bytes
Ele usa ordem crescente para a entrada, com formato
[3., 7., -5., 4., 1.]
ou[3. 7. -5. 4. 1.]
.Experimente online (na oitava).
Exemplo (no Matlab):
Se um programa é válido (em vez de uma função), com stdin e stdout:
Matlab, 59 bytes
fonte
n=numel(c=input(''));
n=numel(input(''))
seria válido, mas eu preciso usá-loc
novamente mais tardeOitava,
4544 bytesAssumindo que
c
é um vetor de coluna com o coeficiente da maior potência dex
no final.Versão antiga:
Mais cinco, Julia!
fonte
Python 2, 141 bytes
Minha própria tentativa:
Pega uma lista dos coeficientes em ordem decrescente e primeiro cria a transposição da matriz complementar - conhecida por esfaquear e ser falante. O retorno usa zip para produzir a transposição dessa transposição para obter a matriz real.
fonte
JavaScript (ES6) 85
Ordem ascendente.
Teste a execução do snippet abaixo em qualquer navegador compatível com EcmaScript 6.
fonte
TI-BASIC, 50 bytes
Recebe entrada em ordem crescente. Observe que isso não funcionará para polinômios de grau <2, porque o TI-BASIC não suporta matrizes ou listas vazias. Na pendência de uma decisão do OP, posso corrigir isso ao custo de alguns bytes.
Primeiro, armazenamos a lista
∟X
para usar o último elemento posteriormente; depois calculamosΔList(Ans-cumSum(Ans))
, que é apenas a lista negada com o último elemento cortado e a convertemos em um vetor de coluna. ComoList▶matr(
não modificaAns
, podemos usar a próxima linha para obter a dimensão da lista, que usamos três vezes. O TI-BASIC não possui concatenação vertical; portanto, precisamos fazer transposições e concatenar horizontalmente. Na última linha,[A]/∟X(Ans
não funcionaria porque as matrizes podem ser multiplicadas por escalares, mas não divididas.Um aspecto: para gerar o vetor de linha de zeros, aproveitamos o
randM(
comando raramente útil .randM(
cria uma matriz aleatória, mas suas entradas são sempre números inteiros aleatórios entre -9 e 9 (!), portanto, é realmente útil criar matrizes zero.fonte
Pari / GP , 49 bytes
Experimente online!
fonte