Masz wiele wielomianów, które są samotne, więc stań się z nimi towarzyszami (którzy nie będą grozić nożem)!
Dla wielomianu stopnia n
dostępna jest macierz sześciennan by n
towarzysząca . Musisz stworzyć funkcję, która akceptuje listę współczynników dla wielomianu w porządku rosnącym ( ) lub malejącym ( ) (ale nie w obu) i generuje macierz towarzyszącą. a + bx +cx^2 + …
ax^n + bx^(n-1) + cx^(n-2)+…
dla wielomianu c0 + c1x + c2x^2 + ... + cn-1x^(n-1) + x^n
macierzą towarzyszącą jest
(0, 0, 0, ..., -c0 ),
(1, 0, 0, ..., -c1 ),
(0, 1, 0, ..., -c2 ),
(...................),
(0, 0, ..., 1, -cn-1)
zwróć uwagę, że współczynnik x^n
wynosi 1. Dla każdej innej wartości podziel wszystkie pozostałe współczynniki przez x^n
's. Dodatkowo, jedynki są przesunięte względem przekątnej.
Jeśli używany język zawiera już funkcję lub moduł, który to robi, nie możesz go użyć - musisz napisać własny.
Na przykład, gdybyś miał 4x^2 – 7x + 12
, współczynniki w kolejności rosnącej (12, -7, 4)
i malejącej (4, -7, 12)
. Funkcja lub program powinien wyprowadzać dane [(0, -3.0), (1, 1.75)]
dla dowolnej kolejności. Określ zamówienie, które akceptuje Twój kod. Minimalny wielomian powinien być kwadratowy. Współczynniki są ograniczone do liczb rzeczywistych.
Poniżej znajdują się przykłady - twoje wyjście nie musi pasować do ładnego formatowania, ale powinno wypisywać kolejno wiersze (w ()
) macierzy.
Rosnąco:
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. )]
Kolejność malejąca:
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 wygrywa z 20 bajtami!
Odpowiedzi:
CJam,
2320 bajtówJest to funkcja, która wysuwa dane wejściowe (w porządku rosnącym) ze stosu i wypycha dane wyjściowe w zamian.
Wypróbuj online w interpretatorze CJam .
Jak to działa
źródło
CJam,
323128 bajtówWypróbuj online
To pobiera dane wejściowe w kolejności rosnącej, przy użyciu formatu listy CJam. Przykładowe dane wejściowe:
Wyjaśnienie:
źródło
APL,
4030 bajtówAkceptuje dane wejściowe w kolejności rosnącej.
Wyjaśnienie:
Wypróbuj online
źródło
Julia, 43 bajty
Używa to malejącej kolejności dla danych wejściowych. Konstruuje matrycę obróconą o 180 stopni, aby umożliwić bardziej efektywne użycie „oka”, a następnie obraca matrycę we właściwej orientacji.
źródło
Julia,
6444 bajtyAkceptuje wektor współczynników w porządku rosnącym.
Nie golfowany:
Wypróbuj online
Zaoszczędź 20 bajtów dzięki Glen O!
źródło
R,
7159 bajtówPobiera dane wejściowe w kolejności rosnącej.
Nie golfowany:
źródło
Matlab, 66 bajtów
Używa rosnącej kolejności dla danych wejściowych, w formacie
[3., 7., -5., 4., 1.]
lub[3. 7. -5. 4. 1.]
.Wypróbuj online (w Octave).
Przykład (w Matlabie):
Jeśli program jest poprawny (zamiast funkcji), ze stdin i stdout:
Matlab, 59 bajtów
źródło
n=numel(c=input(''));
n=numel(input(''))
byłoby ważne, ale muszę użyćc
ponownie późniejOktawa,
4544 bajtówZakładając, że
c
jest wektorem kolumnowym o współczynniku największej mocyx
na końcu.Stara wersja:
Piątka, Julia!
źródło
Python 2, 141 bajtów
Moja własna próba:
Pobiera listę współczynników w porządku malejącym i najpierw tworzy transpozycję macierzy towarzyszącej - znanej z dźgania i rozmawiania. Zwrot wykorzystuje kod pocztowy do utworzenia transpozycji tej transpozycji w celu uzyskania rzeczywistej macierzy.
źródło
JavaScript (ES6) 85
Rosnąco.
Przetestuj poniższy fragment kodu w dowolnej przeglądarce zgodnej z EcmaScript 6.
źródło
TI-BASIC, 50 bajtów
Pobiera dane wejściowe w kolejności rosnącej. Zauważ, że to nie zadziała dla wielomianów stopnia <2, ponieważ TI-BASIC nie obsługuje pustych macierzy lub list. W oczekiwaniu na orzeczenie OP mogę to naprawić kosztem kilku bajtów.
Najpierw przechowujemy listę,
∟X
aby później użyć ostatniego elementu; następnie obliczamyΔList(Ans-cumSum(Ans))
, która jest tylko zanegowaną listą z obciętym ostatnim elementem i przekształcamy ją w wektor kolumny. PonieważList▶matr(
nie zmienia sięAns
, możemy użyć następnego wiersza, aby wziąć wymiar listy, którego używamy trzy razy. TI-BASIC nie ma konkatenacji pionowej, więc musimy wykonywać transpozycje i konkatenację w poziomie. W ostatnim wierszu[A]/∟X(Ans
nie działałoby, ponieważ macierze można pomnożyć przez skalary, ale nie podzielić.Na bok: Aby wygenerować wektor wiersza zer, korzystamy z rzadko przydatnego
randM(
polecenia.randM(
tworzy losową macierz, ale jej wpisy są zawsze losowymi liczbami całkowitymi od -9 do 9 (!), więc naprawdę przydatne jest tworzenie macierzy zerowych.źródło
Pari / GP , 49 bajtów
Wypróbuj online!
źródło