Zadania domowe:

Zadanie X1:

Zaimplementować grę w życie o planszy NxN (zadajemy po prostu zmienną na początku kodu).
Można używać (nieobowiązkowo) numpy. Wizualizacja - w konsoli X - zajęta klatka, O - pusta.
Zakładami, że poza granicami planszy zawsze jest pusto. Startowa plansza ma być losowo wypełniona.

https://pl.wikipedia.org/wiki/Gra_w_%C5%BCycie#Opis_regu.C5.82_gry

Zadanie X2

Rozszeżyć napisany wcześniej program. Niech teraz on przyjmuje parametry:

python3 zycie.py 10 plansza_początkowa.pgm plansza_końcowa.pgm

gdzie 10 - to ilość kroków symulacji pomiędzy planszą początkową a końcową.
Plansza_początkowa - plansza zdefiniowana w formacie .pgm (z którym już mieliście stycznośc)
plansza_końcowa - wynik 10 kroków symulacji gry w życie.

Dodatkowo jeżeli wywołamy program w taki sposób:
python3 zycie.py 10 plansza_końcowa.pgm

To zainincjuje się pole planszy 100x100 z losowym stanem początkowym, wykona się 10 kroków symulacji i zapisze się do plansza_końcowa.pgm

UWAGA: w PGM zakładamy że czarne pixle to komórka zajęta, a białe pixle to komórka pusta.

Zadanie X3

Napisać program który wczyta plik tekstowy w formie:

Maria Konopnikca 5552225
Ala Bohda 5552155
Jerzy Kiery 32325986

Który jest książką telefoniczną. Na zapytanie użytkownika (zapytać o działanie w input)
ma potrafić wydrukować wpisy posortowane po imieniu lub po nazwiskach. Dodatkowa akcja:
wyszukiwanie w imionach i nazwiskach - użytkownik wpisuje część imienia lub nazwiska i drukujemy mu na ekran
tylko te wpisy, które zawierają w sobie to co napisał użytkownik (niezależnie dużymi czy małymi literami)

Bonus mode: wyszukiwanie potrafi ignorować polskie znaki (np wpis "Łukasz Kac 546464" wypisze się przy wyszukiwaniu słowa "Lukasz"

Zadanie X4

Napisać generator haseł:
ma mieć 2 tryby - prosty do zapamiętania lub trudny.

Prosty ma generować pseudosłowa - pewne ciągi samogłosek - spółgłosek, które się da wymówić, długości 7-10 znaków (losowe).
Trudny ma generować zupełnie losowe hasła używając liter, cyfr i znaków interpunkcyjnych

Zadanie X5

Napisać grę - kółko i krzyżyk dla dwóch graczy. Pole ma być wizualizowane w następny sposób:


   |   |
 1 | 2 | 3 
   |   |
---+---+---
   |   |
 4 | 5 | O
   |   |
---+---+---
   |   |   
 7 | X | 9
   |   |
   
Gra gracz 1 (kółko), proszę wpisać numer pola:
>>>

Gra ma po kolei pytać kolejnego gracza o ruch i sama wykrywać warunek wygrania.


Zadanie X6

Dane do skopiowania do swojego programu: 

napis = '██╗    ██╗███████╗███████╗ ██████╗ ██╗  ██╗   ██╗ ██████╗██╗  ██╗    ███████╗██╗    ██╗██╗ █████╗ ████████╗\n██║    ██║██╔════╝██╔════╝██╔═══██╗██║  ╚██╗ ██╔╝██╔════╝██║  ██║    ██╔════╝██║    ██║██║██╔══██╗╚══██╔══╝\n██║ █╗ ██║█████╗  ███████╗██║   ██║██║   ╚████╔╝ ██║     ███████║    ███████╗██║ █╗ ██║██║███████║   ██║   \n██║███╗██║██╔══╝  ╚════██║██║   ██║██║    ╚██╔╝  ██║     ██╔══██║    ╚════██║██║███╗██║██║██╔══██║   ██║   \n╚███╔███╔╝███████╗███████║╚██████╔╝███████╗██║   ╚██████╗██║  ██║    ███████║╚███╔███╔╝██║██║  ██║   ██║   \n ╚══╝╚══╝ ╚══════╝╚══════╝ ╚═════╝ ╚══════╝╚═╝    ╚═════╝╚═╝  ╚═╝    ╚══════╝ ╚══╝╚══╝ ╚═╝╚═╝  ╚═╝   ╚═╝   \n                                                                                                           '

Używając numpy wygenerować animację falowania tego napisu (to jest napis który da się przechować w macierzy, jeśli poprawnie się go rozdzieli).
Podobnie jak faluje logo OCEAN tutaj: https://youtu.be/Q8UJQB-bNaU?t=7 tylko w pionie a nie poziomie.
Animować można drukująć pewną ilość nowych linii, następnie nasz pewien napis, następnie robić time.sleep(1/60) i drukować nowy napis.

Wskazówki:
numpy.roll - przesuwa macierz w osiach o ilość elementów
Można wygenerować przesuwającą się sinusoidę - która będzie wskazywała o ile należy przesunąć daną kolumnę.
Warto napisać program, który według pewnej listy/macierzy przesunięć kolumn, weźmie kopię macierz i przesunie kolejne jej kolumny do góry lub dołu o zadaną ilość wierszy.
Rekomenduję podany napis zachować w macierzy kilkukrotnie wyższej niż sam napis - by miał gdize falować

Zadanie X7

Wczytać plik 'EKG.txt', w nim jest zapis elektrokardiogramu. Każdy punkt to poziom sygnału w mikrowoltach, mierzone co 10 ms. (100 razy na sekundę).
Napisać program (najlepiej z logicznym podziałem na funkcje) rozpoznający pojedyncze uderzenie serca i mierzący tętno (Ilość uderzeń na minutę)
hint:
import pylab as pb
pb.figure()
pb.plot(listaliczb)
pb.figure()
pb.plot(drugalistaliczb)
pb.show()
hint2:
Piki tętna są rozpoznawalne w/g amplitudy - wystarczy zliczyć ile razy sygnał przekroczył jakąś wartość - najlepiej ją dobrać automatycznie.