Metoda Monte Carlo Ulama.

Rozważmy doświadczenie:
Losujemy punkt o współrzędnych rzeczywistych wewnątrz kwadratu o boku 2. Jakie jest prawdopodobieństwo, że wylosowany punkt znajdzie się wewnątrz koła wpisanego w ten kwadrat?
A – wylosowanie punktu wewnątrz koła

Jest to jednoczesnie częstość wystąpienia zdarzenia A tzn. jeśli powtórzymy nasze doświadczenie wielokrotnie, to stosunek liczby wystąpień zdarzenia A do liczby wysztkich powtórzeń oscyluje wokół liczby .
Napisz program, który zasymuluje częstość wystąpienia naszego zdarzenia A i na tej podstawie przybliżaj liczbę . Dokładność przybliżenia powinna zależeć od liczby powtórzeń doświadczenia.
Wskazówka:
Okrąg jest to zbiór punktów równoodległych od środka okręgu.
Z twierdzenia Pitagora mamy zależność: .
– równanie okręgu o środku w punkcie (0,0) i promieniu r.
– nierówność koła o środku w punkcie (0,0) i promieniu r.
Uwaga:
Jeśli będziesz losował współrzędne punktów spośród liczb całkowitych, rozwiążesz inne zadanie.

W tym przypadku łatwo zauważyć, że:

zachęcam do eksperymentów 🙂
Jeśli znasz wzory na pierwiastki równania kwadratowego, łatwo uzasadnisz, że:

Na podstawie tego wzoru napisz program, który przybliża pierwiastek z 2 z dokładnością do 15 miejsc po przecinku.
Zad. 13 b
Na podstawie obserwacji współczynników równania kwadratowego spróbuj wymyślić analogiczny wzór na pierwiastek z 3 i napisz odpowiedni program przybliżający pierwiastek z 3 z dokładnością podaną przez użytkownika.
Mamy tablicę liczb całkowitych o wymiarach 40×10. Separatorem liczb jest tabulacja.
1441	2117	634	171	4609	3033	827	2328	2732	9314
7847	6808	3120	3409	5147	8092	2701	5731	571	2112
2233	6884	2462	5324	6924	1037	7277	7560	8085	4875
1184	851	2486	7023	9251	8793	2351	8879	662	5585
8293	3194	7794	1139	9930	4990	3845	4388	2735	456
981	1504	2689	4130	2886	4832	2037	908	7104	7681
517	2935	9712	4022	6254	3646	2579	955	8197	1917
5872	1206	3560	3075	8175	3087	1069	685	5960	6328
6411	28	2301	8	5629	7569	8975	3291	7340	1448
2987	2238	9231	3222	9126	5679	9795	5638	8240	1318
4975	2665	8460	3368	9483	4340	9337	6740	994	2166
410	6983	71	4120	5770	8488	5788	9801	4642	1353
6425	1112	1388	545	8635	778	5184	6509	9634	7327
9009	6071	6010	1554	2817	687	6568	7844	2564	5016
1497	5958	107	9128	5975	7816	6873	8714	7328	8626
2773	859	5337	2301	283	2636	8920	6688	6831	1297
3652	4913	9260	2081	5699	4685	9465	3839	8968	9536
8393	7482	6123	4464	6591	7585	1788	4721	727	1530
720	8008	1907	5080	3360	6902	4183	6574	7417	2716
1621	1863	2218	858	4167	7845	1621	2585	6827	5279
5519	6367	9600	1076	1910	2553	1096	767	1235	7563
1193	1462	610	1220	9202	8361	6870	5934	7871	8791
4708	9075	8034	4677	2818	2480	3879	6982	1958	8017
5241	3422	2890	7606	4990	971	9758	7203	998	4143
1381	2316	3102	8325	737	8177	6457	8190	2864	858
2217	5787	969	2084	4769	9163	899	1988	3456	3313
5698	5331	1956	5880	5420	2763	7203	7440	3865	1237
5051	1387	4683	1767	1381	8201	8750	5779	697	7822
6301	6685	219	9928	4813	6614	8502	2714	7859	8668
9599	5676	1589	6232	2415	178	7388	2916	2413	4521
7407	2473	8391	9109	5505	6302	3468	953	7498	8517
4350	3221	8555	7118	1527	1860	4356	9464	250	3647
1803	2398	8126	7306	3364	7743	6629	3732	676	4896
874	2471	7371	6490	683	2874	7782	1967	4053	7126
8443	4659	993	3870	1651	1162	6731	6088	6412	1182
3461	1049	4980	7980	8814	3031	7358	3342	7663	3747
4177	7763	5487	3242	3178	4086	5625	6761	4335	8105
6522	2778	183	2550	2173	6254	2757	6019	2658	7490
9456	3428	3088	1174	3378	6760	4335	8256	8288	1804
8448	801	3682	4793	12404	3851	6312	9996	4171	6663
Napisz program, który w powyższej tablicy liczb wyznaczy najbliższy numer wiersza o maksymalnej sumie, najbliższy numer kolumny o maksymalnej sumie, a następnie wypisze wyróżnioną liczbę występującą w tablicy na przecięciu wyznaczonych wartości.
Przykład:
Dla tablicy liczb:
3 4 1
3 4 4
4 3 6
numer wiersza o maksymalnej sumie: 2
numer kolumny o maksymalnej sumie: 1
Wyrożniona liczba: 3
Uwaga:
Wiersze i kolumny numerujemy od 0

Pobierz plik z listą słów ze strony SJP (UTF-8, ustawić kodowanie) (sjp.pl) oraz wykonaj następujące polecenia:
  • Wypisz na ekranie wszystkie słowa zaczynające się na 'la’
  • Wypisz wszystkie 3-literowe słowa
  • Wypisz wszystkie słowa, które zaczynają się na literę f i kończą się na literę f.
  • Wypisz wszystkie palindromy
  • Wypisz wszystkie najdłuższe słowa, które zaczynają się na literę 'f’
Pobierz plik z listą słów ze strony SJP (UTF-8, ustawić kodowanie) (sjp.pl) oraz wykonaj zadanie:
Napisz program, który pobierze od użytkownika słowo i wypisze ze słownika języka polskiego wszystkie anagramy tego słowa z wyjątkiem tego słowa.
Przykład 1
Wejśœcie:
drzewo
Wyjście:
dworze
zdrowe
Przykład 2
Wejście:
granatowy
Wyjście:
gratowany
wytargano
targowany
Pobierz plik z listą słów w języku polskim wraz z ich odmianami ze strony SJP (UTF-8) (sjp.pl) oraz wykonaj wykonaj następujące zadanie.
Napisz program, który na wejœściu pobiera od użytkownika dowolne słowo w języku polskim, a na wyjœściu wypisuje wszystkie możliwe odmiany tego słowa po spacji. W przypadku braku podanego słowa program powinien wypisać stosowny komunikat.
Przykład
wejœście:
Podaj słowo: cudzysłów
wyjœście:
cudzysłowach cudzysłowami cudzysłowem cudzysłowie cudzysłowom cudzysłowowi cudzysłowów cudzysłowu cudzysłowy
Czy chesz powtórzyć (T)ak/(N)ie:
Zadanie
Spróbuj przyspieszyć działanie swojego programu stosując wyszukiwanie binarne.
Napisz program, który dokonuje konwersji liczb arabskich na rzymskie. Na wejściu pobieramy liczbę całkowitą 1 =< a <= 3999
Przykład:
Wejście:
1125
Wyjście:
MCXXV
Napisz program do przechowywania listy ocen uczniów ze sprawdzianu. Każdy uczeń powinien zwierać przynajmniej trzy pola: Nazwisko, Imię oraz ocena. Pola sformatuj odpowiednio: 14s 10s 7.1f. Następnie wykonaj polecenia:
  • Wypisz uczniów, którzy nie zaliczyli sprawdzianu
  • Oblicz średnią ocen wszystkich uczniów
  • Oblicz medianę ocen wszystkich uczniów
  • Znajdź ucznia/ów z najwyższą oraz najniższą oceną.
Napisz program, który zamiena liczbę na jej zapis słowny. Na wejściu pobieramy liczbę całkowitą 0 =< a <= 1060.
System nazw.
Na wyjściu dostajemy zapis słowny tej liczby zgodny z zasadami pisowni polskiej.
Przykład:
Wejście:
112
Wyjście:
sto dwanaście
Przykład 2
Wejście:
1023350000089867654334098001911200
Wyjście:
jeden septylion dwadzieścia trzy kwintyliardy trzysta pięćdziesiąt kwintylionów osiemdziesiąt dziewięć kwadrylionów osiemset sześćdziesiąt siedem tryliardów sześćset pięćdziesiąt cztery tryliony trzysta trzydzieści cztery biliony dziewięćdziesiąt osiem miliardów jeden milion dziewięćset jedenaście tysięcy dwieście
Napisz funkcję onp(wyr), gdzie parametr wyr oznacza poprawne wyrażenie ONP. Funkcja zwraca wartość liczbową podanego wyrażenia.
Przykładowe wywołanie funkcji: onp(„9 3 – 4 2 + *)) zwróci 36.
Odwrotna notacja polska – opis

Moduł Turtle

Programowanie Python
Efekt wywołania funkcji płot(’12112211′)

Napisz funkcję rysuj(a, znak), która rysuje pojedynczą sztachetę płotu według wzoru poniżej. Parametr a to długość siatki kwadratu, znak oznacza rodzaj sztachety (1 lub 2).
Napisz funkcję płot(kod) rysującą płotek według kodu przekazanego przez parametr kod. Końcowy rysunek powinien zawierać dokładnie dwa razy więcej sztachet ułożonych symetrycznie względem prostej przechodzącej przez środek płotu. Zadbaj o to, aby wrócić żółwiem do środka rysunku. Cały rysunek płotu powinien mieć stałą szerokość równą 600.


Efekt wywołania funkcji płotek(’12112211122212121′)


Efekt wywołania funkcji płotek(’1221′)

Rysunek pomocniczy

Programowanie Python

Mamy listę punktów na płaszczyźnie. Napisz jednoparametrową funkcję prost(lista), po wywołaniu której powstanie rysunek złożony z prostokąta i punktów danych jako parametr:
  • prostokąt ma krawędzie równoległe do osi x oraz y,
  • jest najmniejszym prostokątem zawierającym wszystkie punkty.
Rysunek powyżej przedstawia efekt wywyołania funkcji prost([[20,-50], [200,0],[-40,70],[125,25]]).
Oryginalna treść zadania pochodzi z OEIIZK

Programowanie Python

Mamy listę punktów na płaszczyźnie. Napisz jednoparametrową funkcję dwa_kola(lista), po wywołaniu której powstanie rysunek złożony z dwóch kół:
  • środek obu kół jest w punkcie [0, 0],
  • promień większego kola koloru zielonego ma najmniejszą możliwą długość taką, by w kole mieścily się wszystkie punkty
  • promień mniejszego koła koloru białego ma największą możliwą długość taką, by w kole nie było żadnych punktow z wyjątkiem jego brzegu.
Rysunek powyżej przedstawia efekt wywołania funkcji dwa_kola([[10,20],[0,100],[30,40],[25,25]])
Oryginalna treść zadania pochodzi z OEIIZK

Programowanie Python

Napisz funkcję losowe_kola(ile, od, do), która rysuje ile kół o losowym położeniu, kolorze wypełnienia i losowym promieniu z przedziału [od, do]. ¯adne dwa koła nie powinny się przecinać i wszystkie powinny się mieścić w oknie, którego rozmiary należy pobrać w programie. W zadaniu zakładamy, że dla podanych parametrów istnieje rozwiązanie. Rysunek powyżej przedstawia efekt wywołania funkcji losowe_kola(5, 100, 160).

Programowanie Python

Rysunek powyżej przedstawia efekt wywołania funkcji losowe_kola(20, 15, 100).

Programowanie Python

Rysunek powyżej przedstawia efekt wywołania funkcji losowe_kola(220, 15, 100).

Content 1

Programowanie Python

Napisz funkcję kolizja(x1, y1, a1, b1, x2, y2, a2, b2), która zwraca True, gdy prostokaty się dotykają, natomiast False w przeciwnym wypadku. Parametry x1, y1 oznaczają współrzędne lewego górnego wierzchołka, paramtry a1, b1 oznaczają długości boków pierwszego prostokąta. Pozostałe parametry dotyczą analogicznie drugiego prostokata.

Programowanie Python

Napisz funkcję losowe_prostokaty(ile, a, b, od, do), która rysuje ile prostokątów o bokach równoległych do krawędzi ekranu o losowym położeniu i losowych bokach a oraz b. ¯adne dwa prostokąty nie powinny się przecinać i wszystkie powinny się mieścić w oknie, którego rozmiary należy pobrać w programie. Kolorem czerwonym oznaczony jest prostokąt o największej, różowym o drugiej co do wielkości, zielonym o najmniejszej powierzchni. W zadaniu zakładamy, że dla podanych parametrów istnieje rozwiązanie. Rysunek powyżej przedstawia efekt wywołania funkcji losowe_prostokaty(10, 100, 300).

Programowanie Python

Rysunek powyżej przedstawia efekt wywołania funkcji losowe_prostokaty(100, 50, 300).

Napisz funkcję rekurencyjną spirala_kw(dlugosc), która rysuje spiralę kwadratową według wzoru. Parametr długosc określa długość najmniejszego boku spirali, a każdy następny bok jest o 5 jednostek dłuższy od poprzedniego. Rysunek przedstawia wywołania funkcji: spirala_kw(20).

Zmodyfikuj tak funkcję rekurencyjną z poprzedniego przykładu, aby żółw wrócił do punktu startowego.

Napisz funkcję rekurencyjną spirala_tr(dlugosc), która rysuje spiralę trójkątną według wzoru. Parametr długość określa długość najkrótszego boku spirali, każdy następny bok jest o 5 jednostek dłuższy od poprzedniego. Zadbaj o to, aby żółw wrócił do punktu startowego. Rysunek przedstawia wywołanie funkcji spirala_tr(20).
Napisz funkcję rekurencyjną spirala_p(dlugosc), która rysuje spiralę pięciokątną według wzoru. Parametr długość określa długość najkrótszego boku spirali, a każdy następny bok jest o 5 jednostek dłuższy od poprzedniego. Zadbaj o to, aby żółw wrócił do punktu startowego. Rysunek przedstawia wywołanie funkcji spirala_p(20).

Napisz funkcję rekurencyjną spirala(bok, kat), która rysuje spiralę według wzoru. Parametr bok określa długość boku spirali, a kat – kąt rysowania następnego boku, który jest o 2 jednostki krótszy od poprzeniego. Zadbaj o to, aby żółw wrócił do punktu startowego. Rysunek przedstawia wywołanie funkcji spirala(200, 122).

Napisz funkcję rekurencyjną koch(poziom, długosc), która rysuje płatek według wzoru. Parametr poziom oznacza poziom wywołania rekurencyjnego, a długosc – długość linii na poziomie 0. Rysunki przedstawiają wywołania funkcji: koch(0, 300), koch(1, 300), koch(2, 300), koch(3, 300).

Napisz funkcję platek(poziom, dlugosc, n) rysującą cały Płatek Kocha. Parametr n oznacza ponadto z ilu kawałków składa się cały płatek. Rysunek przedstawia wywołanie funkcji platek(3, 300, 3).

Content 1

Napisz funkcję rekurencyjną bin(poziom, długosc), która rysuje drzewo binarne. Parametr poziom oznacza poziom wywołania rekurencyjnego od 1 do 12, a długosc – długość linii na poziomie 0. Rysunek przedstawia wywołanie funkcji: bin(0, 100).

Rysunek przedstawia wywołanie funkcji bin(1, 100).

Rysunek przedstawia wywołanie funkcji bin(2, 100).

Rysunek przedstawia wywołanie funkcji bin(4, 100).

Napisz funkcję trojkat(a), która rysuje trójkąt równoboczny o boku a. Rysunek przedstawia wywolanie funkcji trojkat(100).

Napisz funkcję rekurencyjną sierp(stopien, a), która rysuje trojkat Sierpińskiego o podanym stopniu od 1 do 6 i boku a. Rysunek przedstawia wywołanie funkcji sierp(1, 200).

Rysunek przedstawia wywołanie funkcji sierp(2, 200).

Napisz funkcję figura(stopien, a), która rysuje sześciokąt foremny o danym stopniu rekurencji, boku a i losownych kolorach wypełnienia. Rysunek przedstawia wywolanie funkcji figura(3, 150).

Napisz funkcję kwadrat(a), która rysuje kwadrat o boku a. Rysunek przedstawia wywołanie funkcji: kwadrat(100).

Napisz funkcję rekurencyjną dywan(poziom, a) rysującą dywan Sierpińskiego. Parametr poziom oznacza poziom wywołania rekurencyjnego od 1 do 4, parametr a długość boku. Rysunek przedstawia wywołanie funkcji dywan(1, 200).

Rysunek przedstawia wywołanie funkcji dywan(2, 200).

Rysunek przedstawia wywołanie funkcji dywan(3, 200).

Napisz funkcję kwadrat(a), która rysuje kwadrat o boku a oraz funkcję rekurencyjną drzewo(stopien, a) rysującą w każdym wywołaniu rekurencyjnym trzy kwadraty na bokach równamiennego trójkąta prostokątnego. Rysunek przedstawia wywołanie funkcji: drzewo(1,100).

Rysunek przedstawia wywołanie funkcji: drzewo(2,100).

Rysunek przedstawia wywołanie funkcji: drzewo(3,100).

Rysunek przedstawia wywołanie funkcji: drzewo_k(8,80). Ustaw losowy kąt ostry trójkąta prostokątnego w każdym wywołaniu rekurencyjnym. Zadbaj o kolory pnia i korony drzewa.
Zabawa polega na wygenerowaniu nieskończonego ciągu punktów według określonej zasady:
  • Zaczynamy od wygenerowania wierzchołków trójkąta równobocznego ABC i wyboru dowolnego punktu P1.

  • Losujemy wierzchołek trójkąta np. A, a kolejny punkt P2 jest środkiem powstałego odcinka AP1.

  • Losujemy wierzchołek trójkąta np. B, i wybieramy środek P3 odcinka P2B.

  • Losujemy wierzchołek trójkąta np. A i wybieramy punkt P4 jako środek odcinka AP3 i tak dalej…
Napisz program, który wygeneruje w opisany sposób 100 000 punktów. Jaka figura powstała?
Wskazówka: Współrzędne środka odcinka są średnimi arytmecznymi współrzędnych jego końców.
Napisz funkcję element(a), gdzie parametr a oznacza długości wszystkich widocznych odcinków rysunku przedstawionego poniżej. Rysunek przedstawia wywołanie funkcji element(50).

Napisz funkcję gwiazda(a), która złożona jest z trzech powyższych elementów, gdzie parametr a oznacza długość pojedynczego krótszego odcinka. Zacznij rysować ze środka gwiazdy. Rysunek przedstawia wywołanie funkcji gwiazda(50).

zajęcia dodatkowe

Napisz funkcję ornament(ile), gdzie parametr ile oznacza liczbę od 1 do 16 gwiazd, z których składa się ornament.Odległość między środkami dwóch sąsiednich gwiazd ornamentu wynosi 10a, natomiast odległość dwóch skrajnych gwiazd jest stała i wynosi 500.

ornament(3)

ornament(5)
zajęcia pozaszkolne

Chcemy wykonać posadzkę. W tym celu rysujemy siatkę pomocniczą i rozbijamy naszą poszadzkę na mniejsze elementy.

Napisz trzy funkcje pomocnicze: kwadrat(a), trojkat(a), trojkatm(a), gdzie parametr a oznacza długość kwadratu siatki. Poniżej znajdują się odpowiednio wywołania funkcji: kwadrat(50), trojkat(50), trojkatm(50).

Zauważamy, że posadzka zbudowana jest z następujących dwóch elementów czterokrotnie wywołanych i odpowiednio obróconych:


plus środkowy kwadrat.
Napisz funkcje pomocnicze odpowiednio: motyw1(a) oraz motyw2(a), gdzie parametr a oznacza długość boku kwadratu siatki. Rysunki przedstawiają wywołania funkcji motyw1(50) oraz motyw2(50).

Napisz funkcję pomocniczą motywp(a) grupującą dwa powyższe rysunki w jedną całość, gdzie parametr a oznacza długość boku siatki rysunku.

Wykorzystują funkcję motywp(a), napisz funkcję bezparametrową motyw() pokazaną na rysunku poniżej: (cztery wywołania funkcji motywp(a) odpowiednio obrócone plus środkowa posadzka). Wysokość rysunku wynosi 480.

Napisz program, który dla podanych rozmiarów 0 < a, b < 800 liczb całkowitych prostokąta wypełni go szachownicą złożoną z możliwie największych jednakowych kwadratów.
Przykład:
Podaj szerokość prostokąta: 300
Podaj wysokość prostokąta: 150
Długość boku pojedynczego kwadratu szachownicy wynosi: 150 

Przykład 2:
Podaj szerokość prostokąta: 200
Podaj wysokość prostokąta: 120
Długość boku pojedynczego kwadratu szachownicy wynosi: 40 

zajęcia dodatkowe

Przykład 3:
Podaj szerokość prostokąta: 180
Podaj wysokość prostokąta: 80
Długość boku pojedynczego kwadratu szachownicy wynosi: 20 

zajęcia dodatkowe

Rozważmy przekształcenie postaci:

Współczynniki tego przekształcenia będziemy przekazywać w postaci ciągu liczb:
[a, b, c, d, e, f]
. Pewne przekształcenia (przekształcenia zwężające) mają tą własność, że przekształcając dowolny punkt wielokrotnie według tego samego przekształcenia zbiega on do punktu stałego. Złożenie kilku przekształceń zwężających może dać ciekawy efekt.
Przykłady:

Napisz program, który wygeneruje przynajmniej 3 różne fraktale według podanych przekształceń. Poniżej znajduje sie paproć wygenerowana według przekształceń:
[0.2,-0.5,-0.5,0.3,0.4,-0.4]
[0.2,0.4,0.4,-0.3,0.2,-0.4]
[0.6,0.2,-0.1,-0.1,0.7, 0.3]
[0.0,-0.2,0.0,0.1,0.3,-0.6]

zajęcia dodatkowe

Dla przekształceń:
[0,0.9,-0.4,-0.4,0,-0.5]
[0.5,-1,0.5,0.3,0.6,-0.6]

W celu przyśpieszenia programu wykorzystaj funkcję tracer(0) oraz aktualizuj okno z wygenerowanymi punktami co 1000 iteracji. Zostaw program na kilka minut. Do rysowania punktów wykorzystaj np. funkcję dot(3, "blue").
Zadanie pochodzi ze strony. Tam też znajduje się doładny opis tego zaganienia
(zob. tw. Banacha o punkcie stałym)
L-systemy (systemy Lindemayera), znajdują zastosowanie w grafice komputerowej, szczególnie w generowaniu fraktali i modelowaniu roœlin.
L-systemy wykorzystują tzw. produkcje. Działają one w następujący sposób: dany mamy symbol początkowy zwany aksjomatem - niech będzie to np. ac. Dane są również reguły np: a:b oraz b:ba - co w uproszczeniu możemy czytać następująco: jeżeli mamy a to zastępujemy je symbolem b, jeżeli mamy b to zastępujemy go symbolami ba. Czyli dla naszego aksjomatu i powyższych reguł otrzymamy:
  • 1 iteracja: ac pod wpływem a:b przechodzi w bc a następnie pod wpływem b:ba w bac
  • 2 iteracja: bac przechodzi w bbc a następnie w babac
  • 3 iteracja: babac w bbbbc i dalej do babababac
    ...
Powstały w ten sposób ciąg symboli jest już po kilku iteracjach dosyć dobrym przybliżeniem fraktala, do którego dąży w granicy. Następnie otrzymany w ten sposób ciąg symboli interpretujemy zgodnie z zasadami "grafiki żółwia" i otrzymujemy gotowy obraz. ¯ółw rozumie następujące symbole:
  • F idźź do przodu ustaloną odległość rysując linię
  • f idź do przodu ustaloną odległość nie rysując linii
  • + skręć o ustalony kąt w prawo
  • - skręć o ustalony kąt w lewo
Poniżej przedstawiono przykłady systemów i ich obrazów.
Wyspa Kocha
aksjomat: F+F+F+F
reguła: F:F+F-F-FF+F+F-F
kąt: 90o
krok: 10
powtórzeń: 2

Trójkąt Sierpińskiego
aksjomat: F+F+F
reguła: F:F+F-F-F+F
kąt: 60o
krok: 40
powtórzeń: 3

zajęcia dodatkowe

Pentadendryt
aksjomat: F
reguła: F:F+F-F--F+F+F
kąt: 72o
krok: 4
powtórzeń: 4

zajęcia dodatkowe

Smok Heighway'a
aksjomat: FX
reguły:
X:X+YF+
Y:-FX-Y
kąt: 90o
krok: 3
powtórzeń: 13

zajęcia dodatkowe

Pełna wersja zadania znajduje się tutaj