Zadanie 1

Proszę zaimplementować poniższą procedurę:
1) zdefiniować trzy funkcje na wektorze (2D) składające się z przeskalowania o 1/2 i translacji o dowolny wektor, np:
(Subscript[f, 1])(x)=(x/2)+(Subscript[v, 1]) gdzie (Subscript[v, 1])=(0,1) a x=((Subscript[x, 1]),(Subscript[x, 2]))
2) stworzyć listę, o długości n, w której każdy kolejny element powstawał przez zadziałanie funkcją losowo wybraną spośród trzech funkcji zdefiniowanych w pkt. 1), poczynając od punktu (Subscript[x, 0])=(0,0), np.
((Subscript[x, 0]),(Subscript[f, 1])((Subscript[x, 0])),(Subscript[f, 2])((Subscript[f, 1])((Subscript[x, 0]))),(Subscript[f, 1])((Subscript[f, 2])((Subscript[f, 1])((Subscript[x, 0])))), ...).

Innymi słowy, proszę utworzyć ciąg

(Subscript[x, n+1])=(Subscript[f, i])((Subscript[x, n])), gdzie i jest losowo wybierane przy każedj iteracji 

3) narysować wynik przy pomocy polecenia ListPlot.

Bardziej skomplikowane funkcje (przy pewnych założeniach) tworzą ciekawsze wzory, proszę n.p. spróbować dodać obroty do zbioru transformacji.

Pomocne funkcje:
ComposeList, RandomChoice, ListPlot, RotationMatrix

Zadanie 2

Napisz funkcję symulującą automat komórkowy. Funkcja powinna pobierać na wejściu listę zer i jedynek, zbiór reguł i liczbę kroków (n) do wykonania. Należy zacząć od napisania funkcji generującej kolejny krok symulacji, a potem użyć funkcji NestList aby wykonać n kroków. Pomocna może okazać się funkcja Partition postaci Partition[list,n,d,{(Subscript[k, L]),(Subscript[k, R])},x]. Do implementacji reguł ewolucji można użyć n.p. funkcji MemberQ lub Switch.

Proszę wypróbować regułę
110,100,011,001->1
111,101,010,000->0

i porównać z trójkątem Pascala modulo 2 (można utworzyć go n.p. przy użyciu funkcji Binomial i Table, ciekawym przykładem jest także użycie funkcji ListConvolve).

Zadanie 3

Proszę zaimplementować grę w życie Conway'a (najłatwiej zrobić to przy użyciu funkcji ListConvolve). Proszę napisać program, który znajduje wszystkie rozwiązania o zadanym okresie i ustalonym maksymalnym rozmiarze.