Zestaw A-1: Oddajemy tylko źródła programów (pliki o rozszerzeniach.adb i.ads)!!! Zad. 1: Napisać pakiet rodzajowy udostępniający: typ Sznur będący dynamiczną listą łączoną, której elementy przechowują wartości dowolnego typu T; procedurę Wypisz wypisującą zawartość sznura będącego parametrem; procedurę Wstaw wstawiającą do sznura podanego jako parametr element zawierający wartość typu T podaną jako parametr tak, aby sznur był uporządkowany nierosnąco (zakładając, że sznur wejściowy jest już uporządkowany w taki sposób); procedurę UsunCiagi usuwającą ze sznura podanego jako parametr ciągi sąsiednich elementów sznura w następujący sposób: usuwamy M elementów sznura (lub tyle ile jest, gdy jest mniej), następnie omijamy dwa elementy, usuwamy kolejnych M elementów, pozostawiamy dwa, itd. (M jest liczbą całkowitą dodatnią będącą parametrem procedury). Pamięć zajmowana przez usuwane elementy ma zostać zwolniona, procedura nie może używać tablic ani pomocniczych sznurów; oraz program konkretyzujący ten pakiet dla typu integer i testujący działanie pakietu poprzez pobranie sznura liczb całkowitych (procedura Wstaw; użytkownik podaje liczby które mają być wstawione do sznura i decyduje o zakończeniu podawania), wypisanie jego zawartości (procedura Wypisz; przykład: dla zestawu liczb wejściowych 1,3,2,1,3,3,2,4,3,1,1 sznur uzyskuje postać 4,3,3,3,3,2,2,1,1,1,1), a następnie, po pobraniu od użytkownika wartości M, usunięcie w sznurze ciągów M elementów, z pozostawieniem dwóch elementów między kolejnymi ciągami (procedura UsunCiagi) i ponowne wypisanie jego zawartości (przykładowo dla M=3 sznur 4,3,3,3,3,2,2,1,1,1,1 uzyska postać 3,3,1,1). Zad. 2: Rozszerzyć pakiet z zad.1 o procedurę Obetnij, która modyfikuje sznur podany jako parametr poprzez redukcję grup sąsiednich elementów przechowujących te same wartości tak, aby nie zawierały więcej niż N elementów (gdzie N jest liczbą całkowitą dodatnią będącą parametrem procedury). Usuwane mają być ostatnie elementy w grupach. Pamięć zajmowana przez usuwane elementy ma zostać zwolniona. Przykład (dla sznura przechowującego liczby całkowite): dla N=2 sznur 7,7,7,6,5,5,3,3,3,3,3,2,1 ma zostać przekształcony do postaci 7,7,6,5,5,3,3,2,1, natomiast ten sam sznur dla N=1 przyjmie postać 7,6,5,3,2,1. Procedura nie może używać tablic ani pomocniczych sznurów. Wykorzystać procedurę w programie testującym. Zad. 3: Rozszerzyć pakiet z zad.1 o procedurę PrzepnijRowne o dwóch parametrach S1, S2 będących sznurami, modyfikującą oba sznury poprzez przepięcie między nimi elementów przechowujących wartości, które występują w drugim ze sznurów, w następujący sposób: dla każdej wartości występującej w obu sznurach sprawdzamy liczbę jej wystąpień w każdym ze sznurów i ze sznura o mniejszej liczbie wystąpień przepinamy wszystkie elementy o tej wartości na koniec drugiego sznura (w przypadku tej samej liczności zawsze przenosimy do sznura S1), elementy przechowujące wartości bez pary nie są przenoszone (przykład, dla sznurów przechowujących liczby całkowite: dla S1=7,7,5,5,4,4,3,2,2,1 i S2=6,5,4,4,4,2,1 wynikiem będzie S1=7,7,5,5,3,2,2,1,5,2,1 i S2=6,4,4,4,4,4, dla S1=2,2,1,0 i S2=2,1,1,1,-1 wynikiem będzie S1=2,2,0,2 i S2=1,1,1,-1,1). Procedura nie może wykorzystywać tablic ani sznurów pomocniczych. Wykorzystać procedurę w programie testującym.
Zestaw A-3: Oddajemy tylko źródła programów (pliki o rozszerzeniach.adb i.ads)!!! Zad. 1: Napisać pakiet rodzajowy udostępniający: typ Sznur będący dynamiczną listą łączoną, której elementy przechowują wartości dowolnego typu T; procedurę Wypisz wypisującą zawartość sznura będącego parametrem; procedurę Wstaw dodającą na końcu sznura podanego jako parametr element zawierający wartość typu T podaną jako parametr; procedurę Usun rozpatrującą rozłączne trójki sąsiednich elementów sznura i usuwającą największy z elementów trójki, jeżeli jest ona różnowartościowa, albo całą trójkę jeśli wszystkie jej elementy są równe (w pozostałych przypadkach trójka pozostaje bez zmiany). Jeżeli sznur ma długość niepodzielną przez 3, końcowe elementy (niewchodzące w skład żadnej trójki) nie są usuwane. Pamięć zajmowana przez usuwane elementy ma zostać zwolniona, procedura nie może używać tablic ani pomocniczych sznurów; oraz program konkretyzujący ten pakiet dla typu integer i testujący działanie pakietu poprzez pobranie sznura liczb całkowitych (procedura Wstaw; użytkownik podaje liczby które mają być wstawione do sznura i decyduje o zakończeniu podawania), wypisanie jego zawartości (procedura Wypisz; przykład: dla zestawu liczb wejściowych 4,7,5,1,6,6,3,3,3,9,1 sznur uzyskuje postać 4,7,5,1,6,6,3,3,3,9,1), a następnie zmodyfikowanie w sznurze rozłącznych trójek elementów (procedura Usun) i ponowne wypisanie jego zawartości (przykładowo sznur 4,7,5,1,6,6,3,3,3,9,1 uzyska postać 4,5,1,6,6,9,1, natomiast sznur 2,2,2,3,3,3 stanie się pusty). Zad. 2: Rozszerzyć pakiet z zad.1 o procedurę PrzeniesSkrajne która modyfikuje sznur podany jako parametr poprzez przeniesienie (przepięcie) w środek sznura M jego elementów końcowych i M elementów początkowych, przy czym przepinanie to wykonywane jest tak, że elementy z początku umieszczane są przed środkiem z zachowaniem ich kolejności, a elementy z końca - za środkiem, również z zachowaniem ich kolejności (przykład, dla sznurów przechowujących liczby całkowite: dla M=4 sznur 1,2,3,4,5,6,8,7,8,9,1,2 zostanie przekształcony do postaci 5,6,1,2,3,4,8,9,1,2,8,7, a sznur 1,2,3,4,5,6,7,8,9,1,2 do postaci 5,1,2,3,4,6, 8,9,1,2,7. W przypadku gdy długość sznura jest parzysta i niewiększa niż 2M albo nieparzysta i niewiększa niż 2M+1, przepinanie nie jest wykonywane. Zad. 3: Rozszerzyć pakiet z zad.1 o procedurę PrzepnijRowne o dwóch parametrach S1, S2 będących sznurami, modyfikującą oba sznury poprzez przepięcie między nimi elementów przechowujących wartości, które występują w drugim ze sznurów, w następujący sposób: dla każdej wartości występującej w obu sznurach sprawdzamy liczbę jej wystąpień w każdym ze sznurów i ze sznura o mniejszej liczbie wystąpień przepinamy wszystkie elementy o tej wartości do drugiego sznura tuż za pierwszym elementem o tej wartości (w przypadku tej samej liczności zawsze przenosimy do sznura S1), elementy przechowujące wartości bez pary nie są przenoszone (przykład dla sznurów przechowujących liczby całkowite: dla S1=1,2,7,7,1,3,4,3,4 i S2=3,2,5,3,6,3,4,8,6 wynikiem będzie S1=1,2,2,7,7,1,4,4,4 i S2=3,3,3,5,3,6,3,8,6, dla S1=1,2,2 i S2=2,1,1,1 wynikiem będzie S1=2,2,2 i S2=1,1,1,1). Procedura nie może wykorzystywać tablic ani sznurów pomocniczych. Wykorzystać procedurę w programie testującym.
Zestaw P-1: funkcję wstaw wstawiającą do sznura element zawierający wartość podaną jako parametr tak, aby sznur był uporządkowany nierosnąco (zakładając, że dany sznur jest na wejściu uporządkowany w taki sposób); funkcję usunciagi usuwającą ze sznura ciągi jego sąsiednich elementów w następujący sposób: usuwamy M elementów sznura (lub tyle ile jest, gdy jest mniej), następnie omijamy dwa elementy, usuwamy kolejnych M elementów, pozostawiamy dwa, itd. (M jest liczbą całkowitą dodatnią będącą parametrem funkcji). Pamięć zajmowana przez usuwane elementy ma zostać zwolniona, funkcja nie może używać pomocniczych sznurów ani struktur danych dostępnych w Pythonie (list, zbiorów, słowników itp); wejściowych 1,3,2,1,3,3,2,4,3,1,1 sznur uzyskuje postać 4,3,3,3,3,2,2,1,1,1,1), a następnie, po pobraniu od użytkownika wartości M, usunięcie w sznurze ciągów M elementów, z pozostawieniem dwóch elementów między kolejnymi ciągami (procedura usunciagi) i ponowne wypisanie jego zawartości (przykładowo dla M=3 sznur 4,3,3,3,3,2,2,1,1,1,1 uzyska postać 3,3,1,1). Zad. 2: Rozszerzyć klasę z zad.1 o funkcję obetnij, która modyfikuje sznur poprzez redukcję grup sąsiednich elementów przechowujących te same wartości tak, aby nie zawierały więcej niż N elementów (gdzie N jest liczbą całkowitą dodatnią będącą parametrem funkcji). Usuwane mają być ostatnie elementy w grupach. Pamięć zajmowana przez usuwane elementy ma zostać zwolniona. Przykład (dla sznura przechowującego liczby całkowite): dla N=2 sznur 7,7,7,6,5,5,3,3,3,3,3,2,1 ma zostać przekształcony do postaci 7,7,6,5,5,3,3,2,1, natomiast ten sam sznur dla N=1 przyjmie postać 7,6,5,3,2,1. Funkcja nie może używać pomocniczych sznurów ani struktur danych dostępnych w Pythonie (list, zbiorów, słowników itp). Wykorzystać funkcję w programie testującym. sznurach sprawdzamy liczbę jej wystąpień w każdym ze sznurów i ze sznura o mniejszej liczbie wystąpień przepinamy wszystkie elementy o tej wartości na koniec drugiego sznura (w przypadku tej samej liczności zawsze przenosimy do tego sznura (self)), elementy przechowujące wartości bez pary nie są przenoszone (przykład, dla sznurów przechowujących liczby całkowite: dla self =7,7,5,5,4,4,3,2,2,1 i other =6,5,4,4,4,2,1 wynikiem będzie self =7,7,5,5,3,2,2,1,5,2,1 i other =6,4,4,4,4,4, dla self =2,2,1,0 i other =2,1,1,1,-1 wynikiem będzie self =2,2,0,2 i other =1,1,1,-1,1). Funkcja nie może używać pomocniczych sznurów ani struktur danych dostępnych w Pythonie (list, zbiorów, słowników itp). Wykorzystać funkcję w programie testującym.
Zestaw P-2: funkcję wstaw dodającą na końcu sznura element zawierający wartość podaną jako parametr; funkcję usunzdodatkiem rozpatrującą kolejne elementy sznura i usuwającą rozpatrywany element i dwa następne leżące za nim jeśli ten element jest podzielny albo przez K, albo przez L (tj. przez dokładnie jedną z nich, lub przez obie gdy K=L), gdzie K i L są liczbami całkowitymi dodatnimi będącymi parametrami funkcji (podzielność elementów leżących za rozpatrywanym nie ma znaczenia; jeśli za rozpatrywanym elementem znajdują się mniej niż 2 elementy, to usuwamy tyle elementów ile jest). Pamięć zajmowana przez usunięte elementy ma zostać zwolniona, funkcja nie może używać pomocniczych sznurów ani struktur danych dostępnych w Pythonie (list, zbiorów, słowników itp); wejściowych 7,4,5,7,6,3,9,2,4 sznur uzyskuje postać 7,4,5,7,6,3,9,2,4), usunięcie elementów wg podzielności przez K i L po uprzednim pobraniu wartości K i L (funkcja usunzdodatkiem) i wypisanie pozostałego sznura (dla sznura 7,4,5,7,6,3,9,2,4 oraz K=2 i L=3 wypisany zostanie sznur 7,6, dla sznura 7,4,5,6,3,7,9,2,1 i K=L=2 sznur 7,3,7,9). Zad. 2: Rozszerzyć klasę z zad.1 o funkcję odwroctrojki, która modyfikuje sznur poprzez odwrócenie kolejności elementów we wszystkich rozłącznych trójkach sąsiednich elementów sznura o średniej wartości większej od średniej wszystkich elementów w sznurze (trójki wybierane są tak, że pierwszy element sznura jest pierwszym elementem pierwszej trójki). Przykład (dla sznura przechowującego liczby całkowite): sznur 5,8,6,6,4,5,2,5,9,3 ma zostać przekształcony do postaci 6,8,5,6,4,5,9,5,2,3. Funkcja nie może używać pomocniczych sznurów ani struktur danych dostępnych w Pythonie (list, zbiorów, słowników itp.). Wykorzystać funkcję w programie testującym. sznurach sprawdzamy liczbę jej wystąpień w każdym ze sznurów i ze sznura o mniejszej liczbie wystąpień przepinamy wszystkie elementy o tej wartości do drugiego sznura tuż za pierwszym elementem o tej wartości (w przypadku tej samej liczności zawsze przenosimy do tego sznura (self)), elementy przechowujące wartości bez pary nie są przenoszone (przykład, dla sznurów przechowujących liczby całkowite: dla self =1,2,7,7,1,3,4,3,4 i other =3,2,5,3,6,3,4,8,6 wynikiem będzie self =1,2,2,7,7,1,4,4,4 i other =3,3,3,5,3,6,3,8,6, dla self =1,2,2 i other =2,1,1,1 wynikiem będzie self =2,2,2 i other =1,1,1,1). Funkcja nie może używać pomocniczych sznurów ani struktur danych dostępnych w Pythonie (list, zbiorów, słowników itp). Wykorzystać funkcję w programie testującym.
Zestaw P-3: funkcję wstaw dodającą na końcu sznura element zawierający wartość podaną jako parametr; funkcję usun rozpatrującą rozłączne trójki sąsiednich elementów sznura i usuwającą największy z elementów trójki, jeżeli jest ona różnowartościowa, albo całą trójkę jeśli wszystkie jej elementy są równe (w pozostałych przypadkach trójka pozostaje bez zmiany). Jeżeli sznur ma długość niepodzielną przez 3, końcowe elementy (niewchodzące w skład żadnej trójki) nie są usuwane. Pamięć zajmowana przez usuwane elementy ma zostać zwolniona, funkcja nie może używać pomocniczych sznurów ani struktur danych dostępnych w Pythonie (list, zbiorów, słowników itp); wejściowych 4,7,5,1,6,6,3,3,3,9,1 sznur uzyskuje postać 4,7,5,1,6,6,3,3,3,9,1), a następnie zmodyfikowanie w sznurze rozłącznych trójek elementów (funkcja usun) i ponowne wypisanie jego zawartości (przykładowo sznur 4,7,5,1,6,6,3,3,3,9,1 uzyska postać 4,5,1,6,6,9,1, natomiast sznur 2,2,2,3,3,3 stanie się pusty). Zad. 2: Rozszerzyć klasę z zad.1 o funkcję przeniesskrajne która modyfikuje sznur poprzez przeniesienie (przepięcie) w środek sznura M jego elementów końcowych i M elementów początkowych, przy czym przepinanie to wykonywane jest tak, że elementy z początku umieszczane są przed środkiem z zachowaniem ich kolejności, a elementy z końca - za środkiem, również z zachowaniem ich kolejności (przykład, dla sznurów przechowujących liczby całkowite: dla M=4 sznur 1,2,3,4,5,6,8,7,8,9,1,2 zostanie przekształcony do postaci 5,6,1,2,3,4,8,9,1,2,8,7, a sznur 1,2,3,4,5,6,7,8,9,1,2 do postaci 5,1,2,3,4,6, 8,9,1,2,7. W przypadku gdy długość sznura jest parzysta i niewiększa niż 2M albo nieparzysta i niewiększa niż 2M+1, przepinanie nie jest wykonywane. F unkcja nie może używać pomocniczych sznurów ani struktur danych dostępnych w Pythonie (list, zbiorów, słowników itp.). Wykorzystać funkcję w programie testującym. sznurach sprawdzamy liczbę jej wystąpień w każdym ze sznurów i ze sznura o mniejszej liczbie wystąpień przepinamy wszystkie elementy o tej wartości do drugiego sznura tuż za pierwszym elementem o tej wartości (w przypadku tej samej liczności zawsze przenosimy do tego sznura (self)), elementy przechowujące wartości bez pary nie są przenoszone (przykład, dla sznurów przechowującyh liczby całkowite: dla self =1,2,7,7,1,3,4,3,4 i other =3,2,5,3,6,3,4,8,6 wynikiem będzie self =1,2,2,7,7,1,4,4,4 i other =3,3,3,5,3,6,3,8,6, dla self =1,2,2 i other =2,1,1,1 wynikiem będzie self =2,2,2 i other =1,1,1,1). Funkcja nie może używać pomocniczych sznurów ani struktur danych dostępnych w Pythonie (list, zbiorów, słowników itp). Wykorzystać funkcję w programie testującym.
Zestaw P-4: funkcję wstaw dodającą na końcu sznura element zawierający wartość podaną jako parametr; funkcję usun usuwającą ze sznura wszystkie elementy o wartościach większych niż średnia z elementów sznura przechowujących wartość minimalną lub maksymalną w tym sznurze. Pamięć zajmowana przez usuwane elementy ma zostać zwolniona, funkcja nie może używać pomocniczych sznurów ani struktur danych dostępnych w Pythonie (list, zbiorów, słowników itp); wejściowych 4,7,5,1,6,6,7,1,3,2,9,1,1 sznur uzyskuje postać 4,7,5,1,6,6,7,1,3,2,9,1,1), a następnie usunięcie elementów przechowujących wartości większe niż średnia z elementów o najmniejszej lub największej wartości w sznurze (przykład: sznur 4,7,5,1,6,6,7,1,3,2,9,1,1 uzyska postać 1,1,2,1,1, sznur 9,9,1,1,4,4,5,4,7,2 zostanie zredukowany do 1,1,4,4,5,4,2. Zad. 2: Rozszerzyć klasę z zad.1 o funkcję przepnijtrojki, która modyfikuje sznur poprzez przepięcie na koniec sznura wszystkich rozłącznych trójek o sumie większej od liczby całkowitej N będącej parametrem funkcji. Jeżeli sznur ma długość niepodzielną przez 3, końcowe elementy (niewchodzące w skład żadnej trójki) nie są przenoszone. Przepinanie trójek ma zachować ich kolejność w oryginalnym sznurze, ale porządek elementów w trójce ma zostać zmieniony tak aby wartości w trójce były uporządkowane niemalejąco. Przykład (dla sznura przechowującego liczby całkowite): w przypadku sznura 1,7,9,3,0,1,5,5,2,4,4,1,2,9,3,2,3 i N=10 dostaniemy wynik 3,0,1,4,4,1,2,3,1,7,9,2,5,5,2,3,9, dla N=100 powyższy sznur pozostanie bez zmiany, dla N=1 uzyska postać 2,3,1,7,9,0,1,3,2,5,5,1,4,4,2,3,9. Funkcja nie może używać pomocniczych sznurów ani struktur danych dostępnych w Pythonie (list, zbiorów, słowników itp.). Wykorzystać funkcję w programie testującym. sznurach sprawdzamy liczbę jej wystąpień w każdym ze sznurów i ze sznura o mniejszej liczbie wystąpień przepinamy wszystkie elementy o tej wartości do drugiego sznura, umieszczając je tuż za ostatnim elementem o tej wartości (w przypadku tej samej liczności zawsze przenosimy do tego sznura (self)), elementy przechowujące wartości bez pary nie są przenoszone (przykład, dla sznurów przechowujących liczby całkowite: dla self =1,2,7,7,1,3,4,3,4 i other =3,2,5,3,6,3,4,8,6 wynikiem będzie self =1,2,2,7,7,1,4,4,4 i other =3,5,3,6,3,3,3,8,6; dla self =1,2,2 i other =2,1,1,1 wynikiem będzie self =2,2,2 i other =1,1,1,1). Funkcja nie może używać pomocniczych sznurów ani struktur danych dostępnych w Pythonie (list, zbiorów, słowników itp). Wykorzystać funkcję w programie testującym.
Zestaw P-5: funkcję wstaw dodającą na końcu sznura podanego jako parametr element zawierający wartość podaną jako parametr; funkcję usunciagi usuwającą elementy ze sznura w następujący sposób: usuwamy najkrótszy ciąg elementów zaczynający się początkiem sznura i taki, że iloczyn wartości w ciągu podzielony przez jego długość przekracza liczbę całkowitą dodatnią N będącą parametrem funkcji, następnie pomijamy (przeskakujemy) K elementów (gdzie K jest liczbą całkowitą dodatnią będącą kolejnym parametrem funkcji), znów znajdujemy najkrótszy ciąg elementów o iloczynie podzielonym przez długość ciągu przekraczającym N i go usuwamy, znów przeskakujemy K elementów itd. Pamięć zajmowana przez usuwane elementy ma zostać zwolniona, funkcja nie może używać pomocniczych sznurów ani struktur danych dostępnych w Pythonie (list, zbiorów, słowników itp); wejściowych 4,7,5,1,6,6,7,1,3,2,9,1,1 sznur uzyskuje postać 4,7,5,1,6,6,7,1,3,2,9,1,1), a następnie usunięcie ciągów o iloczynie podzielonym przez ich długość przekraczającym N z pominięciem K elementów między nimi (przykład: dla N=10 i K=2 sznur 4,7,5,1,6,6,7,1,3,2,9,1,1,20,8 uzyska postać 5,1,7,1,1,1,8). Zad. 2: Rozszerzyć klasę z zad.1 o funkcję przepnijtrojki, która modyfikuje sznur poprzez przepięcie na początek sznura wszystkich rozłącznych trójek sąsiednich elementów takich, że średnia z wartości trójki jest większa od N (gdzie N jest liczbą całkowitą dodatnią będącą parametrem funkcji, a rozłączne trójki są wybierane tak, że pierwszy element sznura jest pierwszym elementem pierwszej trójki). Przepinanie ma być wykonywane tak, aby kolejność przepinanych trójek i kolejność elementów w każdej trojce została zachowana. Przykład (dla sznura przechowującego liczby całkowite): dla N=5 sznur 3,6,6,4,7,5,7,3,2,9,7,1,4,2 ma zostać przekształcony do postaci 4,7,5,9,7,1,3,6,6,7,3,2,4,2. Funkcja nie może używać pomocniczych sznurów ani struktur danych dostępnych w Pythonie (list, zbiorów, słowników itp.). Wykorzystać funkcję w programie testującym. sznurach sprawdzamy liczbę jej wystąpień w każdym ze sznurów i ze sznura o większej liczbie wystąpień przepinamy wszystkie elementy o tej wartości do drugiego sznura, umieszczając je z przodu (na początku) sznura zachowując przy tym kolejność przenoszenia, tzn. na początku sznura mają się znaleźć wartości przenoszone jako pierwsze, za nimi przenoszone jako drugie, itd. W przypadku tej samej liczności zawsze przenosimy do przenosimy do tego sznura (self), elementy przechowujące wartości bez pary nie są przenoszone (przykład, dla sznurów przechowujących liczby całkowite: dla self =1,2,7,7,1,3,4,3,4 i other =3,2,5,3,6,3,4,8,6 wynikiem będzie self =2,3,3,3,1,2,7,7,1,3,3 i other =4,4,5,6,4,8,6 albo self =3,3,3,2,1,2,7,7,1,3,3 i other =4,,4,5,6,4,8,6 (zależnie od przyjętego algorytmu), dla self =1,2,2 i other =2,1,1,1 wynikiem będzie self =1,1,1,1 i other =2,2,2). Funkcja nie może używać pomocniczych sznurów ani struktur danych dostępnych w Pythonie (list, zbiorów, słowników itp.). Wykorzystać funkcję w programie testującym.
Zestaw P-6: funkcję wstaw wstawiającą do sznura element zawierający wartość podaną jako parametr tak, aby sznur był uporządkowany niemalejąco (zakładając, że sznur wejściowy jest już uporządkowany w taki sposób); funkcję usun rozpatrującą rozłączne trójki elementów sznura i usuwającą całą trójkę jeśli jej środkowy element jest podzielny przez K (gdzie K jest liczbą całkowitą dodatnią będącą parametrem funkcji), albo ostatni element trójki jeśli jej środkowy element nie jest podzielny przez K. W przypadku sznura o długości nie podzielnej przez 3 końcowe elementy (nie wchodzące w skład żadnej trójki) nie są modyfikowane. Pamięć zajmowana przez usuwane elementy ma zostać zwolniona, funkcja nie może używać pomocniczych sznurów ani struktur danych dostępnych w Pythonie (list, zbiorów, słowników itp); użytkownik podaje liczby które mają być wstawione do do sznura i decyduje o zakończeniu podawania), wypisanie jego zawartości (należy użyć standardowej funkcji print; przykład: dla zestawu liczb wejściowych 1,3,2,1,3,3,2,4,3,1,1 sznur uzyskuje postać 1,1,1,1,2,2,3,3,3,3,4), a następnie, po pobraniu od użtkownika wartości K, usunięcie w sznurze rozłącznych trójek elementów lub ostatnich elementów tych trójek (funkcja usun) i ponowne wypisanie jego zawartości (przykład: dla K=2 sznur 1,1,1,1,2,2,3,3,3,3,4 zostanie przekształcony do postaci 1,1,3,3,3,4, sznur 4,4,6,7,8,8,9,10,11 stanie się pusty). Zad. 2: Rozszerzyć klasę z zad.1 o funkcję przeniesskrajne która modyfikuje sznur poprzez przeniesienie (przepięcie) w środek sznura M jego elementów końcowych i M elementów początkowych, przy czym przepinanie to wykonywane jest tak że elementy z początku umieszczane są za środkiem z zachowaniem ich kolejności, a elementy z końca - przed środkiem z odwróceniem ich kolejności (przykład dla sznura przechowującego liczby całkowite: dla M=4 sznur 1,2,3,4,5,6,7,7,8,8,9,9 zostanie przekształcony do postaci,5,6,9,9,8,8,1,2,3,4,7,7 a sznur 1,2,3,4,5,6,7,8,9,10,11 do postaci 5,11,10,9,8,6,1,2,3,4,7. W przypadku gdy długość sznura jest parzysta i niewiększa niż 2M albo nieparzysta i niewiększa niż 2M+1, przepinanie nie jest wykonywane. Funkcja nie może używać pomocniczych sznurów ani struktur danych dostępnych w Pythonie (list, zbiorów, słowników itp.). Wykorzystać funkcję w programie testującym. sznurach sprawdzamy liczbę jej wystąpień w każdym ze sznurów i ze sznura o większej liczbie wystąpień przepinamy wszystkie elementy o tej wartości na koniec drugiego sznura (w przypadku tej samej liczności zawsze przenosimy do tego sznura (self)), elementy przechowujące wartości bez pary nie są przenoszone (przykład: dla self =1,1,3,3,4,4,5,6,6,7 i other =2,3,4,4,4,6,7 wynikiem będzie self =1,1,4,4,5,7,4,4,4,7 i other =2,3,6,3,3,6,6 dla self =0,0,1,2 i other =0,1,1,1,5 wynikiem będzie self =1,2,1,1,1 i other =0,5,0,0). Funkcja nie może używać pomocniczych sznurów ani struktur danych dostępnych w Pythonie (list, zbiorów, słowników itp.). Wykorzystać funkcję w programie testującym.