PPPD MAT 2023 Kol2

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

1 2 3 4 Σ

Nazwisko i imię: Nr indeksu:


MiNI/MAT+MAD/PPPD/2023–2024/Kolokwium-IIA (5) (5) (5) (5) (20)

Grupa ćwiczeniowa: MDEN312 MDĘB210 MSN212 MW211

Zadanie IIA1. (5 p.) W klasie DoblyLinkedList (dwukierunkowa lista wiązana) dopisz metodę remove front(self,
i), która usunie z listy i-ty od początku element (licząc od głowy listy, startując od 0) i zwróci jego wartość
(wartość pola data usuniętego elementu).
Jeżeli w liście nie istnieje i-ty element należy wyrzucić wyjątek.

class DoublyLinkedList:
’’’ Implementuje dwukierunkowa liste wiazana’’’
__slots__ = ["head", "tail"]
class Node:
’’’ Klasa wewnetrzna, wezel listy’’’
__slots__ = ["data", "rev", "next"]
def __init__(self, data, prev, next):
self.data = data
self.prev = prev
self.next = next

def __init__(self):
self.head = self.tail = None

def pop_front(self): # zdefiniowana, można z niej korzystać


...

def pop_back(self): # zdefiniowana, można z niej korzystać


...

Kod rozwiązania wraz z komentarzami:


Zadanie IIA2. (5 p.)
Niech M będzie macierzą wypełnioną wartościami logicznymi (True lub False). Przez pusty kwadrat w takiej
macierzy rozumiemy kwadratowy fragment wypełniony wartościami False (formalnie: przedziały [x, x + k) i
[y, y + k) takie, że dla każdego i z przedziału [x, x + k) oraz j z przedziału [y, y + k), M [i][j] ma wartość False).
Napisz funkcję największy pusty kwadrat, która jako argument przyjmie macierz wartości logicznych i jako
wynik zwróci długość boku największego pustego kwadratu w tej macierzy.

Kod rozwiązania wraz z komentarzami:


Nazwisko i imię: Nr indeksu:

Zadanie IIA3. (5 p.)


Napisz funkcję leniwa macierz(p), która przyjmie listę p 3-elementowych list postaci [i, j, v] oznacza-
jących niezerowe elementy pewnej macierzy A w taki sposób, że Aij = v dla każdych z tych i, j, v. Pozostałe
elementy A są zerami.
Funkcja powinna zwrócić listę wierszy macierzy A o indeksach od 0 do w, gdzie w to największy indeks nie-
zerowego wiersza macierzy A. Dodatkowo w każdym zwracanym wierszu powinny się znajdować tylko elementy
o indeksach od 0 do k, gdzie k to największy indeks niezerowego elementu w tym wierszu.
Indeksy wierszy i kolumn są liczone od 0.
Nie musisz sprawdzać poprawności argumentów.
Na przykład dla:
p = [
[2, 3, 4],
[2, 0, 3],
[0, 2, 5],
[3, 0, 1],
[0, 1, 2]
]
funkcja zwraca listę:
[
[0, 2, 5],
[],
[3, 0, 0, 4],
[1]
]

Kod rozwiązania wraz z komentarzami:


Zadanie IIA4. (5 p.)
Stwórz klasę AnkhMorpork, reprezentującą multigatunkowe miasto zamieszkałe przez ludzi, krasnoludy
i trolle. Konstruktor klasy powinien przyjmować trzy liczby nieujemne typu int, odpowiadające liczebności
kolejno ludzi, krasnoludów i trolli. Dodatkowo powinien ustawiać parametr stan miasta typu str, który jest
określany na podstawie wartości bezwzględnej różnicy procentowego udziału krasnoludów i trolli w całkowitej
populacji miasta. Jeśli stosunek ten przekracza 0.2, stan miasta ustawiany jest na ”burdy”, wpp. na ”spokój”.
Klasa powinna również umożliwiać dodawanie do siebie obiektów tej samej klasy, tworząc nowy obiekt, w którym
liczba mieszkańców jest sumą populacji dodawanych obiektów (w obrębie każdego gatunku). Wywołanie funkcji
print na obiekcie klasy powinno wyświetlać liczbę mieszkańców każdego gatunku oraz aktualny stan miasta
(patrz Przykład). Nie trzeba sprawdzać poprawności argumentów.

Przykład:
miasto1 = AnkhMorpork(100, 40, 60)
print(miasto1)
# Populacja Ankh-Morpork: Ludzie: 100, Krasnoludy: 40, Trolle: 60. Stan miasta: spokój
miasto2 = AnkhMorpork(80, 120, 0)
nowe_miasto = miasto1 + miasto2
print(nowe_miasto)
# Populacja Ankh-Morpork: Ludzie: 180, Krasnoludy: 160, Trolle: 60. Stan miasta: burdy

Kod rozwiązania wraz z komentarzami:


Nazwisko i imię: Nr indeksu:

(brudnopis)
1 2 3 4 Σ
Nazwisko i imię: Nr indeksu:
MiNI/MAT+MAD/PPPD/2022–2023/Kolokwium-IIB (5) (5) (5) (5) (20)

Grupa ćwiczeniowa: MDEN312 MDĘB210 MSN212 MW211

Zadanie IIB1. (5 p.)


Niech M będzie macierzą wypełnioną wartościami logicznymi (True lub False). Przez pełny kwadrat w takiej
macierzy rozumiemy kwadratowy fragment wypełniony wartościami True (formalnie: przedziały [x, x + k) i
[y, y + k) takie, że dla każdego i z przedziału [x, x + k) oraz j z przedziału [y, y + k), M [i][j] ma wartość True).
Napisz funkcję największy pelny kwadrat, która jako argument przyjmie macierz wartości logicznych i jako
wynik zwróci długość boku największego pełnego kwadratu w tej macierzy.

Kod rozwiązania wraz z komentarzami:


Zadanie IIB2. (5 p.)
Napisz funkcję leniwa macierz(a, b, v), która przyjmie trzy listy takiej samej długości n. Opisują one
pewną macierz A w taki sposób, że: Aak bk = vk dla k = 0, . . . , n, a pozostałe elementy A są zerami.
Funkcja powinna zwrócić listę wierszy macierzy A o indeksach od 0 do w, gdzie w to największy indeks nie-
zerowego wiersza macierzy A. Dodatkowo w każdym zwracanym wierszu powinny się znajdować tylko elementy
o indeksach od 0 do k, gdzie k to największy indeks niezerowego elementu w tym wierszu.
Indeksy wierszy i kolumn są liczone od 0.
Nie musisz sprawdzać poprawności argumentów.
Na przykład dla:
a = [2, 2, 0, 3, 0]
b = [3, 0, 2, 0, 1]
v = [4, 3, 5, 1, 2]
funkcja zwraca listę:
[
[0, 2, 5],
[],
[3, 0, 0, 4],
[1]
]

Kod rozwiązania wraz z komentarzami:


Nazwisko i imię: Nr indeksu:

Zadanie IIB3. (5 p.)


Stwórz klasę AnkhMorpork, reprezentującą multigatunkowe miasto zamieszkałe przez ludzi, krasnoludy
i trolle. Konstruktor klasy powinien przyjmować listę 3-elementową, której elementy to liczby typu float z
zakresu 0, 1 sumujące się do 1, reprezentujące procentowy udział ludzi, krasnoludów i trolli w populacji miasta
oraz liczbę typu int określającą całkowitą liczbę mieszkańców miasta. Dodatkowo powinien ustawiać parametr
stan miasta typu str, który jest określany na podstawie liczebności poszczególnych podpopulacji. Jeśli wartość
bezwzględna z różnicy liczby krasnoludów i trolli przekracza 200, stan miasta ustawiany jest na ”burdy”, wpp.
na ”spokó”. Klasa powinna również umożliwiać dodawanie do siebie obiektów tej samej klasy, tworząc nowy
obiekt, w którym liczba mieszkańców jest sumą populacji dodawanych obiektów (w obrębie każdego gatunku).
Wywołanie funkcji print na obiekcie klasy powinno wyświetlać skład populacji miasta oraz jego aktualny stan
(patrz Przykład). Nie trzeba sprawdzać poprawności argumentów.

Przykład:
miasto1 = AnkhMorpork([0.5, 0.3, 0.2], 1000)
print(miasto1) # Populacja Ankh-Morpork: Ludzie: 0.5, Krasnoludy: 0.3, Trolle: 0.2. Stan miasta: spokój

miasto2 = AnkhMorpork([0.7, 0.0, 0.3], 1500)


nowe_miasto = miasto1 + miasto2
print(nowe_miasto)
# Populacja Ankh-Morpork: Ludzie: 0.62, Krasnoludy: 0.12, Trolle: 0.26. Stan miasta: burdy

Kod rozwiązania wraz z komentarzami i wyprowadzonym wzorem na postać wyrazów ciągu:


Zadanie IIB4. (5 p.) W klasie DoblyLinkedList (dwukierunkowa lista wiązana) dopisz metodę remove back(self,
i), która usunie z listy i-ty od końca element (licząc od ogona listy, startując od 0) i zwróci jego wartość (wartość
pola data usuniętego elementu).
Jeżeli w liście nie istnieje i-ty element należy wyrzucić wyjątek.

class DoublyLinkedList:
’’’ Implementuje dwukierunkowa liste wiazana’’’
__slots__ = ["head", "tail"]
class Node:
’’’ Klasa wewnetrzna, wezel listy’’’
__slots__ = ["data", "rev", "next"]
def __init__(self, data, prev, next):
self.data = data
self.prev = prev
self.next = next

def __init__(self):
self.head = self.tail = None

def pop_front(self): # zdefiniowana, można z niej korzystać


...

def pop_back(self): # zdefiniowana, można z niej korzystać


...

Kod rozwiązania wraz z komentarzami:


Nazwisko i imię: Nr indeksu:

(brudnopis)

You might also like