Upraszczanie bez skutków ubocznych
Treść zadania
Zapis wielomianu może zaczynać się od zbędnych zer, np. lista [0, 0, 3, 0, 1] oznacza ten sam wielomian co [3, 0, 1], czyli $3x^2 + 1$. W tym zadaniu (wyjątkowo) dane mogą więc zaczynać się od zer.
Napisz funkcję uprosc(w), która zwraca nową listę współczynników bez zer wiodących. Wielomian zerowy (same zera) upraszczamy do listy [0]. Funkcja nie może zmieniać otrzymanej listy w — program po wywołaniu funkcji wypisuje także oryginalną listę, żeby to sprawdzić.
Dane wejściowe
- 1. linia:
k— liczba współczynników (k ≥ 1) - 2. linia:
kliczb całkowitych — współczynniki od najwyższej potęgi (mogą zaczynać się od zer)
Dane wyjściowe
Dwie linie, liczby oddzielone spacją:
- 1. linia: współczynniki uproszczonego wielomianu (dla wielomianu zerowego:
0), - 2. linia: oryginalna lista po wywołaniu funkcji — musi być identyczna z wczytaną.
Ograniczenia
1 ≤ k ≤ 20-100 ≤ a_i ≤ 100
Uwagi
- Funkcja czysta tylko oblicza i zwraca wynik. Funkcja ze skutkiem ubocznym zmienia coś poza sobą — np. listę, którą dostała jako argument.
- Lista przekazana do funkcji nie jest kopiowana: parametr
wi zmiennawspolczynnikiw programie to ta sama lista. Dlatego poniższa funkcja zwraca dobry wynik, ale psuje listę wywołującego (druga linia wyjścia byłaby3 0 1):
```python
def uprosc_zle(w):
while len(w) > 1 and w[0] == 0:
w.pop(0) # usuwa element z ORYGINALNEJ listy!
return w` - Zamiast usuwać elementy, znajdź indeks
ipierwszego niezerowego współczynnika i zwróć wycinekw[i:]— wycinek to nowa lista, a oryginał zostaje nietknięty.
Przykład
5 0 0 3 0 1
3 0 1 0 0 3 0 1
Usuwamy tylko zera z początku — zero w środku zapisu (przy $x^1$) zostaje.
Potrzebujesz teorii?
Zasady obowiązujące w rozdziale 14
Poniższe zadania dotyczą pisania funkcji operujących na wielomianach. Wielomian zapisujemy jako listę jego współczynników od najwyższej potęgi do wyrazu wolnego: lista [a_n, a_{n-1}, ..., a_1, a_0] oznacza wielomian $a_n x^n + a_{n-1} x^{n-1} + \dots + a_1 x + a_0$.
Konwencje wspólne:
- Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście. Główną pracę wykonuje funkcja opisana w treści zadania — program tylko wczytuje dane, wywołuje funkcję i wypisuje wynik (gotowy szkielet znajdziesz w sekcji „Kod startowy”).
- Wielomian stopnia
njest podawany w dwóch liniach: najpierw liczban, a w następnej liniin+1liczb całkowitycha_n a_{n-1} ... a_0oddzielonych spacjami. - Współczynniki są liczbami całkowitymi (mogą być ujemne). Dla
n ≥ 1współczynnika_njest różny od zera. - Gdy wynikiem jest wielomian, wypisz jego współczynniki od najwyższej potęgi w jednej linii, oddzielone pojedynczą spacją, bez nawiasów i przecinków.
- Program nie wypisuje komunikatów typu „Podaj liczbę:”.
Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.
Przywrócono Twój zapisany kod.
Python uruchomi się w przeglądarce przy pierwszym teście.
Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.
Testy
Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.
Test 1
Nie uruchomiono3 0 0 0
0 0 0 0
Test 2
Nie uruchomiono1 7
7 7
Test 3
Nie uruchomiono1 0
0 0
Test 4
Nie uruchomiono4 2 0 0 5
2 0 0 5 2 0 0 5
Test 5
Nie uruchomiono4 0 -1 0 0
-1 0 0 0 -1 0 0
Test 6
Nie uruchomiono6 0 0 0 0 0 4
4 0 0 0 0 0 4