Upraszczanie bez skutków ubocznych

Zadanie 7 z 7 · rozdział 14Trudność: 1 z 3funkcjewielomianylistyskutki uboczne

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: k liczb 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 w i zmienna wspolczynniki w programie to ta sama lista. Dlatego poniższa funkcja zwraca dobry wynik, ale psuje listę wywołującego (druga linia wyjścia byłaby 3 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 i pierwszego niezerowego współczynnika i zwróć wycinek w[i:] — wycinek to nowa lista, a oryginał zostaje nietknięty.

Przykład

Wejście
5
0 0 3 0 1
Wyjście
3 0 1
0 0 3 0 1

Usuwamy tylko zera z początku — zero w środku zapisu (przy $x^1$) zostaje.

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 n jest podawany w dwóch liniach: najpierw liczba n, a w następnej linii n+1 liczb całkowitych a_n a_{n-1} ... a_0 oddzielonych spacjami.
  • Współczynniki są liczbami całkowitymi (mogą być ujemne). Dla n ≥ 1 współczynnik a_n jest 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.

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 uruchomiono
Wejście
3
0 0 0
Oczekiwane wyjście
0
0 0 0

Test 2

Nie uruchomiono
Wejście
1
7
Oczekiwane wyjście
7
7

Test 3

Nie uruchomiono
Wejście
1
0
Oczekiwane wyjście
0
0

Test 4

Nie uruchomiono
Wejście
4
2 0 0 5
Oczekiwane wyjście
2 0 0 5
2 0 0 5

Test 5

Nie uruchomiono
Wejście
4
0 -1 0 0
Oczekiwane wyjście
-1 0 0
0 -1 0 0

Test 6

Nie uruchomiono
Wejście
6
0 0 0 0 0 4
Oczekiwane wyjście
4
0 0 0 0 0 4
Uruchom z własnymi danymi