diff options
Diffstat (limited to 'Semestr 2')
289 files changed, 0 insertions, 14369 deletions
diff --git a/Semestr 2/algebra/106131081_1151103648602701_2043131207718798221_n.jpg b/Semestr 2/algebra/106131081_1151103648602701_2043131207718798221_n.jpg Binary files differdeleted file mode 100644 index b0e2f4e..0000000 --- a/Semestr 2/algebra/106131081_1151103648602701_2043131207718798221_n.jpg +++ /dev/null diff --git a/Semestr 2/algebra/32.jpg b/Semestr 2/algebra/32.jpg Binary files differdeleted file mode 100644 index 8f66fb0..0000000 --- a/Semestr 2/algebra/32.jpg +++ /dev/null diff --git a/Semestr 2/algebra/33.jpg b/Semestr 2/algebra/33.jpg Binary files differdeleted file mode 100644 index 200d044..0000000 --- a/Semestr 2/algebra/33.jpg +++ /dev/null diff --git a/Semestr 2/algebra/34.jpg b/Semestr 2/algebra/34.jpg Binary files differdeleted file mode 100644 index 39bb45c..0000000 --- a/Semestr 2/algebra/34.jpg +++ /dev/null diff --git a/Semestr 2/algebra/35.jpg b/Semestr 2/algebra/35.jpg Binary files differdeleted file mode 100644 index ce2008c..0000000 --- a/Semestr 2/algebra/35.jpg +++ /dev/null diff --git a/Semestr 2/algebra/36.jpg b/Semestr 2/algebra/36.jpg Binary files differdeleted file mode 100644 index b776d30..0000000 --- a/Semestr 2/algebra/36.jpg +++ /dev/null diff --git a/Semestr 2/algebra/37.jpg b/Semestr 2/algebra/37.jpg Binary files differdeleted file mode 100644 index 18d9384..0000000 --- a/Semestr 2/algebra/37.jpg +++ /dev/null diff --git a/Semestr 2/algebra/38.jpg b/Semestr 2/algebra/38.jpg Binary files differdeleted file mode 100644 index 1b90aee..0000000 --- a/Semestr 2/algebra/38.jpg +++ /dev/null diff --git a/Semestr 2/algebra/39.jpg b/Semestr 2/algebra/39.jpg Binary files differdeleted file mode 100644 index 6fa2ebb..0000000 --- a/Semestr 2/algebra/39.jpg +++ /dev/null diff --git a/Semestr 2/algebra/40.jpg b/Semestr 2/algebra/40.jpg Binary files differdeleted file mode 100644 index 64c2a62..0000000 --- a/Semestr 2/algebra/40.jpg +++ /dev/null diff --git a/Semestr 2/algebra/41.jpg b/Semestr 2/algebra/41.jpg Binary files differdeleted file mode 100644 index f160777..0000000 --- a/Semestr 2/algebra/41.jpg +++ /dev/null diff --git a/Semestr 2/algebra/42.jpg b/Semestr 2/algebra/42.jpg Binary files differdeleted file mode 100644 index e8de627..0000000 --- a/Semestr 2/algebra/42.jpg +++ /dev/null diff --git a/Semestr 2/algebra/43.jpg b/Semestr 2/algebra/43.jpg Binary files differdeleted file mode 100644 index ceffb0c..0000000 --- a/Semestr 2/algebra/43.jpg +++ /dev/null diff --git a/Semestr 2/algebra/44.jpg b/Semestr 2/algebra/44.jpg Binary files differdeleted file mode 100644 index 6237e6c..0000000 --- a/Semestr 2/algebra/44.jpg +++ /dev/null diff --git a/Semestr 2/algebra/45.jpg b/Semestr 2/algebra/45.jpg Binary files differdeleted file mode 100644 index 1ec6cf1..0000000 --- a/Semestr 2/algebra/45.jpg +++ /dev/null diff --git a/Semestr 2/algebra/46.jpg b/Semestr 2/algebra/46.jpg Binary files differdeleted file mode 100644 index c2cbcc0..0000000 --- a/Semestr 2/algebra/46.jpg +++ /dev/null diff --git a/Semestr 2/algebra/47.jpg b/Semestr 2/algebra/47.jpg Binary files differdeleted file mode 100644 index 7a4a73c..0000000 --- a/Semestr 2/algebra/47.jpg +++ /dev/null diff --git a/Semestr 2/algebra/48.jpg b/Semestr 2/algebra/48.jpg Binary files differdeleted file mode 100644 index d27be3d..0000000 --- a/Semestr 2/algebra/48.jpg +++ /dev/null diff --git a/Semestr 2/algebra/49.jpg b/Semestr 2/algebra/49.jpg Binary files differdeleted file mode 100644 index 4a626d9..0000000 --- a/Semestr 2/algebra/49.jpg +++ /dev/null diff --git a/Semestr 2/algebra/50.jpg b/Semestr 2/algebra/50.jpg Binary files differdeleted file mode 100644 index 06f0fe4..0000000 --- a/Semestr 2/algebra/50.jpg +++ /dev/null diff --git a/Semestr 2/algebra/DodatkoweWytłumaczenieDlaKogośKomuNieCheilibyśmyUdzielaćKorepetycji.jpg b/Semestr 2/algebra/DodatkoweWytłumaczenieDlaKogośKomuNieCheilibyśmyUdzielaćKorepetycji.jpg Binary files differdeleted file mode 100644 index 48546c1..0000000 --- a/Semestr 2/algebra/DodatkoweWytłumaczenieDlaKogośKomuNieCheilibyśmyUdzielaćKorepetycji.jpg +++ /dev/null diff --git a/Semestr 2/algebra/FraMalEgzamin.pdf b/Semestr 2/algebra/FraMalEgzamin.pdf Binary files differdeleted file mode 100644 index a4d4941..0000000 --- a/Semestr 2/algebra/FraMalEgzamin.pdf +++ /dev/null diff --git a/Semestr 2/algebra/egzamin/z1a.jpg b/Semestr 2/algebra/egzamin/z1a.jpg Binary files differdeleted file mode 100644 index 6bca7ce..0000000 --- a/Semestr 2/algebra/egzamin/z1a.jpg +++ /dev/null diff --git a/Semestr 2/algebra/egzamin/z1b.jpg b/Semestr 2/algebra/egzamin/z1b.jpg Binary files differdeleted file mode 100644 index 23fa274..0000000 --- a/Semestr 2/algebra/egzamin/z1b.jpg +++ /dev/null diff --git a/Semestr 2/algebra/egzamin/z2a.jpg b/Semestr 2/algebra/egzamin/z2a.jpg Binary files differdeleted file mode 100644 index 81a90c2..0000000 --- a/Semestr 2/algebra/egzamin/z2a.jpg +++ /dev/null diff --git a/Semestr 2/algebra/egzamin/z2b.jpg b/Semestr 2/algebra/egzamin/z2b.jpg Binary files differdeleted file mode 100644 index 510ca22..0000000 --- a/Semestr 2/algebra/egzamin/z2b.jpg +++ /dev/null diff --git a/Semestr 2/algebra/egzamin/z2c.jpg b/Semestr 2/algebra/egzamin/z2c.jpg Binary files differdeleted file mode 100644 index 361dae8..0000000 --- a/Semestr 2/algebra/egzamin/z2c.jpg +++ /dev/null diff --git a/Semestr 2/algebra/egzamin/z4a.jpg b/Semestr 2/algebra/egzamin/z4a.jpg Binary files differdeleted file mode 100644 index c1a480e..0000000 --- a/Semestr 2/algebra/egzamin/z4a.jpg +++ /dev/null diff --git a/Semestr 2/algebra/egzamin/z4b.jpg b/Semestr 2/algebra/egzamin/z4b.jpg Binary files differdeleted file mode 100644 index 85c70c0..0000000 --- a/Semestr 2/algebra/egzamin/z4b.jpg +++ /dev/null diff --git a/Semestr 2/algebra/egzamin/z4c.jpg b/Semestr 2/algebra/egzamin/z4c.jpg Binary files differdeleted file mode 100644 index 2196e19..0000000 --- a/Semestr 2/algebra/egzamin/z4c.jpg +++ /dev/null diff --git a/Semestr 2/algebra/egzamin/z5a.jpg b/Semestr 2/algebra/egzamin/z5a.jpg Binary files differdeleted file mode 100644 index b12f4b3..0000000 --- a/Semestr 2/algebra/egzamin/z5a.jpg +++ /dev/null diff --git a/Semestr 2/algebra/egzamin/z5b.jpg b/Semestr 2/algebra/egzamin/z5b.jpg Binary files differdeleted file mode 100644 index 50f4883..0000000 --- a/Semestr 2/algebra/egzamin/z5b.jpg +++ /dev/null diff --git a/Semestr 2/algebra/egzamin/z6.jpg b/Semestr 2/algebra/egzamin/z6.jpg Binary files differdeleted file mode 100644 index 3ab55a0..0000000 --- a/Semestr 2/algebra/egzamin/z6.jpg +++ /dev/null diff --git a/Semestr 2/algebra/egzamin/z6a.jpg b/Semestr 2/algebra/egzamin/z6a.jpg Binary files differdeleted file mode 100644 index 7af963e..0000000 --- a/Semestr 2/algebra/egzamin/z6a.jpg +++ /dev/null diff --git a/Semestr 2/algebra/egzamin/z6b.jpg b/Semestr 2/algebra/egzamin/z6b.jpg Binary files differdeleted file mode 100644 index 3c5c3e3..0000000 --- a/Semestr 2/algebra/egzamin/z6b.jpg +++ /dev/null diff --git a/Semestr 2/algebra/egzamin/z6c.jpg b/Semestr 2/algebra/egzamin/z6c.jpg Binary files differdeleted file mode 100644 index f46689f..0000000 --- a/Semestr 2/algebra/egzamin/z6c.jpg +++ /dev/null diff --git a/Semestr 2/algebra/kolokwium/zad1.jpg b/Semestr 2/algebra/kolokwium/zad1.jpg Binary files differdeleted file mode 100644 index f8fa7be..0000000 --- a/Semestr 2/algebra/kolokwium/zad1.jpg +++ /dev/null diff --git a/Semestr 2/algebra/kolokwium/zad2.jpg b/Semestr 2/algebra/kolokwium/zad2.jpg Binary files differdeleted file mode 100644 index 7c92bf4..0000000 --- a/Semestr 2/algebra/kolokwium/zad2.jpg +++ /dev/null diff --git a/Semestr 2/algebra/kolokwium/zad2cd.jpg b/Semestr 2/algebra/kolokwium/zad2cd.jpg Binary files differdeleted file mode 100644 index 692419a..0000000 --- a/Semestr 2/algebra/kolokwium/zad2cd.jpg +++ /dev/null diff --git a/Semestr 2/algebra/kolokwium/zad3.jpg b/Semestr 2/algebra/kolokwium/zad3.jpg Binary files differdeleted file mode 100644 index 1f5304c..0000000 --- a/Semestr 2/algebra/kolokwium/zad3.jpg +++ /dev/null diff --git a/Semestr 2/algebra/kolokwium/zad4.jpg b/Semestr 2/algebra/kolokwium/zad4.jpg Binary files differdeleted file mode 100644 index f04662a..0000000 --- a/Semestr 2/algebra/kolokwium/zad4.jpg +++ /dev/null diff --git a/Semestr 2/algebra/kolokwium/zad6.jpg b/Semestr 2/algebra/kolokwium/zad6.jpg Binary files differdeleted file mode 100644 index be3acea..0000000 --- a/Semestr 2/algebra/kolokwium/zad6.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista10/66.png b/Semestr 2/algebra/lista10/66.png Binary files differdeleted file mode 100644 index da66007..0000000 --- a/Semestr 2/algebra/lista10/66.png +++ /dev/null diff --git a/Semestr 2/algebra/lista10/67.png b/Semestr 2/algebra/lista10/67.png Binary files differdeleted file mode 100644 index a3992f9..0000000 --- a/Semestr 2/algebra/lista10/67.png +++ /dev/null diff --git a/Semestr 2/algebra/lista10/68.png b/Semestr 2/algebra/lista10/68.png Binary files differdeleted file mode 100644 index 9e036f5..0000000 --- a/Semestr 2/algebra/lista10/68.png +++ /dev/null diff --git a/Semestr 2/algebra/lista10/69.png b/Semestr 2/algebra/lista10/69.png Binary files differdeleted file mode 100644 index 1c15346..0000000 --- a/Semestr 2/algebra/lista10/69.png +++ /dev/null diff --git a/Semestr 2/algebra/lista10/70.png b/Semestr 2/algebra/lista10/70.png Binary files differdeleted file mode 100644 index 9665a37..0000000 --- a/Semestr 2/algebra/lista10/70.png +++ /dev/null diff --git a/Semestr 2/algebra/lista10/71.png b/Semestr 2/algebra/lista10/71.png Binary files differdeleted file mode 100644 index b8874b1..0000000 --- a/Semestr 2/algebra/lista10/71.png +++ /dev/null diff --git a/Semestr 2/algebra/lista10/72.png b/Semestr 2/algebra/lista10/72.png Binary files differdeleted file mode 100644 index 756231b..0000000 --- a/Semestr 2/algebra/lista10/72.png +++ /dev/null diff --git a/Semestr 2/algebra/lista10/73.png b/Semestr 2/algebra/lista10/73.png Binary files differdeleted file mode 100644 index 27805e2..0000000 --- a/Semestr 2/algebra/lista10/73.png +++ /dev/null diff --git a/Semestr 2/algebra/lista10/74.png b/Semestr 2/algebra/lista10/74.png Binary files differdeleted file mode 100644 index a441e21..0000000 --- a/Semestr 2/algebra/lista10/74.png +++ /dev/null diff --git a/Semestr 2/algebra/lista10/75.png b/Semestr 2/algebra/lista10/75.png Binary files differdeleted file mode 100644 index 16dedc1..0000000 --- a/Semestr 2/algebra/lista10/75.png +++ /dev/null diff --git a/Semestr 2/algebra/lista10/76.png b/Semestr 2/algebra/lista10/76.png Binary files differdeleted file mode 100644 index 7671d0c..0000000 --- a/Semestr 2/algebra/lista10/76.png +++ /dev/null diff --git a/Semestr 2/algebra/lista10/77.png b/Semestr 2/algebra/lista10/77.png Binary files differdeleted file mode 100644 index ecd5099..0000000 --- a/Semestr 2/algebra/lista10/77.png +++ /dev/null diff --git a/Semestr 2/algebra/lista10/zad1.jpg b/Semestr 2/algebra/lista10/zad1.jpg Binary files differdeleted file mode 100644 index 43206e2..0000000 --- a/Semestr 2/algebra/lista10/zad1.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista10/zad11.jpg b/Semestr 2/algebra/lista10/zad11.jpg Binary files differdeleted file mode 100644 index 1f6852c..0000000 --- a/Semestr 2/algebra/lista10/zad11.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista10/zad21A.jpg b/Semestr 2/algebra/lista10/zad21A.jpg Binary files differdeleted file mode 100644 index 2e113b2..0000000 --- a/Semestr 2/algebra/lista10/zad21A.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista10/zad21B.jpg b/Semestr 2/algebra/lista10/zad21B.jpg Binary files differdeleted file mode 100644 index c457411..0000000 --- a/Semestr 2/algebra/lista10/zad21B.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista10/zad21C.jpg b/Semestr 2/algebra/lista10/zad21C.jpg Binary files differdeleted file mode 100644 index d6a2eb8..0000000 --- a/Semestr 2/algebra/lista10/zad21C.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista10/zad21D.jpg b/Semestr 2/algebra/lista10/zad21D.jpg Binary files differdeleted file mode 100644 index 2406f53..0000000 --- a/Semestr 2/algebra/lista10/zad21D.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista10/zad3.jpg b/Semestr 2/algebra/lista10/zad3.jpg Binary files differdeleted file mode 100644 index 7c99c84..0000000 --- a/Semestr 2/algebra/lista10/zad3.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista10/zad6.jpg b/Semestr 2/algebra/lista10/zad6.jpg Binary files differdeleted file mode 100644 index e75f2e2..0000000 --- a/Semestr 2/algebra/lista10/zad6.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista10/zad7.jpg b/Semestr 2/algebra/lista10/zad7.jpg Binary files differdeleted file mode 100644 index 669ccc7..0000000 --- a/Semestr 2/algebra/lista10/zad7.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista11/78.png b/Semestr 2/algebra/lista11/78.png Binary files differdeleted file mode 100644 index db20401..0000000 --- a/Semestr 2/algebra/lista11/78.png +++ /dev/null diff --git a/Semestr 2/algebra/lista11/79.png b/Semestr 2/algebra/lista11/79.png Binary files differdeleted file mode 100644 index 21908b8..0000000 --- a/Semestr 2/algebra/lista11/79.png +++ /dev/null diff --git a/Semestr 2/algebra/lista11/80.png b/Semestr 2/algebra/lista11/80.png Binary files differdeleted file mode 100644 index b2a153f..0000000 --- a/Semestr 2/algebra/lista11/80.png +++ /dev/null diff --git a/Semestr 2/algebra/lista11/81.png b/Semestr 2/algebra/lista11/81.png Binary files differdeleted file mode 100644 index 3d65485..0000000 --- a/Semestr 2/algebra/lista11/81.png +++ /dev/null diff --git a/Semestr 2/algebra/lista11/82.png b/Semestr 2/algebra/lista11/82.png Binary files differdeleted file mode 100644 index d90b5b9..0000000 --- a/Semestr 2/algebra/lista11/82.png +++ /dev/null diff --git a/Semestr 2/algebra/lista11/83.png b/Semestr 2/algebra/lista11/83.png Binary files differdeleted file mode 100644 index 915574b..0000000 --- a/Semestr 2/algebra/lista11/83.png +++ /dev/null diff --git a/Semestr 2/algebra/lista11/84.png b/Semestr 2/algebra/lista11/84.png Binary files differdeleted file mode 100644 index d2dda41..0000000 --- a/Semestr 2/algebra/lista11/84.png +++ /dev/null diff --git a/Semestr 2/algebra/lista11/85.png b/Semestr 2/algebra/lista11/85.png Binary files differdeleted file mode 100644 index 00216c8..0000000 --- a/Semestr 2/algebra/lista11/85.png +++ /dev/null diff --git a/Semestr 2/algebra/lista11/86.png b/Semestr 2/algebra/lista11/86.png Binary files differdeleted file mode 100644 index 8f649e3..0000000 --- a/Semestr 2/algebra/lista11/86.png +++ /dev/null diff --git a/Semestr 2/algebra/lista11/87.png b/Semestr 2/algebra/lista11/87.png Binary files differdeleted file mode 100644 index 037ebc4..0000000 --- a/Semestr 2/algebra/lista11/87.png +++ /dev/null diff --git a/Semestr 2/algebra/lista11/88.png b/Semestr 2/algebra/lista11/88.png Binary files differdeleted file mode 100644 index 94a43c9..0000000 --- a/Semestr 2/algebra/lista11/88.png +++ /dev/null diff --git a/Semestr 2/algebra/lista11/89.png b/Semestr 2/algebra/lista11/89.png Binary files differdeleted file mode 100644 index fa58ac9..0000000 --- a/Semestr 2/algebra/lista11/89.png +++ /dev/null diff --git a/Semestr 2/algebra/lista11/90.png b/Semestr 2/algebra/lista11/90.png Binary files differdeleted file mode 100644 index de92a0a..0000000 --- a/Semestr 2/algebra/lista11/90.png +++ /dev/null diff --git a/Semestr 2/algebra/lista11/91.png b/Semestr 2/algebra/lista11/91.png Binary files differdeleted file mode 100644 index 47aff85..0000000 --- a/Semestr 2/algebra/lista11/91.png +++ /dev/null diff --git a/Semestr 2/algebra/lista11/92.png b/Semestr 2/algebra/lista11/92.png Binary files differdeleted file mode 100644 index 42d9caf..0000000 --- a/Semestr 2/algebra/lista11/92.png +++ /dev/null diff --git a/Semestr 2/algebra/lista11/zad1312.jpg b/Semestr 2/algebra/lista11/zad1312.jpg Binary files differdeleted file mode 100644 index 63674a3..0000000 --- a/Semestr 2/algebra/lista11/zad1312.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista11/zad2.jpg b/Semestr 2/algebra/lista11/zad2.jpg Binary files differdeleted file mode 100644 index 9793c78..0000000 --- a/Semestr 2/algebra/lista11/zad2.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista11/zad2c.jpg b/Semestr 2/algebra/lista11/zad2c.jpg Binary files differdeleted file mode 100644 index de85e61..0000000 --- a/Semestr 2/algebra/lista11/zad2c.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista11/zad6.jpg b/Semestr 2/algebra/lista11/zad6.jpg Binary files differdeleted file mode 100644 index 582bddc..0000000 --- a/Semestr 2/algebra/lista11/zad6.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista11/zad7a.jpg b/Semestr 2/algebra/lista11/zad7a.jpg Binary files differdeleted file mode 100644 index 944b735..0000000 --- a/Semestr 2/algebra/lista11/zad7a.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista11/zad7b.jpg b/Semestr 2/algebra/lista11/zad7b.jpg Binary files differdeleted file mode 100644 index 1e62ad2..0000000 --- a/Semestr 2/algebra/lista11/zad7b.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista11/zad9.jpg b/Semestr 2/algebra/lista11/zad9.jpg Binary files differdeleted file mode 100644 index cb0646e..0000000 --- a/Semestr 2/algebra/lista11/zad9.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista12/100.png b/Semestr 2/algebra/lista12/100.png Binary files differdeleted file mode 100644 index 32b2012..0000000 --- a/Semestr 2/algebra/lista12/100.png +++ /dev/null diff --git a/Semestr 2/algebra/lista12/101.png b/Semestr 2/algebra/lista12/101.png Binary files differdeleted file mode 100644 index 4eee8ba..0000000 --- a/Semestr 2/algebra/lista12/101.png +++ /dev/null diff --git a/Semestr 2/algebra/lista12/102.png b/Semestr 2/algebra/lista12/102.png Binary files differdeleted file mode 100644 index 6c2c8b4..0000000 --- a/Semestr 2/algebra/lista12/102.png +++ /dev/null diff --git a/Semestr 2/algebra/lista12/103.png b/Semestr 2/algebra/lista12/103.png Binary files differdeleted file mode 100644 index d417206..0000000 --- a/Semestr 2/algebra/lista12/103.png +++ /dev/null diff --git a/Semestr 2/algebra/lista12/104.png b/Semestr 2/algebra/lista12/104.png Binary files differdeleted file mode 100644 index 3a1522d..0000000 --- a/Semestr 2/algebra/lista12/104.png +++ /dev/null diff --git a/Semestr 2/algebra/lista12/105.png b/Semestr 2/algebra/lista12/105.png Binary files differdeleted file mode 100644 index 583e7d6..0000000 --- a/Semestr 2/algebra/lista12/105.png +++ /dev/null diff --git a/Semestr 2/algebra/lista12/107.png b/Semestr 2/algebra/lista12/107.png Binary files differdeleted file mode 100644 index 9f715e4..0000000 --- a/Semestr 2/algebra/lista12/107.png +++ /dev/null diff --git a/Semestr 2/algebra/lista12/16.jpg b/Semestr 2/algebra/lista12/16.jpg Binary files differdeleted file mode 100644 index 3e7c20c..0000000 --- a/Semestr 2/algebra/lista12/16.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista12/21.jpg b/Semestr 2/algebra/lista12/21.jpg Binary files differdeleted file mode 100644 index 263e8d4..0000000 --- a/Semestr 2/algebra/lista12/21.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista12/7a.jpg b/Semestr 2/algebra/lista12/7a.jpg Binary files differdeleted file mode 100644 index e84ef5e..0000000 --- a/Semestr 2/algebra/lista12/7a.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista12/7b.jpg b/Semestr 2/algebra/lista12/7b.jpg Binary files differdeleted file mode 100644 index 061543b..0000000 --- a/Semestr 2/algebra/lista12/7b.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista12/8.jpg b/Semestr 2/algebra/lista12/8.jpg Binary files differdeleted file mode 100644 index 94f8206..0000000 --- a/Semestr 2/algebra/lista12/8.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista12/9.jpg b/Semestr 2/algebra/lista12/9.jpg Binary files differdeleted file mode 100644 index a26d268..0000000 --- a/Semestr 2/algebra/lista12/9.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista12/95.png b/Semestr 2/algebra/lista12/95.png Binary files differdeleted file mode 100644 index 07493f5..0000000 --- a/Semestr 2/algebra/lista12/95.png +++ /dev/null diff --git a/Semestr 2/algebra/lista12/96.png b/Semestr 2/algebra/lista12/96.png Binary files differdeleted file mode 100644 index bb1c592..0000000 --- a/Semestr 2/algebra/lista12/96.png +++ /dev/null diff --git a/Semestr 2/algebra/lista12/97.png b/Semestr 2/algebra/lista12/97.png Binary files differdeleted file mode 100644 index 2bf4bee..0000000 --- a/Semestr 2/algebra/lista12/97.png +++ /dev/null diff --git a/Semestr 2/algebra/lista12/98.png b/Semestr 2/algebra/lista12/98.png Binary files differdeleted file mode 100644 index 413f7a6..0000000 --- a/Semestr 2/algebra/lista12/98.png +++ /dev/null diff --git a/Semestr 2/algebra/lista12/99.png b/Semestr 2/algebra/lista12/99.png Binary files differdeleted file mode 100644 index 32f8997..0000000 --- a/Semestr 2/algebra/lista12/99.png +++ /dev/null diff --git a/Semestr 2/algebra/lista12/unknown.png b/Semestr 2/algebra/lista12/unknown.png Binary files differdeleted file mode 100644 index 5556264..0000000 --- a/Semestr 2/algebra/lista12/unknown.png +++ /dev/null diff --git a/Semestr 2/algebra/lista12/zad5.jpg b/Semestr 2/algebra/lista12/zad5.jpg Binary files differdeleted file mode 100644 index fabc22b..0000000 --- a/Semestr 2/algebra/lista12/zad5.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista13/110.png b/Semestr 2/algebra/lista13/110.png Binary files differdeleted file mode 100644 index 2ac2e37..0000000 --- a/Semestr 2/algebra/lista13/110.png +++ /dev/null diff --git a/Semestr 2/algebra/lista13/111.png b/Semestr 2/algebra/lista13/111.png Binary files differdeleted file mode 100644 index 6c4fc2d..0000000 --- a/Semestr 2/algebra/lista13/111.png +++ /dev/null diff --git a/Semestr 2/algebra/lista13/112.png b/Semestr 2/algebra/lista13/112.png Binary files differdeleted file mode 100644 index 432aec0..0000000 --- a/Semestr 2/algebra/lista13/112.png +++ /dev/null diff --git a/Semestr 2/algebra/lista13/113.png b/Semestr 2/algebra/lista13/113.png Binary files differdeleted file mode 100644 index dad0858..0000000 --- a/Semestr 2/algebra/lista13/113.png +++ /dev/null diff --git a/Semestr 2/algebra/lista13/114.png b/Semestr 2/algebra/lista13/114.png Binary files differdeleted file mode 100644 index ba0a7cb..0000000 --- a/Semestr 2/algebra/lista13/114.png +++ /dev/null diff --git a/Semestr 2/algebra/lista13/115.png b/Semestr 2/algebra/lista13/115.png Binary files differdeleted file mode 100644 index 07d838f..0000000 --- a/Semestr 2/algebra/lista13/115.png +++ /dev/null diff --git a/Semestr 2/algebra/lista13/116.png b/Semestr 2/algebra/lista13/116.png Binary files differdeleted file mode 100644 index 5e19116..0000000 --- a/Semestr 2/algebra/lista13/116.png +++ /dev/null diff --git a/Semestr 2/algebra/lista13/117.png b/Semestr 2/algebra/lista13/117.png Binary files differdeleted file mode 100644 index faa3b2c..0000000 --- a/Semestr 2/algebra/lista13/117.png +++ /dev/null diff --git a/Semestr 2/algebra/lista13/118.png b/Semestr 2/algebra/lista13/118.png Binary files differdeleted file mode 100644 index 572840d..0000000 --- a/Semestr 2/algebra/lista13/118.png +++ /dev/null diff --git a/Semestr 2/algebra/lista13/zad11.jpg b/Semestr 2/algebra/lista13/zad11.jpg Binary files differdeleted file mode 100644 index 890377d..0000000 --- a/Semestr 2/algebra/lista13/zad11.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista13/zad7.jpg b/Semestr 2/algebra/lista13/zad7.jpg Binary files differdeleted file mode 100644 index 5ec8064..0000000 --- a/Semestr 2/algebra/lista13/zad7.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista13/zad8a.jpg b/Semestr 2/algebra/lista13/zad8a.jpg Binary files differdeleted file mode 100644 index c631e11..0000000 --- a/Semestr 2/algebra/lista13/zad8a.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista13/zad8b.jpg b/Semestr 2/algebra/lista13/zad8b.jpg Binary files differdeleted file mode 100644 index d35585b..0000000 --- a/Semestr 2/algebra/lista13/zad8b.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista14/11.jpg b/Semestr 2/algebra/lista14/11.jpg Binary files differdeleted file mode 100644 index 9197141..0000000 --- a/Semestr 2/algebra/lista14/11.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista14/1a.jpg b/Semestr 2/algebra/lista14/1a.jpg Binary files differdeleted file mode 100644 index 3f25d1c..0000000 --- a/Semestr 2/algebra/lista14/1a.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista14/1aa.jpg b/Semestr 2/algebra/lista14/1aa.jpg Binary files differdeleted file mode 100644 index dd22bde..0000000 --- a/Semestr 2/algebra/lista14/1aa.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista14/1c.jpg b/Semestr 2/algebra/lista14/1c.jpg Binary files differdeleted file mode 100644 index 9181ea2..0000000 --- a/Semestr 2/algebra/lista14/1c.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista14/1cc.jpg b/Semestr 2/algebra/lista14/1cc.jpg Binary files differdeleted file mode 100644 index c258f16..0000000 --- a/Semestr 2/algebra/lista14/1cc.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista14/7.jpg b/Semestr 2/algebra/lista14/7.jpg Binary files differdeleted file mode 100644 index cee2b83..0000000 --- a/Semestr 2/algebra/lista14/7.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista14/8.jpg b/Semestr 2/algebra/lista14/8.jpg Binary files differdeleted file mode 100644 index 877a488..0000000 --- a/Semestr 2/algebra/lista14/8.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista14/9a.jpg b/Semestr 2/algebra/lista14/9a.jpg Binary files differdeleted file mode 100644 index 51fc8fc..0000000 --- a/Semestr 2/algebra/lista14/9a.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista14/9b.jpg b/Semestr 2/algebra/lista14/9b.jpg Binary files differdeleted file mode 100644 index 14345c8..0000000 --- a/Semestr 2/algebra/lista14/9b.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista14/FraMal,z1;7;8;9;11;18.pdf b/Semestr 2/algebra/lista14/FraMal,z1;7;8;9;11;18.pdf Binary files differdeleted file mode 100644 index bac9a67..0000000 --- a/Semestr 2/algebra/lista14/FraMal,z1;7;8;9;11;18.pdf +++ /dev/null diff --git a/Semestr 2/algebra/lista14/zad18.jpg b/Semestr 2/algebra/lista14/zad18.jpg Binary files differdeleted file mode 100644 index d7cb461..0000000 --- a/Semestr 2/algebra/lista14/zad18.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista9/32.jpg b/Semestr 2/algebra/lista9/32.jpg Binary files differdeleted file mode 100644 index 66d37a7..0000000 --- a/Semestr 2/algebra/lista9/32.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista9/34.jpg b/Semestr 2/algebra/lista9/34.jpg Binary files differdeleted file mode 100644 index 14d8458..0000000 --- a/Semestr 2/algebra/lista9/34.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista9/36.jpg b/Semestr 2/algebra/lista9/36.jpg Binary files differdeleted file mode 100644 index 44cb097..0000000 --- a/Semestr 2/algebra/lista9/36.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista9/38.jpg b/Semestr 2/algebra/lista9/38.jpg Binary files differdeleted file mode 100644 index 2ad8395..0000000 --- a/Semestr 2/algebra/lista9/38.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista9/40.jpg b/Semestr 2/algebra/lista9/40.jpg Binary files differdeleted file mode 100644 index dbb145c..0000000 --- a/Semestr 2/algebra/lista9/40.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista9/42.jpg b/Semestr 2/algebra/lista9/42.jpg Binary files differdeleted file mode 100644 index 36bcae9..0000000 --- a/Semestr 2/algebra/lista9/42.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista9/44.jpg b/Semestr 2/algebra/lista9/44.jpg Binary files differdeleted file mode 100644 index fcf96e2..0000000 --- a/Semestr 2/algebra/lista9/44.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista9/46.jpg b/Semestr 2/algebra/lista9/46.jpg Binary files differdeleted file mode 100644 index f04c4ed..0000000 --- a/Semestr 2/algebra/lista9/46.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista9/48.jpg b/Semestr 2/algebra/lista9/48.jpg Binary files differdeleted file mode 100644 index 988cf50..0000000 --- a/Semestr 2/algebra/lista9/48.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista9/50.jpg b/Semestr 2/algebra/lista9/50.jpg Binary files differdeleted file mode 100644 index d4afb6d..0000000 --- a/Semestr 2/algebra/lista9/50.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista9/zad10.jpg b/Semestr 2/algebra/lista9/zad10.jpg Binary files differdeleted file mode 100644 index 6c7137a..0000000 --- a/Semestr 2/algebra/lista9/zad10.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista9/zad10bpoprawka.jpg b/Semestr 2/algebra/lista9/zad10bpoprawka.jpg Binary files differdeleted file mode 100644 index 73f79c2..0000000 --- a/Semestr 2/algebra/lista9/zad10bpoprawka.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista9/zad11.jpg b/Semestr 2/algebra/lista9/zad11.jpg Binary files differdeleted file mode 100644 index 2fb3cb1..0000000 --- a/Semestr 2/algebra/lista9/zad11.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista9/zad12.jpg b/Semestr 2/algebra/lista9/zad12.jpg Binary files differdeleted file mode 100644 index 152c3a4..0000000 --- a/Semestr 2/algebra/lista9/zad12.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista9/zad13.jpg b/Semestr 2/algebra/lista9/zad13.jpg Binary files differdeleted file mode 100644 index 6404ef0..0000000 --- a/Semestr 2/algebra/lista9/zad13.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista9/zad6.jpg b/Semestr 2/algebra/lista9/zad6.jpg Binary files differdeleted file mode 100644 index e392b4b..0000000 --- a/Semestr 2/algebra/lista9/zad6.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista9/zad8a.jpg b/Semestr 2/algebra/lista9/zad8a.jpg Binary files differdeleted file mode 100644 index 37a64a5..0000000 --- a/Semestr 2/algebra/lista9/zad8a.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista9/zad8b.jpg b/Semestr 2/algebra/lista9/zad8b.jpg Binary files differdeleted file mode 100644 index 1864fe6..0000000 --- a/Semestr 2/algebra/lista9/zad8b.jpg +++ /dev/null diff --git a/Semestr 2/algebra/lista9/zad9.jpg b/Semestr 2/algebra/lista9/zad9.jpg Binary files differdeleted file mode 100644 index bababf7..0000000 --- a/Semestr 2/algebra/lista9/zad9.jpg +++ /dev/null diff --git a/Semestr 2/algebra/z1a-skonwertowany.pdf b/Semestr 2/algebra/z1a-skonwertowany.pdf Binary files differdeleted file mode 100644 index a4d4941..0000000 --- a/Semestr 2/algebra/z1a-skonwertowany.pdf +++ /dev/null diff --git a/Semestr 2/algebra/zad101213.jpg b/Semestr 2/algebra/zad101213.jpg Binary files differdeleted file mode 100644 index e3bf7e2..0000000 --- a/Semestr 2/algebra/zad101213.jpg +++ /dev/null diff --git a/Semestr 2/algebra/zad14.jpg b/Semestr 2/algebra/zad14.jpg Binary files differdeleted file mode 100644 index 95a8c95..0000000 --- a/Semestr 2/algebra/zad14.jpg +++ /dev/null diff --git a/Semestr 2/algebra/zad2;3;6;7;11;21.pdf b/Semestr 2/algebra/zad2;3;6;7;11;21.pdf Binary files differdeleted file mode 100644 index 6eb52f7..0000000 --- a/Semestr 2/algebra/zad2;3;6;7;11;21.pdf +++ /dev/null diff --git a/Semestr 2/algebra/zad2;6;7;9.pdf b/Semestr 2/algebra/zad2;6;7;9.pdf Binary files differdeleted file mode 100644 index 1a64f57..0000000 --- a/Semestr 2/algebra/zad2;6;7;9.pdf +++ /dev/null diff --git a/Semestr 2/algebra/zad5;7;8;9;16.pdf b/Semestr 2/algebra/zad5;7;8;9;16.pdf Binary files differdeleted file mode 100644 index c20a41e..0000000 --- a/Semestr 2/algebra/zad5;7;8;9;16.pdf +++ /dev/null diff --git a/Semestr 2/algebra/zad7;8;11;15.pdf b/Semestr 2/algebra/zad7;8;11;15.pdf Binary files differdeleted file mode 100644 index 2b1e160..0000000 --- a/Semestr 2/algebra/zad7;8;11;15.pdf +++ /dev/null diff --git a/Semestr 2/analiza/Analiza_last_gwiazdka.pdf b/Semestr 2/analiza/Analiza_last_gwiazdka.pdf Binary files differdeleted file mode 100644 index 72d3041..0000000 --- a/Semestr 2/analiza/Analiza_last_gwiazdka.pdf +++ /dev/null diff --git a/Semestr 2/analiza/L11Z8,9;L12Z1,2,3,7; PUNTKÓW 18.pdf b/Semestr 2/analiza/L11Z8,9;L12Z1,2,3,7; PUNTKÓW 18.pdf Binary files differdeleted file mode 100644 index 99b3e17..0000000 --- a/Semestr 2/analiza/L11Z8,9;L12Z1,2,3,7; PUNTKÓW 18.pdf +++ /dev/null diff --git a/Semestr 2/analiza/L3Z11;Szwarc26.03;Obie gwiazdki.pdf b/Semestr 2/analiza/L3Z11;Szwarc26.03;Obie gwiazdki.pdf Binary files differdeleted file mode 100644 index b3814dc..0000000 --- a/Semestr 2/analiza/L3Z11;Szwarc26.03;Obie gwiazdki.pdf +++ /dev/null diff --git a/Semestr 2/analiza/L9Z7;L10Z2,3,4;L11Z1,2,4,5,6;Punktów 34.pdf b/Semestr 2/analiza/L9Z7;L10Z2,3,4;L11Z1,2,4,5,6;Punktów 34.pdf Binary files differdeleted file mode 100644 index 7c37d85..0000000 --- a/Semestr 2/analiza/L9Z7;L10Z2,3,4;L11Z1,2,4,5,6;Punktów 34.pdf +++ /dev/null diff --git a/Semestr 2/analiza/Lista7;21pkt.pdf b/Semestr 2/analiza/Lista7;21pkt.pdf Binary files differdeleted file mode 100644 index e7328d9..0000000 --- a/Semestr 2/analiza/Lista7;21pkt.pdf +++ /dev/null diff --git a/Semestr 2/analiza/Lista9;zad3;5;6;8;12;PUNKTÓW 25.pdf b/Semestr 2/analiza/Lista9;zad3;5;6;8;12;PUNKTÓW 25.pdf Binary files differdeleted file mode 100644 index 82894fd..0000000 --- a/Semestr 2/analiza/Lista9;zad3;5;6;8;12;PUNKTÓW 25.pdf +++ /dev/null diff --git a/Semestr 2/analiza/lista11/LISTA3;zad11.jpg b/Semestr 2/analiza/lista11/LISTA3;zad11.jpg Binary files differdeleted file mode 100644 index 19c129d..0000000 --- a/Semestr 2/analiza/lista11/LISTA3;zad11.jpg +++ /dev/null diff --git a/Semestr 2/analiza/lista11/l11z8l12z1.jpg b/Semestr 2/analiza/lista11/l11z8l12z1.jpg Binary files differdeleted file mode 100644 index 2766310..0000000 --- a/Semestr 2/analiza/lista11/l11z8l12z1.jpg +++ /dev/null diff --git a/Semestr 2/analiza/lista11/l11z9.jpg b/Semestr 2/analiza/lista11/l11z9.jpg Binary files differdeleted file mode 100644 index b38f822..0000000 --- a/Semestr 2/analiza/lista11/l11z9.jpg +++ /dev/null diff --git a/Semestr 2/analiza/lista11/l12z2.jpg b/Semestr 2/analiza/lista11/l12z2.jpg Binary files differdeleted file mode 100644 index 835dd21..0000000 --- a/Semestr 2/analiza/lista11/l12z2.jpg +++ /dev/null diff --git a/Semestr 2/analiza/lista11/l12z3.jpg b/Semestr 2/analiza/lista11/l12z3.jpg Binary files differdeleted file mode 100644 index 38e4ac8..0000000 --- a/Semestr 2/analiza/lista11/l12z3.jpg +++ /dev/null diff --git a/Semestr 2/analiza/lista11/l12z7.jpg b/Semestr 2/analiza/lista11/l12z7.jpg Binary files differdeleted file mode 100644 index 396f123..0000000 --- a/Semestr 2/analiza/lista11/l12z7.jpg +++ /dev/null diff --git a/Semestr 2/analiza/lista11/szwarc26.06.jpg b/Semestr 2/analiza/lista11/szwarc26.06.jpg Binary files differdeleted file mode 100644 index 6d6cb60..0000000 --- a/Semestr 2/analiza/lista11/szwarc26.06.jpg +++ /dev/null diff --git a/Semestr 2/analiza/lista11/zad11b.jpg b/Semestr 2/analiza/lista11/zad11b.jpg Binary files differdeleted file mode 100644 index 68ad10b..0000000 --- a/Semestr 2/analiza/lista11/zad11b.jpg +++ /dev/null diff --git a/Semestr 2/analiza/lista11/zad1a-e.jpg b/Semestr 2/analiza/lista11/zad1a-e.jpg Binary files differdeleted file mode 100644 index e1eb2f5..0000000 --- a/Semestr 2/analiza/lista11/zad1a-e.jpg +++ /dev/null diff --git a/Semestr 2/analiza/lista11/zad1f2.jpg b/Semestr 2/analiza/lista11/zad1f2.jpg Binary files differdeleted file mode 100644 index 30395f2..0000000 --- a/Semestr 2/analiza/lista11/zad1f2.jpg +++ /dev/null diff --git a/Semestr 2/analiza/lista11/zad2.jpg b/Semestr 2/analiza/lista11/zad2.jpg Binary files differdeleted file mode 100644 index 60183a4..0000000 --- a/Semestr 2/analiza/lista11/zad2.jpg +++ /dev/null diff --git a/Semestr 2/analiza/lista11/zad3.jpg b/Semestr 2/analiza/lista11/zad3.jpg Binary files differdeleted file mode 100644 index 9be3db6..0000000 --- a/Semestr 2/analiza/lista11/zad3.jpg +++ /dev/null diff --git a/Semestr 2/analiza/lista11/zad4.jpg b/Semestr 2/analiza/lista11/zad4.jpg Binary files differdeleted file mode 100644 index 2535e05..0000000 --- a/Semestr 2/analiza/lista11/zad4.jpg +++ /dev/null diff --git a/Semestr 2/analiza/lista11/zad465.jpg b/Semestr 2/analiza/lista11/zad465.jpg Binary files differdeleted file mode 100644 index fcfdda3..0000000 --- a/Semestr 2/analiza/lista11/zad465.jpg +++ /dev/null diff --git a/Semestr 2/analiza/lista11/zad7a.jpg b/Semestr 2/analiza/lista11/zad7a.jpg Binary files differdeleted file mode 100644 index 5c045d9..0000000 --- a/Semestr 2/analiza/lista11/zad7a.jpg +++ /dev/null diff --git a/Semestr 2/analiza/lista11/zad7b.jpg b/Semestr 2/analiza/lista11/zad7b.jpg Binary files differdeleted file mode 100644 index 5308651..0000000 --- a/Semestr 2/analiza/lista11/zad7b.jpg +++ /dev/null diff --git a/Semestr 2/analiza/zad12.jpg b/Semestr 2/analiza/zad12.jpg Binary files differdeleted file mode 100644 index 4da6d95..0000000 --- a/Semestr 2/analiza/zad12.jpg +++ /dev/null diff --git a/Semestr 2/analiza/zad3;5.jpg b/Semestr 2/analiza/zad3;5.jpg Binary files differdeleted file mode 100644 index bacf11a..0000000 --- a/Semestr 2/analiza/zad3;5.jpg +++ /dev/null diff --git a/Semestr 2/analiza/zad6;8a.jpg b/Semestr 2/analiza/zad6;8a.jpg Binary files differdeleted file mode 100644 index eec9653..0000000 --- a/Semestr 2/analiza/zad6;8a.jpg +++ /dev/null diff --git a/Semestr 2/analiza/zad8b1.jpg b/Semestr 2/analiza/zad8b1.jpg Binary files differdeleted file mode 100644 index e16c886..0000000 --- a/Semestr 2/analiza/zad8b1.jpg +++ /dev/null diff --git a/Semestr 2/analiza/zad8b2.jpg b/Semestr 2/analiza/zad8b2.jpg Binary files differdeleted file mode 100644 index 224a6e6..0000000 --- a/Semestr 2/analiza/zad8b2.jpg +++ /dev/null diff --git a/Semestr 2/analiza/zad8c.jpg b/Semestr 2/analiza/zad8c.jpg Binary files differdeleted file mode 100644 index 91b1be1..0000000 --- a/Semestr 2/analiza/zad8c.jpg +++ /dev/null diff --git a/Semestr 2/racket/cnf.rkt b/Semestr 2/racket/cnf.rkt deleted file mode 100644 index 67bd70f..0000000 --- a/Semestr 2/racket/cnf.rkt +++ /dev/null @@ -1,188 +0,0 @@ -#lang racket - -(define (var? t) (symbol? t)) - -(define (neg? t) - (and (list? t) - (= 2 (length t)) - (eq? 'neg (car t)))) - -(define (conj? t) - (and (list? t) - (= 3 (length t)) - (eq? 'conj (car t)))) - -(define (disj? t) - (and (list? t) - (= 3 (length t)) - (eq? 'disj (car t)))) - -(define (lit? t) - (or (var? t) - (and (neg? t) - (var? (neg-subf t))))) - -(define (prop? f) - (or (var? f) - (and (neg? f) - (prop? (neg-subf f))) - (and (disj? f) - (prop? (disj-left f)) - (prop? (disj-right f))) - (and (conj? f) - (prop? (conj-left f)) - (prop? (conj-right f))))) - -(define (make-conj left right) - (list 'conj left right)) - -(define (make-disj left right) - (list 'disj left right)) - -(define (make-neg f) - (list 'neg f)) - -(define (conj-left f) - (if (conj? f) - (cadr f) - (error "Złe dane ze znacznikiem -- CONJ-LEFT" f))) - -(define (conj-right f) - (if (conj? f) - (caddr f) - (error "Złe dane ze znacznikiem -- CONJ-RIGHT" f))) - -(define (disj-left f) - (if (disj? f) - (cadr f) - (error "Złe dane ze znacznikiem -- DISJ-LEFT" f))) - -(define (disj-right f) - (if (disj? f) - (caddr f) - (error "Złe dane ze znacznikiem -- DISJ-RIGHT" f))) - -(define (neg-subf f) - (if (neg? f) - (cadr f) - (error "Złe dane ze znacznikiem -- NEG-FORM" f))) - -(define (lit-var f) - (cond [(var? f) f] - [(neg? f) (neg-subf f)] - [else (error "Złe dane ze znacznikiem -- LIT-VAR" f)])) - -(define (free-vars f) - (cond [(null? f) null] - [(var? f) (list f)] - [(neg? f) (free-vars (neg-subf f))] - [(conj? f) (append (free-vars (conj-left f)) - (free-vars (conj-right f)))] - [(disj? f) (append (free-vars (disj-left f)) - (free-vars (disj-right f)))] - [else (error "Zła formula -- FREE-VARS" f)])) - -(define (gen-vals xs) - (if (null? xs) - (list null) - (let* - ((vss (gen-vals (cdr xs))) - (x (car xs)) - (vst (map (λ (vs) (cons (list x true) vs)) vss)) - (vsf (map (λ (vs) (cons (list x false) vs)) vss))) - (append vst vsf)))) - -(define (eval-formula f evaluation) - (cond [(var? f) - (let ((val (assoc f evaluation))) - (if (not val) - (error "Zmienna wolna nie wystepuje w wartościowaniu -- EVAL-FORMULA" f evaluation) - (cadr val)))] - [(neg? f) (not (eval-formula (neg-subf f) evaluation))] - [(disj? f) (or (eval-formula (disj-left f) evaluation) - (eval-formula (disj-right f) evaluation))] - [(conj? f) (and (eval-formula (conj-left f) evaluation) - (eval-formula (conj-right f) evaluation))] - [else (error "Zła formuła -- EVAL-FORMULA" f evaluation)])) - -(define (falsifable-eval? f) - (let* ((evaluations (gen-vals (free-vars f))) - (results (map (λ (evaluation) (eval-formula f evaluation)) evaluations))) - (ormap false? results))) - -(define (nff? f) - (cond [(lit? f) true] - [(neg? f) false] - [(conj? f) (and (nff? (conj-left f)) - (nff? (conj-right f)))] - [(disj? f) (and (nff? (disj-left f)) - (nff? (disj-right f)))] - [else (error "Zła formuła -- NFF?" f)])) - -(define (convert-to-nnf f) - (cond [(lit? f) f] - [(neg? f) (convert-negation (neg-subf f))] - [(conj? f) (make-conj (convert-to-nnf (conj-left f)) - (convert-to-nnf (conj-right f)))] - [(disj? f) (make-disj (convert-to-nnf (disj-left f)) - (convert-to-nnf (disj-right f)))] - [else (error "Zła formuła -- CONVERT" f)])) - -(define (convert-negation f) - (cond [(lit? f) - (if (var? f) - (make-neg f) - (neg-subf f))] - [(neg? f) (convert-to-nnf (neg-subf f))] - [(conj? f) (make-disj (convert-negation (conj-left f)) - (convert-negation (conj-right f)))] - [(disj? f) (make-conj (convert-negation (disj-left f)) - (convert-negation (disj-right f)))] - [else (error "Zła formuła -- CONVERT-NEGATION" f)])) - -(define (clause? x) - (and (list? x) - (andmap lit? x))) - -(define (clause-empty? x) - (and (clause? x) - (null? x))) - -(define (cnf? x) - (and (list? x) - (andmap clause? x))) - -(define (flatmap proc seq) - (foldl append null (map proc seq))) - -(define (convert-to-cnf f) - (define (convert f) - (cond [(lit? f) (list (list f))] - [(conj? f) (append (convert-to-cnf (conj-left f)) - (convert-to-cnf (conj-right f)))] - [(disj? f) - (let ((clause-left (convert-to-cnf (disj-left f))) - (clause-right (convert-to-cnf (disj-right f)))) - (flatmap (λ (clause) - (map (λ (clause2) - (append clause2 clause)) clause-left)) - clause-right))])) - (convert (convert-to-nnf f))) - -(define (falsifable-clause? clause) - (cond [(clause-empty? clause) true] - [(lit? (findf (λ (l) (equal? - l - (convert-to-nnf (make-neg (car clause))))) - clause)) false] - [else (falsifable-clause? (cdr clause))])) - -(define (falsifable-cnf? f) - (define (neg-value lit) - (if (var? lit) - (list lit false) - (list (neg-subf lit) true))) - (ormap (λ (clause) (if (falsifable-clause? clause) - (map neg-value clause) - false)) - (convert-to-cnf f)))
\ No newline at end of file diff --git a/Semestr 2/racket/cw.rkt b/Semestr 2/racket/cw.rkt deleted file mode 100644 index f1e706f..0000000 --- a/Semestr 2/racket/cw.rkt +++ /dev/null @@ -1,57 +0,0 @@ -#lang racket - -(define (accumulate op initial sequence) - (if (null? sequence) - initial - (op (car sequence) - (accumulate op initial (cdr sequence))))) - -(define (horner-eval x coefficient-sequence) - (accumulate (lambda (this-coeff higher-terms) - (+ this-coeff (* x higher-terms))) - 0 - coefficient-sequence)) - - -(define (accumulate-n op init seqs) - (if (null? (car seqs)) - null - (cons (accumulate op init (map car seqs)) - (accumulate-n op init (map cdr seqs))))) - -(define (count-leaves t) - (accumulate + 0 (map (lambda (x) - (if (not (pair? x)) - 1 - (count-leaves x))) t))) - -(define (flatmap proc seq) - (accumulate append null (map proc seq))) - -(define (prime? x) (= (modulo x 2) 1)) - -(define (prime-sum? pair) - (prime? (+ (car pair) (cadr pair)))) - -(define (make-pair-sum pair) - (list (car pair) (cadr pair) (+ (car pair) (cadr pair)))) - -(define (enumerate-interval low high) - (if (> low high) - null - (cons low (enumerate-interval (+ 1 low) high)))) - -(define (unique-pairs n) - (flatmap (lambda (i) - (map (lambda (j) (list j i)) - (enumerate-interval 1 (- i 1)))) - (enumerate-interval 1 n))) - -(define (prime-sum-pairs n) - (map make-pair-sum - (filter prime-sum? (unique-pairs n)))) - -(define (is-eq-s? s triplet) - (= s (accumulate + 0 triplet))) - -(define
\ No newline at end of file diff --git a/Semestr 2/racket/deriv.rkt b/Semestr 2/racket/deriv.rkt deleted file mode 100644 index 0eef9d2..0000000 --- a/Semestr 2/racket/deriv.rkt +++ /dev/null @@ -1,47 +0,0 @@ -#lang racket - -(define (variable? x) (symbol? x)) - -(define (same-variable? v1 v2) - (and (variable? v1) (variable? v2) (eq? v1 v2))) - -(define (=number? exp num) - (and (number? exp) (= exp num))) - -(define (make-sum a1 a2) - (cond ((=number? a1 0) a2) - ((=number? a2 0) a1) - ((and (number? a1) (number? a2) (+ a1 a2))) - (else (list '+ a1 a2)))) -(define (sum? x) - (and (pair? x) (eq? (car x) '+))) -(define (addend s) (cadr s)) -(define (augend s) (caddr s)) - -(define (make-product m1 m2) - (cond ((or (=number? m1 0) (=number? m2 0)) 0) - ((=number? m1 1) m2) - ((=number? m2 1) m1) - ((and (number? m1) (number? m2)) (* m1 m2)) - (else (list '* m1 m2)))) -(define (product? x) - (and (pair? x) (eq? (car x) '*))) -(define (multiplier p) (cadr p)) -(define (multiplicand p) (caddr p)) - -(define (deriv exp var) - (cond ((number? exp) 0) - ((variable? exp) - (if (same-variable? exp var) 1 0)) - ((sum? exp) - (make-sum (deriv (addend exp) var) - (deriv (augend exp) var))) - ((product? exp) - (make-sum - (make-product (multiplier exp) - (deriv (multiplicand exp) var)) - (make-product (deriv (multiplier exp) var) - (multiplicand exp)))) - (else - (error "Nieznany rodzaj wyrazenia -- DERIV" exp)))) -
\ No newline at end of file diff --git a/Semestr 2/racket/egzamin/rozw2.txt b/Semestr 2/racket/egzamin/rozw2.txt deleted file mode 100644 index a70232e..0000000 --- a/Semestr 2/racket/egzamin/rozw2.txt +++ /dev/null @@ -1 +0,0 @@ -Zasada indukcji dla
\ No newline at end of file diff --git a/Semestr 2/racket/egzamin/zad1.bak b/Semestr 2/racket/egzamin/zad1.bak deleted file mode 100644 index 6f1f7b4..0000000 --- a/Semestr 2/racket/egzamin/zad1.bak +++ /dev/null @@ -1 +0,0 @@ -#lang racket diff --git a/Semestr 2/racket/egzamin/zad1.rkt b/Semestr 2/racket/egzamin/zad1.rkt deleted file mode 100644 index a90d2fd..0000000 --- a/Semestr 2/racket/egzamin/zad1.rkt +++ /dev/null @@ -1,300 +0,0 @@ -#lang racket - -;; ZADANIE 1 -;; ========= - -;; W tym zadaniu rozważamy język WHILE (w formie z grubsza -;; odpowiadającej tej z wykładu), z blokami deklarującymi zmienne o -;; lokalnym zakresie. - -;; Zadanie polega na dodaniu do języka procedur definiowanych na -;; zewnątrz głównego polecenia programu (podobnie jak w C, gdzie -;; główne polecenie odpowiadałoby procedurze main, czy Pascalu) — o -;; dowolnym wybranym przez siebie modelu działania. W tym celu należy: -;; · rozszerzyć składnię abstrakcyjną o składnię procedur i rozbudować odpowiednio składnię programów -;; · rozszerzyć procedurę parsowania -;; · rozszerzyć ewaluator -;; · *opisać* wybrany model działania procedur, w tym jego potencjalne zalety lub ograniczenia -;; Należy rozszerzyć poniższy szablon, a część słowną zadania umieścić -;; w komentarzu, podobnie jak niniejsze polecenie. - -;; Uwaga! Zadanie jest *bardzo* szeroko sformułowane, jest wiele -;; sensownych rozwiązań które stosowały liczne języki imperatywne w -;; historii — nie jest treścią zadania znalezienie *najlepszego*, -;; tylko swojego, które *rozumiecie*. Wybrany model działania procedur -;; *może* być relatywnie ubogi, jednak jeśli tak się zrobi, warto -;; pokazać że ma się tego świadomość w słownym opisie jego działania. - -(struct const (val) #:transparent) -(struct binop (op l r) #:transparent) -(struct var-expr (name) #:transparent) -(struct call-expr (name args) #:transparent) -(struct return-expr (val) #:transparent) - -(define (operator? x) - (member x '(+ * - / > < = >= <=))) - -(define (keyword? x) - (member x '(skip while if := func call return))) - -(define (expr? e) - (match e - [(const v) - (integer? v)] - [(var-expr x) - (and (symbol? x) - (not (keyword? x)))] - [(binop op l r) - (and (operator? op) - (expr? l) - (expr? r))] - [_ false])) - -(struct skip () #:transparent) -(struct assign (id exp) #:transparent) -(struct if-cmd (exp ct cf) #:transparent) -(struct while (exp cmd) #:transparent) -(struct comp (left right) #:transparent) -(struct var-in (name expr cmd) #:transparent) -(struct function (name args cmd) #:transparent) - -(define (cmd? c) - (match c - [(skip) true] - [(assign x e) (and (symbol? x) (expr? e))] - [(if-cmd e ct cf) (and (expr? e) (cmd? ct) (cmd? cf))] - [(while e c) (and (expr? e) (cmd? c))] - [(comp c1 c2) (and (cmd? c1) (cmd? c2))] - [(var-in x e c) (and (symbol? x) (expr? e) (cmd? c))] - [(function f a c) (and (symbol? f) (list? a) (andmap symbol? a) (cmd? c))])) - -(define (prog? p) - (cmd? p)) - -(define (parse-expr p) - (cond - [(number? p) (const p)] - [(and (symbol? p) - (not (keyword? p))) - (var-expr p)] - [(and (list? p) - (= 3 (length p)) - (operator? (car p))) - (binop (first p) - (parse-expr (second p)) - (parse-expr (third p)))] - [(and (list? p) ; <------ wywołanie funkcji - (= (length p) 3) - (eq? (first p) 'call) - (symbol? (second p)) - (list? (third p))) - (call-expr (second p) (map parse-expr (third p)))] - [else false])) - -(define (parse-cmd q) - (cond - [(eq? q 'skip) (skip)] - [(and (list? q) - (= (length q) 3) - (eq? (second q) ':=)) - (assign (first q) (parse-expr (third q)))] - [(and (list? q) - (= (length q) 4) - (eq? (first q) 'if)) - (if-cmd (parse-expr (second q)) (parse-cmd (third q)) (parse-cmd (fourth q)))] - [(and (list? q) - (= (length q) 3) - (eq? (first q) 'while)) - (while (parse-expr (second q)) (parse-cmd (third q)))] - [(and (list? q) - (= (length q) 3) - (eq? (first q) 'var) - (list? (second q)) - (= (length (second q)) 2)) - (var-in (first (second q)) - (parse-expr (second (second q))) - (parse-cmd (third q)))] - [(and (list? q) ; <------ funkcje - (= (length q) 4) - (eq? (first q) 'func) - (symbol? (second q)) - (list? (third q)) - (andmap symbol? (third q))) - (function (second q) (third q) (parse-cmd (fourth q)))] - [(and (list? q) - (= (length q) 2) - (eq? (first q) 'return)) - (return-expr (parse-expr (second q)))] - [(and (list? q) - (>= (length q) 2)) - (desugar-comp (map parse-cmd q))] - [else false])) - -(define (desugar-comp cs) - (if (null? (cdr cs)) - (car cs) - (comp (car cs) - (desugar-comp (cdr cs))))) - -(define (value? v) - (number? v)) - -(struct mem (xs) #:transparent) - -(define (mem-lookup x m) - (define (assoc-lookup xs) - (cond - [(null? xs) (error "Undefined variable" x)] - [(eq? x (caar xs)) (cdar xs)] - [else (assoc-lookup (cdr xs))])) - (assoc-lookup (mem-xs m))) - -(define (mem-defined? x m) ; <----------- !!! Sprawdz, czy x jest w ogole zdefiniowane - (define (assoc-lookup xs) - (cond - [(null? xs) #f] - [(eq? x (caar xs) #t)] - [else (assoc-lookup (cdr xs))])) - (assoc-lookup (mem-xs m))) - -(define (mem-update x v m) - (define (assoc-update xs) - (cond - [(null? xs) (error "Undefined variable" x)] - [(eq? x (caar xs)) (cons (cons x v) (cdr xs))] - [else (cons (car xs) (assoc-update (cdr xs)))])) - (mem (assoc-update (mem-xs m)))) - -(define (mem-alloc x v m) - (mem (cons (cons x v) (mem-xs m)))) - -(define (mem-drop-last m) - (cond - [(null? (mem-xs m)) - (error "Deallocating from empty memory")] - [else - (mem (cdr (mem-xs m)))])) - -(define empty-mem - (mem null)) - -(define (op->proc op) - (match op - ['+ +] - ['- -] - ['* *] - ['/ /] - ['< (lambda (x y) (if (< x y) 1 0))] - ['> (lambda (x y) (if (> x y) 1 0))] - ['= (lambda (x y) (if (= x y) 1 0))] - ['<= (lambda (x y) (if (<= x y) 1 0))] - ['>= (lambda (x y) (if (>= x y) 1 0))] - )) - -;; zał: (expr? e) i (mem? m) jest prawdą -;; (value? (eval e m)) jest prawdą -(define (eval e m) - (match e - [(const v) v] - [(var-expr x) (mem-lookup x m)] - [(binop op l r) - (let ((vl (eval l m)) - (vr (eval r m)) - (p (op->proc op))) - (p vl vr))] - [(call-expr name args) - (match (mem-lookup name m) - [(clo func-args cmd) - (if (= (length args) (length func-args)) - (let* ([func-mem (assign-values args func-args m)] - [final-mem (eval-cmd cmd func-mem)] - [ret (mem-lookup 'RETURN final-mem)]) - (if ret - ret - (error "No return statement in function" name))) - (error "Arity mismatch, function" name "takes" (length func-args) ", got" (length args)))] - [else (error "Undefined function" name)])])) - -(define (assign-values args func-args mem) - (if (null? args) - mem - (assign-values (cdr args) (cdr func-args) (mem-alloc (car func-args) (eval (car args) mem) mem)))) - - -(struct clo (args cmd)) - -;; zał: (cmd? c) (mem? m) -;; (mem? (eval-cmd c m)) -(define (eval-cmd c m) - (if (mem-lookup 'RETURN m) - m - (match c - [(skip) m] - [(assign x e) (mem-update x (eval e m) m)] - [(if-cmd e ct cf) (if (= (eval e m) 0) - (eval-cmd cf m) - (eval-cmd ct m))] - [(while e cw) (if (= (eval e m) 0) - m - (let* ((m1 (eval-cmd cw m)) - (m2 (eval-cmd c m1))) - m2))] - [(comp c1 c2) (let* ((m1 (eval-cmd c1 m)) - (m2 (eval-cmd c2 m1))) - m2)] - [(var-in x e c) (let* ((v (eval e m)) - (m1 (mem-alloc x v m)) - (m2 (eval-cmd c m1))) - (mem-drop-last m2))] - [(function name args cmd) - (mem-alloc name (clo args cmd) m)] - [(return-expr val) - (mem-update 'RETURN (eval val m) m)] - [_ (error "Unknown command" c "— likely a syntax error")]))) - - -(define (eval-prog p m) - (let ((final-mem (eval-cmd p (mem-alloc 'RETURN #f m)))) - (with-handlers ([exn:fail? (lambda (v) (error "Undefined reference to main"))]) - (match (mem-lookup 'main final-mem) - [(clo args cmd) (mem-lookup 'RETURN (eval-cmd cmd final-mem))])))) - -(define WHILE_FACT - '({func decr (x) - {(x := (- x 1)) - (return x)}} - {func main () - {(i := 1) - (while (> t 0) - {(i := (* i t)) - (t := (call decr (t)))}) - (return i)}} - )) - -(define TEST - '({func decr (x) (return (- x 1))} - {func main () - (var (x 1) - {(x := (+ x 1)) - (return (call decr (x)))})})) - -(define TEST2 - '({func decr (x) (return (- x 1))} - {func main () (return (call decr (3)))})) - -(define TEST3 - '({func sth (x) - {(i := -1) - (return x)}} - {func main () - {(i := 2) - (return (call sth (i)))}})) - -(define TEST4 - '(func f () - {return 1})) - -(define (fact n) - (let* ([init-env (mem-alloc 'i 1 (mem-alloc 't n empty-mem))]) - (eval-prog (parse-cmd WHILE_FACT) init-env))) - diff --git a/Semestr 2/racket/egzamin/zad1a.bak b/Semestr 2/racket/egzamin/zad1a.bak deleted file mode 100644 index a90d2fd..0000000 --- a/Semestr 2/racket/egzamin/zad1a.bak +++ /dev/null @@ -1,300 +0,0 @@ -#lang racket - -;; ZADANIE 1 -;; ========= - -;; W tym zadaniu rozważamy język WHILE (w formie z grubsza -;; odpowiadającej tej z wykładu), z blokami deklarującymi zmienne o -;; lokalnym zakresie. - -;; Zadanie polega na dodaniu do języka procedur definiowanych na -;; zewnątrz głównego polecenia programu (podobnie jak w C, gdzie -;; główne polecenie odpowiadałoby procedurze main, czy Pascalu) — o -;; dowolnym wybranym przez siebie modelu działania. W tym celu należy: -;; · rozszerzyć składnię abstrakcyjną o składnię procedur i rozbudować odpowiednio składnię programów -;; · rozszerzyć procedurę parsowania -;; · rozszerzyć ewaluator -;; · *opisać* wybrany model działania procedur, w tym jego potencjalne zalety lub ograniczenia -;; Należy rozszerzyć poniższy szablon, a część słowną zadania umieścić -;; w komentarzu, podobnie jak niniejsze polecenie. - -;; Uwaga! Zadanie jest *bardzo* szeroko sformułowane, jest wiele -;; sensownych rozwiązań które stosowały liczne języki imperatywne w -;; historii — nie jest treścią zadania znalezienie *najlepszego*, -;; tylko swojego, które *rozumiecie*. Wybrany model działania procedur -;; *może* być relatywnie ubogi, jednak jeśli tak się zrobi, warto -;; pokazać że ma się tego świadomość w słownym opisie jego działania. - -(struct const (val) #:transparent) -(struct binop (op l r) #:transparent) -(struct var-expr (name) #:transparent) -(struct call-expr (name args) #:transparent) -(struct return-expr (val) #:transparent) - -(define (operator? x) - (member x '(+ * - / > < = >= <=))) - -(define (keyword? x) - (member x '(skip while if := func call return))) - -(define (expr? e) - (match e - [(const v) - (integer? v)] - [(var-expr x) - (and (symbol? x) - (not (keyword? x)))] - [(binop op l r) - (and (operator? op) - (expr? l) - (expr? r))] - [_ false])) - -(struct skip () #:transparent) -(struct assign (id exp) #:transparent) -(struct if-cmd (exp ct cf) #:transparent) -(struct while (exp cmd) #:transparent) -(struct comp (left right) #:transparent) -(struct var-in (name expr cmd) #:transparent) -(struct function (name args cmd) #:transparent) - -(define (cmd? c) - (match c - [(skip) true] - [(assign x e) (and (symbol? x) (expr? e))] - [(if-cmd e ct cf) (and (expr? e) (cmd? ct) (cmd? cf))] - [(while e c) (and (expr? e) (cmd? c))] - [(comp c1 c2) (and (cmd? c1) (cmd? c2))] - [(var-in x e c) (and (symbol? x) (expr? e) (cmd? c))] - [(function f a c) (and (symbol? f) (list? a) (andmap symbol? a) (cmd? c))])) - -(define (prog? p) - (cmd? p)) - -(define (parse-expr p) - (cond - [(number? p) (const p)] - [(and (symbol? p) - (not (keyword? p))) - (var-expr p)] - [(and (list? p) - (= 3 (length p)) - (operator? (car p))) - (binop (first p) - (parse-expr (second p)) - (parse-expr (third p)))] - [(and (list? p) ; <------ wywołanie funkcji - (= (length p) 3) - (eq? (first p) 'call) - (symbol? (second p)) - (list? (third p))) - (call-expr (second p) (map parse-expr (third p)))] - [else false])) - -(define (parse-cmd q) - (cond - [(eq? q 'skip) (skip)] - [(and (list? q) - (= (length q) 3) - (eq? (second q) ':=)) - (assign (first q) (parse-expr (third q)))] - [(and (list? q) - (= (length q) 4) - (eq? (first q) 'if)) - (if-cmd (parse-expr (second q)) (parse-cmd (third q)) (parse-cmd (fourth q)))] - [(and (list? q) - (= (length q) 3) - (eq? (first q) 'while)) - (while (parse-expr (second q)) (parse-cmd (third q)))] - [(and (list? q) - (= (length q) 3) - (eq? (first q) 'var) - (list? (second q)) - (= (length (second q)) 2)) - (var-in (first (second q)) - (parse-expr (second (second q))) - (parse-cmd (third q)))] - [(and (list? q) ; <------ funkcje - (= (length q) 4) - (eq? (first q) 'func) - (symbol? (second q)) - (list? (third q)) - (andmap symbol? (third q))) - (function (second q) (third q) (parse-cmd (fourth q)))] - [(and (list? q) - (= (length q) 2) - (eq? (first q) 'return)) - (return-expr (parse-expr (second q)))] - [(and (list? q) - (>= (length q) 2)) - (desugar-comp (map parse-cmd q))] - [else false])) - -(define (desugar-comp cs) - (if (null? (cdr cs)) - (car cs) - (comp (car cs) - (desugar-comp (cdr cs))))) - -(define (value? v) - (number? v)) - -(struct mem (xs) #:transparent) - -(define (mem-lookup x m) - (define (assoc-lookup xs) - (cond - [(null? xs) (error "Undefined variable" x)] - [(eq? x (caar xs)) (cdar xs)] - [else (assoc-lookup (cdr xs))])) - (assoc-lookup (mem-xs m))) - -(define (mem-defined? x m) ; <----------- !!! Sprawdz, czy x jest w ogole zdefiniowane - (define (assoc-lookup xs) - (cond - [(null? xs) #f] - [(eq? x (caar xs) #t)] - [else (assoc-lookup (cdr xs))])) - (assoc-lookup (mem-xs m))) - -(define (mem-update x v m) - (define (assoc-update xs) - (cond - [(null? xs) (error "Undefined variable" x)] - [(eq? x (caar xs)) (cons (cons x v) (cdr xs))] - [else (cons (car xs) (assoc-update (cdr xs)))])) - (mem (assoc-update (mem-xs m)))) - -(define (mem-alloc x v m) - (mem (cons (cons x v) (mem-xs m)))) - -(define (mem-drop-last m) - (cond - [(null? (mem-xs m)) - (error "Deallocating from empty memory")] - [else - (mem (cdr (mem-xs m)))])) - -(define empty-mem - (mem null)) - -(define (op->proc op) - (match op - ['+ +] - ['- -] - ['* *] - ['/ /] - ['< (lambda (x y) (if (< x y) 1 0))] - ['> (lambda (x y) (if (> x y) 1 0))] - ['= (lambda (x y) (if (= x y) 1 0))] - ['<= (lambda (x y) (if (<= x y) 1 0))] - ['>= (lambda (x y) (if (>= x y) 1 0))] - )) - -;; zał: (expr? e) i (mem? m) jest prawdą -;; (value? (eval e m)) jest prawdą -(define (eval e m) - (match e - [(const v) v] - [(var-expr x) (mem-lookup x m)] - [(binop op l r) - (let ((vl (eval l m)) - (vr (eval r m)) - (p (op->proc op))) - (p vl vr))] - [(call-expr name args) - (match (mem-lookup name m) - [(clo func-args cmd) - (if (= (length args) (length func-args)) - (let* ([func-mem (assign-values args func-args m)] - [final-mem (eval-cmd cmd func-mem)] - [ret (mem-lookup 'RETURN final-mem)]) - (if ret - ret - (error "No return statement in function" name))) - (error "Arity mismatch, function" name "takes" (length func-args) ", got" (length args)))] - [else (error "Undefined function" name)])])) - -(define (assign-values args func-args mem) - (if (null? args) - mem - (assign-values (cdr args) (cdr func-args) (mem-alloc (car func-args) (eval (car args) mem) mem)))) - - -(struct clo (args cmd)) - -;; zał: (cmd? c) (mem? m) -;; (mem? (eval-cmd c m)) -(define (eval-cmd c m) - (if (mem-lookup 'RETURN m) - m - (match c - [(skip) m] - [(assign x e) (mem-update x (eval e m) m)] - [(if-cmd e ct cf) (if (= (eval e m) 0) - (eval-cmd cf m) - (eval-cmd ct m))] - [(while e cw) (if (= (eval e m) 0) - m - (let* ((m1 (eval-cmd cw m)) - (m2 (eval-cmd c m1))) - m2))] - [(comp c1 c2) (let* ((m1 (eval-cmd c1 m)) - (m2 (eval-cmd c2 m1))) - m2)] - [(var-in x e c) (let* ((v (eval e m)) - (m1 (mem-alloc x v m)) - (m2 (eval-cmd c m1))) - (mem-drop-last m2))] - [(function name args cmd) - (mem-alloc name (clo args cmd) m)] - [(return-expr val) - (mem-update 'RETURN (eval val m) m)] - [_ (error "Unknown command" c "— likely a syntax error")]))) - - -(define (eval-prog p m) - (let ((final-mem (eval-cmd p (mem-alloc 'RETURN #f m)))) - (with-handlers ([exn:fail? (lambda (v) (error "Undefined reference to main"))]) - (match (mem-lookup 'main final-mem) - [(clo args cmd) (mem-lookup 'RETURN (eval-cmd cmd final-mem))])))) - -(define WHILE_FACT - '({func decr (x) - {(x := (- x 1)) - (return x)}} - {func main () - {(i := 1) - (while (> t 0) - {(i := (* i t)) - (t := (call decr (t)))}) - (return i)}} - )) - -(define TEST - '({func decr (x) (return (- x 1))} - {func main () - (var (x 1) - {(x := (+ x 1)) - (return (call decr (x)))})})) - -(define TEST2 - '({func decr (x) (return (- x 1))} - {func main () (return (call decr (3)))})) - -(define TEST3 - '({func sth (x) - {(i := -1) - (return x)}} - {func main () - {(i := 2) - (return (call sth (i)))}})) - -(define TEST4 - '(func f () - {return 1})) - -(define (fact n) - (let* ([init-env (mem-alloc 'i 1 (mem-alloc 't n empty-mem))]) - (eval-prog (parse-cmd WHILE_FACT) init-env))) - diff --git a/Semestr 2/racket/egzamin/zad1a.rkt b/Semestr 2/racket/egzamin/zad1a.rkt deleted file mode 100644 index a587359..0000000 --- a/Semestr 2/racket/egzamin/zad1a.rkt +++ /dev/null @@ -1,314 +0,0 @@ -#lang racket - -;; ZADANIE 1 -;; ========= - -;; W tym zadaniu rozważamy język WHILE (w formie z grubsza -;; odpowiadającej tej z wykładu), z blokami deklarującymi zmienne o -;; lokalnym zakresie. - -;; Zadanie polega na dodaniu do języka procedur definiowanych na -;; zewnątrz głównego polecenia programu (podobnie jak w C, gdzie -;; główne polecenie odpowiadałoby procedurze main, czy Pascalu) — o -;; dowolnym wybranym przez siebie modelu działania. W tym celu należy: -;; · rozszerzyć składnię abstrakcyjną o składnię procedur i rozbudować odpowiednio składnię programów -;; · rozszerzyć procedurę parsowania -;; · rozszerzyć ewaluator -;; · *opisać* wybrany model działania procedur, w tym jego potencjalne zalety lub ograniczenia -;; Należy rozszerzyć poniższy szablon, a część słowną zadania umieścić -;; w komentarzu, podobnie jak niniejsze polecenie. - -;; Uwaga! Zadanie jest *bardzo* szeroko sformułowane, jest wiele -;; sensownych rozwiązań które stosowały liczne języki imperatywne w -;; historii — nie jest treścią zadania znalezienie *najlepszego*, -;; tylko swojego, które *rozumiecie*. Wybrany model działania procedur -;; *może* być relatywnie ubogi, jednak jeśli tak się zrobi, warto -;; pokazać że ma się tego świadomość w słownym opisie jego działania. - -(struct const (val) #:transparent) -(struct binop (op l r) #:transparent) -(struct var-expr (name) #:transparent) -(struct call-expr (name args) #:transparent) -(struct return-expr (val) #:transparent) - -(define (operator? x) - (member x '(+ * - / > < = >= <=))) - -(define (keyword? x) - (member x '(skip while if := func call return))) - -(define (expr? e) - (match e - [(const v) - (integer? v)] - [(var-expr x) - (and (symbol? x) - (not (keyword? x)))] - [(binop op l r) - (and (operator? op) - (expr? l) - (expr? r))] - [_ false])) - -(struct skip () #:transparent) -(struct assign (id exp) #:transparent) -(struct if-cmd (exp ct cf) #:transparent) -(struct while (exp cmd) #:transparent) -(struct comp (left right) #:transparent) -(struct var-in (name expr cmd) #:transparent) -(struct function (name args cmd) #:transparent) - -(define (cmd? c) - (match c - [(skip) true] - [(assign x e) (and (symbol? x) (expr? e))] - [(if-cmd e ct cf) (and (expr? e) (cmd? ct) (cmd? cf))] - [(while e c) (and (expr? e) (cmd? c))] - [(comp c1 c2) (and (cmd? c1) (cmd? c2))] - [(var-in x e c) (and (symbol? x) (expr? e) (cmd? c))] - [(function f a c) (and (symbol? f) (list? a) (andmap symbol? a) (cmd? c))])) - -(define (prog? p) - (cmd? p)) - -(define (parse-expr p) - (cond - [(number? p) (const p)] - [(and (symbol? p) - (not (keyword? p))) - (var-expr p)] - [(and (list? p) - (= 3 (length p)) - (operator? (car p))) - (binop (first p) - (parse-expr (second p)) - (parse-expr (third p)))] - [(and (list? p) ; <------ wywołanie funkcji - (= (length p) 3) - (eq? (first p) 'call) - (symbol? (second p)) - (list? (third p))) - (call-expr (second p) (map parse-expr (third p)))] - [else false])) - -(define (parse-cmd q) - (cond - [(eq? q 'skip) (skip)] - [(and (list? q) - (= (length q) 3) - (eq? (second q) ':=)) - (assign (first q) (parse-expr (third q)))] - [(and (list? q) - (= (length q) 4) - (eq? (first q) 'if)) - (if-cmd (parse-expr (second q)) (parse-cmd (third q)) (parse-cmd (fourth q)))] - [(and (list? q) - (= (length q) 3) - (eq? (first q) 'while)) - (while (parse-expr (second q)) (parse-cmd (third q)))] - [(and (list? q) - (= (length q) 3) - (eq? (first q) 'var) - (list? (second q)) - (= (length (second q)) 2)) - (var-in (first (second q)) - (parse-expr (second (second q))) - (parse-cmd (third q)))] - [(and (list? q) ; <------ funkcje - (= (length q) 4) - (eq? (first q) 'func) - (symbol? (second q)) - (list? (third q)) - (andmap symbol? (third q))) - (function (second q) (third q) (parse-cmd (fourth q)))] - [(and (list? q) - (= (length q) 2) - (eq? (first q) 'return)) - (return-expr (parse-expr (second q)))] - [(and (list? q) - (>= (length q) 2)) - (desugar-comp (map parse-cmd q))] - [else false])) - -(define (desugar-comp cs) - (if (null? (cdr cs)) - (car cs) - (comp (car cs) - (desugar-comp (cdr cs))))) - -(define (value? v) - (number? v)) - -(struct mem (xs) #:transparent) - -(define (mem-lookup x m) - (define (assoc-lookup xs) - (cond - [(null? xs) (error "Undefined variable" x)] - [(eq? x (caar xs)) (cdar xs)] - [else (assoc-lookup (cdr xs))])) - (assoc-lookup (mem-xs m))) - -(define (mem-defined? x m) ; <----------- !!! Sprawdz, czy x jest w ogole zdefiniowane - (define (assoc-lookup xs) - (cond - [(null? xs) #f] - [(eq? x (caar xs) #t)] - [else (assoc-lookup (cdr xs))])) - (assoc-lookup (mem-xs m))) - -(define (mem-update x v m) - (define (assoc-update xs) - (cond - [(null? xs) (error "Undefined variable" x)] - [(eq? x (caar xs)) (cons (cons x v) (cdr xs))] - [else (cons (car xs) (assoc-update (cdr xs)))])) - (mem (assoc-update (mem-xs m)))) - -(define (mem-alloc x v m) - (mem (cons (cons x v) (mem-xs m)))) - -(define (mem-drop-last m) - (cond - [(null? (mem-xs m)) - (error "Deallocating from empty memory")] - [else - (mem (cdr (mem-xs m)))])) - -(define empty-mem - (mem null)) - -(define (op->proc op) - (match op - ['+ +] - ['- -] - ['* *] - ['/ /] - ['< (lambda (x y) (if (< x y) 1 0))] - ['> (lambda (x y) (if (> x y) 1 0))] - ['= (lambda (x y) (if (= x y) 1 0))] - ['<= (lambda (x y) (if (<= x y) 1 0))] - ['>= (lambda (x y) (if (>= x y) 1 0))] - )) - -;; zał: (expr? e) i (mem? m) jest prawdą -;; (value? (eval e m)) jest prawdą -(define (eval e m) - (match e - [(const v) v] - [(var-expr x) (mem-lookup x m)] - [(binop op l r) - (let ((vl (eval l m)) - (vr (eval r m)) - (p (op->proc op))) - (p vl vr))] - [(call-expr name args) - (match (mem-lookup name m) - [(clo func-args cmd) - (if (= (length args) (length func-args)) - (let* ([func-mem (assign-values args func-args m)] - [final-mem (eval-cmd cmd func-mem)] - [ret (mem-lookup 'RETURN final-mem)]) - (if ret - ret - (error "No return statement in function" name))) - (error "Arity mismatch, function" name "takes" (length func-args) ", got" (length args)))] - [else (error "Undefined function" name)])])) - -(define (assign-values args func-args mem) - (define (iter args func-args new-mem) - (if (null? args) - new-mem - (iter (cdr args) (cdr func-args) (mem-alloc (car func-args) (eval (car args) mem) new-mem)))) - (iter args func-args mem)) - - -(struct clo (args cmd)) - -;; zał: (cmd? c) (mem? m) -;; (mem? (eval-cmd c m)) -(define (eval-cmd c m) - (if (mem-lookup 'RETURN m) - m - (match c - [(skip) m] - [(assign x e) (mem-update x (eval e m) m)] - [(if-cmd e ct cf) (if (= (eval e m) 0) - (eval-cmd cf m) - (eval-cmd ct m))] - [(while e cw) (if (= (eval e m) 0) - m - (let* ((m1 (eval-cmd cw m)) - (m2 (eval-cmd c m1))) - m2))] - [(comp c1 c2) (let* ((m1 (eval-cmd c1 m)) - (m2 (eval-cmd c2 m1))) - m2)] - [(var-in x e c) (let* ((v (eval e m)) - (m1 (mem-alloc x v m)) - (m2 (eval-cmd c m1))) - (mem-drop-last m2))] - [(function name args cmd) - (mem-alloc name (clo args cmd) m)] - [(return-expr val) - (mem-update 'RETURN (eval val m) m)] - [_ (error "Unknown command" c "— likely a syntax error")]))) - - -(define (eval-prog p m) - (let ((final-mem (eval-cmd p (mem-alloc 'RETURN #f m)))) - (with-handlers ([exn:fail? (lambda (v) (error "Undefined reference to main"))]) - (match (mem-lookup 'main final-mem) - [(clo args cmd) (mem-lookup 'RETURN (eval-cmd cmd final-mem))])))) - -(define WHILE_FACT - '({func decr (x) - {(x := (- x 1)) - (return x)}} - {func main () - {(i := 1) - (while (> t 0) - {(i := (* i t)) - (t := (call decr (t)))}) - (return i)}} - )) - -(define (fact n) - (let* ([init-env (mem-alloc 'i 1 (mem-alloc 't n empty-mem))]) - (eval-prog (parse-cmd WHILE_FACT) init-env))) - -(define TEST - '({func decr (x) (return (- x 1))} - {func main () - (var (x 1) - {(x := (+ x 1)) - (return (call decr (x)))})})) - -(define TEST2 - '({func decr (x) (return (- x 1))} - {func main () (return (call decr (3)))})) - -(define TEST3 - '({func sth (x) - {(i := -1) - (return x)}} - {func main () - {(i := 2) - (return (call sth (i)))}})) - -(define TEST4 - '(func f () - {return 1})) - -(define TEST5 - '({func f1 (x y z) - (return y)} - {func f2 (x y z) - (return (+ (+ x y) z))} - {func main () - {(if (> 4 3) - (var (x 2) - (return (call f1 (1 x 3)))) - (x := 5)) - (return (call f2 (x 3 4)))}})) -
\ No newline at end of file diff --git a/Semestr 2/racket/egzamin/zad1b.bak b/Semestr 2/racket/egzamin/zad1b.bak deleted file mode 100644 index a587359..0000000 --- a/Semestr 2/racket/egzamin/zad1b.bak +++ /dev/null @@ -1,314 +0,0 @@ -#lang racket - -;; ZADANIE 1 -;; ========= - -;; W tym zadaniu rozważamy język WHILE (w formie z grubsza -;; odpowiadającej tej z wykładu), z blokami deklarującymi zmienne o -;; lokalnym zakresie. - -;; Zadanie polega na dodaniu do języka procedur definiowanych na -;; zewnątrz głównego polecenia programu (podobnie jak w C, gdzie -;; główne polecenie odpowiadałoby procedurze main, czy Pascalu) — o -;; dowolnym wybranym przez siebie modelu działania. W tym celu należy: -;; · rozszerzyć składnię abstrakcyjną o składnię procedur i rozbudować odpowiednio składnię programów -;; · rozszerzyć procedurę parsowania -;; · rozszerzyć ewaluator -;; · *opisać* wybrany model działania procedur, w tym jego potencjalne zalety lub ograniczenia -;; Należy rozszerzyć poniższy szablon, a część słowną zadania umieścić -;; w komentarzu, podobnie jak niniejsze polecenie. - -;; Uwaga! Zadanie jest *bardzo* szeroko sformułowane, jest wiele -;; sensownych rozwiązań które stosowały liczne języki imperatywne w -;; historii — nie jest treścią zadania znalezienie *najlepszego*, -;; tylko swojego, które *rozumiecie*. Wybrany model działania procedur -;; *może* być relatywnie ubogi, jednak jeśli tak się zrobi, warto -;; pokazać że ma się tego świadomość w słownym opisie jego działania. - -(struct const (val) #:transparent) -(struct binop (op l r) #:transparent) -(struct var-expr (name) #:transparent) -(struct call-expr (name args) #:transparent) -(struct return-expr (val) #:transparent) - -(define (operator? x) - (member x '(+ * - / > < = >= <=))) - -(define (keyword? x) - (member x '(skip while if := func call return))) - -(define (expr? e) - (match e - [(const v) - (integer? v)] - [(var-expr x) - (and (symbol? x) - (not (keyword? x)))] - [(binop op l r) - (and (operator? op) - (expr? l) - (expr? r))] - [_ false])) - -(struct skip () #:transparent) -(struct assign (id exp) #:transparent) -(struct if-cmd (exp ct cf) #:transparent) -(struct while (exp cmd) #:transparent) -(struct comp (left right) #:transparent) -(struct var-in (name expr cmd) #:transparent) -(struct function (name args cmd) #:transparent) - -(define (cmd? c) - (match c - [(skip) true] - [(assign x e) (and (symbol? x) (expr? e))] - [(if-cmd e ct cf) (and (expr? e) (cmd? ct) (cmd? cf))] - [(while e c) (and (expr? e) (cmd? c))] - [(comp c1 c2) (and (cmd? c1) (cmd? c2))] - [(var-in x e c) (and (symbol? x) (expr? e) (cmd? c))] - [(function f a c) (and (symbol? f) (list? a) (andmap symbol? a) (cmd? c))])) - -(define (prog? p) - (cmd? p)) - -(define (parse-expr p) - (cond - [(number? p) (const p)] - [(and (symbol? p) - (not (keyword? p))) - (var-expr p)] - [(and (list? p) - (= 3 (length p)) - (operator? (car p))) - (binop (first p) - (parse-expr (second p)) - (parse-expr (third p)))] - [(and (list? p) ; <------ wywołanie funkcji - (= (length p) 3) - (eq? (first p) 'call) - (symbol? (second p)) - (list? (third p))) - (call-expr (second p) (map parse-expr (third p)))] - [else false])) - -(define (parse-cmd q) - (cond - [(eq? q 'skip) (skip)] - [(and (list? q) - (= (length q) 3) - (eq? (second q) ':=)) - (assign (first q) (parse-expr (third q)))] - [(and (list? q) - (= (length q) 4) - (eq? (first q) 'if)) - (if-cmd (parse-expr (second q)) (parse-cmd (third q)) (parse-cmd (fourth q)))] - [(and (list? q) - (= (length q) 3) - (eq? (first q) 'while)) - (while (parse-expr (second q)) (parse-cmd (third q)))] - [(and (list? q) - (= (length q) 3) - (eq? (first q) 'var) - (list? (second q)) - (= (length (second q)) 2)) - (var-in (first (second q)) - (parse-expr (second (second q))) - (parse-cmd (third q)))] - [(and (list? q) ; <------ funkcje - (= (length q) 4) - (eq? (first q) 'func) - (symbol? (second q)) - (list? (third q)) - (andmap symbol? (third q))) - (function (second q) (third q) (parse-cmd (fourth q)))] - [(and (list? q) - (= (length q) 2) - (eq? (first q) 'return)) - (return-expr (parse-expr (second q)))] - [(and (list? q) - (>= (length q) 2)) - (desugar-comp (map parse-cmd q))] - [else false])) - -(define (desugar-comp cs) - (if (null? (cdr cs)) - (car cs) - (comp (car cs) - (desugar-comp (cdr cs))))) - -(define (value? v) - (number? v)) - -(struct mem (xs) #:transparent) - -(define (mem-lookup x m) - (define (assoc-lookup xs) - (cond - [(null? xs) (error "Undefined variable" x)] - [(eq? x (caar xs)) (cdar xs)] - [else (assoc-lookup (cdr xs))])) - (assoc-lookup (mem-xs m))) - -(define (mem-defined? x m) ; <----------- !!! Sprawdz, czy x jest w ogole zdefiniowane - (define (assoc-lookup xs) - (cond - [(null? xs) #f] - [(eq? x (caar xs) #t)] - [else (assoc-lookup (cdr xs))])) - (assoc-lookup (mem-xs m))) - -(define (mem-update x v m) - (define (assoc-update xs) - (cond - [(null? xs) (error "Undefined variable" x)] - [(eq? x (caar xs)) (cons (cons x v) (cdr xs))] - [else (cons (car xs) (assoc-update (cdr xs)))])) - (mem (assoc-update (mem-xs m)))) - -(define (mem-alloc x v m) - (mem (cons (cons x v) (mem-xs m)))) - -(define (mem-drop-last m) - (cond - [(null? (mem-xs m)) - (error "Deallocating from empty memory")] - [else - (mem (cdr (mem-xs m)))])) - -(define empty-mem - (mem null)) - -(define (op->proc op) - (match op - ['+ +] - ['- -] - ['* *] - ['/ /] - ['< (lambda (x y) (if (< x y) 1 0))] - ['> (lambda (x y) (if (> x y) 1 0))] - ['= (lambda (x y) (if (= x y) 1 0))] - ['<= (lambda (x y) (if (<= x y) 1 0))] - ['>= (lambda (x y) (if (>= x y) 1 0))] - )) - -;; zał: (expr? e) i (mem? m) jest prawdą -;; (value? (eval e m)) jest prawdą -(define (eval e m) - (match e - [(const v) v] - [(var-expr x) (mem-lookup x m)] - [(binop op l r) - (let ((vl (eval l m)) - (vr (eval r m)) - (p (op->proc op))) - (p vl vr))] - [(call-expr name args) - (match (mem-lookup name m) - [(clo func-args cmd) - (if (= (length args) (length func-args)) - (let* ([func-mem (assign-values args func-args m)] - [final-mem (eval-cmd cmd func-mem)] - [ret (mem-lookup 'RETURN final-mem)]) - (if ret - ret - (error "No return statement in function" name))) - (error "Arity mismatch, function" name "takes" (length func-args) ", got" (length args)))] - [else (error "Undefined function" name)])])) - -(define (assign-values args func-args mem) - (define (iter args func-args new-mem) - (if (null? args) - new-mem - (iter (cdr args) (cdr func-args) (mem-alloc (car func-args) (eval (car args) mem) new-mem)))) - (iter args func-args mem)) - - -(struct clo (args cmd)) - -;; zał: (cmd? c) (mem? m) -;; (mem? (eval-cmd c m)) -(define (eval-cmd c m) - (if (mem-lookup 'RETURN m) - m - (match c - [(skip) m] - [(assign x e) (mem-update x (eval e m) m)] - [(if-cmd e ct cf) (if (= (eval e m) 0) - (eval-cmd cf m) - (eval-cmd ct m))] - [(while e cw) (if (= (eval e m) 0) - m - (let* ((m1 (eval-cmd cw m)) - (m2 (eval-cmd c m1))) - m2))] - [(comp c1 c2) (let* ((m1 (eval-cmd c1 m)) - (m2 (eval-cmd c2 m1))) - m2)] - [(var-in x e c) (let* ((v (eval e m)) - (m1 (mem-alloc x v m)) - (m2 (eval-cmd c m1))) - (mem-drop-last m2))] - [(function name args cmd) - (mem-alloc name (clo args cmd) m)] - [(return-expr val) - (mem-update 'RETURN (eval val m) m)] - [_ (error "Unknown command" c "— likely a syntax error")]))) - - -(define (eval-prog p m) - (let ((final-mem (eval-cmd p (mem-alloc 'RETURN #f m)))) - (with-handlers ([exn:fail? (lambda (v) (error "Undefined reference to main"))]) - (match (mem-lookup 'main final-mem) - [(clo args cmd) (mem-lookup 'RETURN (eval-cmd cmd final-mem))])))) - -(define WHILE_FACT - '({func decr (x) - {(x := (- x 1)) - (return x)}} - {func main () - {(i := 1) - (while (> t 0) - {(i := (* i t)) - (t := (call decr (t)))}) - (return i)}} - )) - -(define (fact n) - (let* ([init-env (mem-alloc 'i 1 (mem-alloc 't n empty-mem))]) - (eval-prog (parse-cmd WHILE_FACT) init-env))) - -(define TEST - '({func decr (x) (return (- x 1))} - {func main () - (var (x 1) - {(x := (+ x 1)) - (return (call decr (x)))})})) - -(define TEST2 - '({func decr (x) (return (- x 1))} - {func main () (return (call decr (3)))})) - -(define TEST3 - '({func sth (x) - {(i := -1) - (return x)}} - {func main () - {(i := 2) - (return (call sth (i)))}})) - -(define TEST4 - '(func f () - {return 1})) - -(define TEST5 - '({func f1 (x y z) - (return y)} - {func f2 (x y z) - (return (+ (+ x y) z))} - {func main () - {(if (> 4 3) - (var (x 2) - (return (call f1 (1 x 3)))) - (x := 5)) - (return (call f2 (x 3 4)))}})) -
\ No newline at end of file diff --git a/Semestr 2/racket/egzamin/zad1b.rkt b/Semestr 2/racket/egzamin/zad1b.rkt deleted file mode 100644 index 628619f..0000000 --- a/Semestr 2/racket/egzamin/zad1b.rkt +++ /dev/null @@ -1,482 +0,0 @@ -#lang racket - - - -;; Oświadczam, że rozwiązanie zadania egzaminacyjnego przygotowałem -;; w pełni samodzielnie, korzystając wyłącznie z materiałów do wykładu, -;; notatek, podręcznika, oraz materiałów zacytowanych w treści rozwiązania. -;; Oświadczam że nie korzystałem w żadnej formie z pomocy osób trzecich -;; w przygotowaniu rozwiązania ani też takiej pomocy nie udzielałem -;; i nie udostępniałem nikomu swojego rozwiązania. - -;; ZADANIE 1 -;; ========= - -;; W tym zadaniu rozważamy język WHILE (w formie z grubsza -;; odpowiadającej tej z wykładu), z blokami deklarującymi zmienne o -;; lokalnym zakresie. - -;; Zadanie polega na dodaniu do języka procedur definiowanych na -;; zewnątrz głównego polecenia programu (podobnie jak w C, gdzie -;; główne polecenie odpowiadałoby procedurze main, czy Pascalu) — o -;; dowolnym wybranym przez siebie modelu działania. W tym celu należy: -;; · rozszerzyć składnię abstrakcyjną o składnię procedur i rozbudować odpowiednio składnię programów -;; · rozszerzyć procedurę parsowania -;; · rozszerzyć ewaluator -;; · *opisać* wybrany model działania procedur, w tym jego potencjalne zalety lub ograniczenia -;; Należy rozszerzyć poniższy szablon, a część słowną zadania umieścić -;; w komentarzu, podobnie jak niniejsze polecenie. - -;; Uwaga! Zadanie jest *bardzo* szeroko sformułowane, jest wiele -;; sensownych rozwiązań które stosowały liczne języki imperatywne w -;; historii — nie jest treścią zadania znalezienie *najlepszego*, -;; tylko swojego, które *rozumiecie*. Wybrany model działania procedur -;; *może* być relatywnie ubogi, jednak jeśli tak się zrobi, warto -;; pokazać że ma się tego świadomość w słownym opisie jego działania. - - - - - - - -;; Postanowiłem, że struktura programów w moim języku będzie miała trochę z pythona i trochę z C. -;; Istotną decyzją którą podjąłem jest to, że wszystkie funkcje w naszym języku muszą zwracać -;; jakąś wartość (zawsze zwracają inta), łącznie z funkcją main, przy pomocy dyrektywy "return". -;; To, co zwraca main, jest tym co zwraca -;; cały program (z małym wyjątkiem, ale o tym później). Okazało się, że takie podejście -;; do sprawy jest bardzo wygodne -- nie musiałem się dzięki temu nawet przejmować -;; osobnym implementowaniem funkcji rekurencyjnych, wzajemnie rekurencyjnych -;; czy nawet zagnieżdżonych, a do tego można definiować funkcje w dowolnej kolejności! -;; Co więcej, funkcje przyjmują dowolnie wiele argumentów, również 0. -;; On top of that, do funkcji można przekazywać cokolwiek co ewaluuje się do wartości -;; Czyli mozna przekazywać wartości zmiennych, jak i dowolne wyrażenia! - -;; Oto przykładowy kod, po którym raczej jasno widać w jak wygląda nowa składnia: -(define BINOM '({func main () - (return (call binom (N K)))} - {func fact (t) - (if (= t 0) - (return 1) - ({func decr (x) (return (- x 1))} - (return (* t (call fact ((call decr (t))))))))} - {func binom (n k) - (if (= k 0) - (return 1) - (var (num (call fact (n))) - (var (den (* (call fact (k)) (call fact ((- n k))))) - (return (/ num den)))))} - )) -(define (bin n k) - (eval-prog (parse-cmd BINOM) (mem-alloc 'i 1 (mem-alloc 'N n (mem-alloc 'K k empty-mem))))) -;; Specjalnie trochę pokomplikowałem, ale widać featury naszego języka. - -;; Jak to w ogóle działa? - -;; Za każdym razem, kiedy definiuję funkcję, to do środowiska dodaję parę (nazwa funkcji . clo), -;; gdzie clo jest takim quasi-domknięciem, jest to po prostu struktura trzymająca nazwy -;; argumentów funkcji oraz jej ciało. Właśnie takie podejście bardzo dobrze -;; załatwiło łatwość w definiowaniu funkcji rekurencyjnych oraz wzajemnie rekurencyjnych i -;; zagnieżdżonych -- żadna funkcja nie zostanie wywołana, dopóki nie wywołam maina, -;; a tego wywołam dopiero po zewaluowaniu wszystkich definicji (tym samym dodaniu ich do środowiska). - -;; Takie podejście ma trochę problemów, chyba największym z nich jest to, że nie ma możliwości -;; zmiany wartości globalnych wewnątrz funkcji. Tj. możemy je zmieniać, ale zmiany będą -;; widoczne jedynie w jej lokalnym zakresie. -;; W zasadzie nie jest to aż tak bolesne -- globalne zmienne możemy traktować po prostu -;; jak argumenty wywołania funkcji main. - -;; Wywoływać funkcję mogę tylko za pomocą specjalnego wyrażenia call, -;; które jako pierwszy argument -;; przyjmuje nazwę funkcji, a jako drugi przyjmuje listę argumentów. -;; Żeby wiedzieć jak działa call, spójrzmy najpierw jak działa return. - -;; return napisane jest tak, że jeśli w jakimkolwiek miejscu funkcji -;; się na niego trafi, to reszta funkcji nie jest już wywoływana -;; (czyli tak jakbyśmy sie spodziewali). Jak on w sumie działa? -;; Na samym początku eval-prog, zanim zacznę w ogóle ewaluować definicje funkcji, -;; dodaje do środowiska specjalną zmienną o nazwie RETURN o wartości #f. -;; Jeśli w funkcji gdziekolwiek wywołam returna, to -;; zmieniam wartość RETURN w środowisku na to, co chcę zwrócić. -;; W eval-cmd za każdym razem sprawdzam jaka jest wartość RETURN. -;; Jeśli jest to #f, to pracuje jakby nigdy nic, a jeśli jest to coś innego, -;; to po prostu zwracam aktualne środowisko. -;; Zatem funkcja zwraca środowisko, w którym zmienna RETURN -;; ustawiona jest na wynik jej obliczenia. - -;; Teraz już prosto widać, że jedyne co robi call, to szuka ciała funkcji -;; w środowisku i wywołuje ją dla podanych argumentów, dostaje od tej -;; funkcji środowisko, a następnie odzyskuje wartość RETURN w zwróconym -;; przez nią środowisku. Dzięki temu po wywołaniu funkcji -;; wewnątrz innej funkcji nie zmienią się wartości żadnych zmiennych (w tym globalnych). -;; Jest to dosyć podobne do pythona -- tam inty są immutable i nie można ich wysłać przez -;; referencję. Ale możemy to robić jeśli się uprzemy np. tak: -;; {func decr (x) -;; (return (- x 1))} -;; {func main () -;; {(i := (call decr (i))) -;; (return i)} -;; Uruchomienie takiego programu ze zmienną globalną i zwróci oczywiście i-1. - -;; Mały problem którego za bardzo nie umiem rozwiązać jest taki, że jeśli gdzieś poza -;; jakąkolwiek funkcją wywołam return, to wartość którą tam zwrócę będzie -;; wartością dla całego programu, bo zmienna RETURN w środowisku zmieni swoją wartość -;; na coś innego od #f i niestety main nawet się nie wykona (na samym wstępie stwierdzi, -;; że coś zostało już zwrócone). Widać to w TEST10. Generalnie co za tym idzie, -;; między definicjami funkcji mogą być jakieś instrukcje, które zostaną -;; wywołane razem z ewaluacją programu, zanim zostanie wywołany main. - -;; Dodatkowe informacje umieściłem w komentarzach w odpowiednich miejscach pliku. -;; Na dole umieściłem kilka testów które pokazują co jak działa. - -(struct const (val) #:transparent) -(struct binop (op l r) #:transparent) -(struct var-expr (name) #:transparent) -(struct call-expr (name args) #:transparent) ;; wywołanie funkcji - -(define (operator? x) - (member x '(+ * - / > < = >= <=))) - -(define (keyword? x) - (member x '(skip while if := func func-rec call return))) ;; kilka nowych słów kluczowych - -(define (expr? e) - (match e - [(const v) - (integer? v)] - [(var-expr x) - (and (symbol? x) - (not (keyword? x)))] - [(binop op l r) - (and (operator? op) - (expr? l) - (expr? r))] - [(call-expr n a) - (and (symbol? n) - (list? a) - (andmap expr? a))] - [_ false])) - -(struct skip () #:transparent) -(struct assign (id exp) #:transparent) -(struct if-cmd (exp ct cf) #:transparent) -(struct while (exp cmd) #:transparent) -(struct comp (left right) #:transparent) -(struct var-in (name expr cmd) #:transparent) -(struct function (name args cmd) #:transparent) ;; dodane funkcje, funkcje rekurencyjne oraz return -(struct funcrec (name args cmd) #:transparent) -(struct return-stat (exp) #:transparent) - -(define (cmd? c) - (match c - [(skip) true] - [(assign x e) (and (symbol? x) (expr? e))] - [(if-cmd e ct cf) (and (expr? e) (cmd? ct) (cmd? cf))] - [(while e c) (and (expr? e) (cmd? c))] - [(comp c1 c2) (and (cmd? c1) (cmd? c2))] - [(var-in x e c) (and (symbol? x) (expr? e) (cmd? c))] - [(function f a c) (and (symbol? f) (list? a) (andmap symbol? a) (cmd? c))] - [(funcrec f a c) (and (symbol? f) (list? a) (andmap symbol? a) (cmd? c))] - [(return-stat exp) (expr? exp)])) - -(define (prog? p) - (cmd? p)) - -(define (parse-expr p) - (cond - [(number? p) (const p)] - [(and (symbol? p) - (not (keyword? p))) - (var-expr p)] - [(and (list? p) - (= 3 (length p)) - (operator? (car p))) - (binop (first p) - (parse-expr (second p)) - (parse-expr (third p)))] - [(and (list? p) ; <------ wywołanie funkcji - (= (length p) 3) - (eq? (first p) 'call) - (symbol? (second p)) - (list? (third p))) - (call-expr (second p) (map parse-expr (third p)))] - [else false])) - -(define (parse-cmd q) - (cond - [(eq? q 'skip) (skip)] - [(and (list? q) - (= (length q) 3) - (eq? (second q) ':=)) - (assign (first q) (parse-expr (third q)))] - [(and (list? q) - (= (length q) 4) - (eq? (first q) 'if)) - (if-cmd (parse-expr (second q)) (parse-cmd (third q)) (parse-cmd (fourth q)))] - [(and (list? q) - (= (length q) 3) - (eq? (first q) 'while)) - (while (parse-expr (second q)) (parse-cmd (third q)))] - [(and (list? q) - (= (length q) 3) - (eq? (first q) 'var) - (list? (second q)) - (= (length (second q)) 2)) - (var-in (first (second q)) - (parse-expr (second (second q))) - (parse-cmd (third q)))] - [(and (list? q) ; <------ funkcje - (= (length q) 4) - (eq? (first q) 'func) - (symbol? (second q)) - (list? (third q)) - (andmap symbol? (third q))) - (function (second q) (third q) (parse-cmd (fourth q)))] - [(and (list? q) ; <------ return - (= (length q) 2) - (eq? (first q) 'return)) - (return-stat (parse-expr (second q)))] - [(and (list? q) - (>= (length q) 2)) - (desugar-comp (map parse-cmd q))] - [else false])) - -(define (desugar-comp cs) - (if (null? (cdr cs)) - (car cs) - (comp (car cs) - (desugar-comp (cdr cs))))) - -(define (value? v) - (number? v)) - -(struct mem (xs) #:transparent) - -(define (mem-lookup x m) - (define (assoc-lookup xs) - (cond - [(null? xs) (error "Undefined variable" x)] - [(eq? x (caar xs)) (cdar xs)] - [else (assoc-lookup (cdr xs))])) - (assoc-lookup (mem-xs m))) - -(define (mem-update x v m) - (define (assoc-update xs) - (cond - [(null? xs) (error "Undefined variable" x)] - [(eq? x (caar xs)) (cons (cons x v) (cdr xs))] - [else (cons (car xs) (assoc-update (cdr xs)))])) - (mem (assoc-update (mem-xs m)))) - -(define (mem-alloc x v m) - (mem (cons (cons x v) (mem-xs m)))) - -(define (mem-drop-last m) - (cond - [(null? (mem-xs m)) - (error "Deallocating from empty memory")] - [else - (mem (cdr (mem-xs m)))])) - -(define empty-mem - (mem null)) - -(define (op->proc op) - (match op - ['+ +] - ['- -] - ['* *] - ['/ /] - ['< (lambda (x y) (if (< x y) 1 0))] - ['> (lambda (x y) (if (> x y) 1 0))] - ['= (lambda (x y) (if (= x y) 1 0))] - ['<= (lambda (x y) (if (<= x y) 1 0))] - ['>= (lambda (x y) (if (>= x y) 1 0))] - )) - -;; zał: (expr? e) i (mem? m) jest prawdą -;; (value? (eval e m)) jest prawdą -(define (eval e m) - (match e - [(const v) v] - [(var-expr x) (mem-lookup x m)] - [(binop op l r) - (let ((vl (eval l m)) - (vr (eval r m)) - (p (op->proc op))) - (p vl vr))] - [(call-expr name args) ;; <------ ewaluacja wywołania funkcji - (match (mem-lookup name m) - [(clo func-args cmd) - (if (= (length args) (length func-args)) ;; <------ sprawdzanie arnosci - (let* ([func-mem (assign-values args func-args m)] - [final-mem (eval-cmd cmd func-mem)] - [ret (mem-lookup 'RETURN final-mem)]) - (if ret - ret - (error "No return statement in function" name))) - (error "Arity mismatch, function" name "takes" (length func-args) "arguments, got" (length args)))] - [else (error "Undefined function" name)])])) - -(define (assign-values args func-args mem) ;; <------ przypisanie wartosci do argumentow funkcji - (define (iter args func-args new-mem) - (if (null? args) - new-mem - (iter (cdr args) (cdr func-args) (mem-alloc (car func-args) (eval (car args) mem) new-mem)))) - (iter args func-args mem)) - - -(struct clo (args cmd)) ; <----- tak trzymana jest funkcja w środowisku, tj. jako lista nazw argumentow i cialo funkcji - -;; zał: (cmd? c) (mem? m) -;; (mem? (eval-cmd c m)) -(define (eval-cmd c m) - (if (mem-lookup 'RETURN m) ; <----- jeśli RETURN jest na coś ustawione, to chcemy zrwócic pamięc - m - (match c - [(skip) m] - [(assign x e) (mem-update x (eval e m) m)] - [(if-cmd e ct cf) (if (= (eval e m) 0) - (eval-cmd cf m) - (eval-cmd ct m))] - [(while e cw) (if (= (eval e m) 0) - m - (let* ((m1 (eval-cmd cw m)) - (m2 (eval-cmd c m1))) - m2))] - [(comp c1 c2) (let* ((m1 (eval-cmd c1 m)) - (m2 (eval-cmd c2 m1))) - m2)] - [(var-in x e c) (let* ((v (eval e m)) - (m1 (mem-alloc x v m)) - (m2 (eval-cmd c m1))) - (mem-drop-last m2))] - [(function name args cmd) ; <------ dodanie ciała funkcji do środowiska - (mem-alloc name (clo args cmd) m)] - [(return-stat val) ; <------ zmiana wartości zmiennej RETURN - (mem-update 'RETURN (eval val m) m)] - [_ (error "Unknown command" c "— likely a syntax error")]))) - - -;; program ewaluowany jest tak -;; ewaluowane są wszystkie definicje funkcji, wtedy -;; ręcznie szukam definicji main i ewaluuje jej ciało i zwracam to co zwróci main. -;; zakładam, że main nie przyjmuje żadnych argumentów. -(define (eval-prog p m) - (let ((final-mem (eval-cmd p (mem-alloc 'RETURN #f m)))) - (match (mem-lookup 'main final-mem) - [(clo args cmd) - (let ((res (mem-lookup 'RETURN (eval-cmd cmd final-mem)))) - (if res res (error "No return statement in main")))]))) - -(define WHILE_FACT - '({func decr (x) - {(x := (- x 1)) - (return x)}} - {func main () - {(i := 1) - (while (> t 0) - {(i := (* i t)) - (t := (call decr (t)))}) - (return i)}} - )) - -(define (fact n) - (let* ([init-env (mem-alloc 'i 1 (mem-alloc 't n empty-mem))]) - (eval-prog (parse-cmd WHILE_FACT) init-env))) - -(define TEST - '({func decr (x) (return (- x 1))} - {func main () - (var (x 1) - {(x := (+ x 2)) - (return (call decr (x)))})})) -(define (test) (eval-prog (parse-cmd TEST) empty-mem)) - -(define TEST2 - '({func decr (x) (return (- x 1))} - {func main () (return (call decr (3)))})) -(define (test2) (eval-prog (parse-cmd TEST2) empty-mem)) - -; nie da się zmienić wartości zmiennej globalnej, zmienne są wysyłane przez kopie -(define TEST3 - '({func sth (x) - {(i := -1) - (return x)}} - {func main () - {(i := 2) - (return (call sth (i)))}})) -(define (test3) (eval-prog (parse-cmd TEST3) (mem-alloc 'i 3 empty-mem))) - -; nie ma maina, wywala błąd -(define TEST4 - '(func f () - {return 1})) -(define (test4) (eval-prog (parse-cmd TEST4) empty-mem)) - -; funkcje wieloargumentowe -(define TEST5 - '({func f1 (x y z) - (return y)} - {func f2 (x y z) - (return (+ (+ x y) z))} - {func main () - {(if (> X 3) - (var (x 2) - (return (call f1 (1 x 3)))) - (x := 5)) - (return (call f2 (x 3 4)))}})) -(define (test5) (eval-prog (parse-cmd TEST5) (mem-alloc 'x -1 (mem-alloc 'X 4 empty-mem)))) - -; Działa rekurencja!! -(define TEST6 - '({func f (x) - (if (= x 0) - (return 1) - (return (* x (call f ((- x 1))))))} - {func main () - (return (call f (X)))})) -(define (test6) (eval-prog (parse-cmd TEST6) (mem-alloc 'X 5 empty-mem))) - -; kolejnośc deklaracji funkcji nie ma znaczenia, można zagnieżdżać funkcje -(define TEST7 - '( - {func main () - (return (call f (2)))} - {func f (x) - (return (call f1 (x)))} - {func f1 (x) - {{func local-fun (x) - (return (+ 1 x))} - (return (call local-fun (x)))}})) -(define (test7) (eval-prog (parse-cmd TEST7) empty-mem)) - -; instrukcje poza jakimikolwiek funkcjami sa wykonywane przed wywołaniem main -(define TEST8 - '({func main () - (return i)} - (i := 2))) -(define (test8) (eval-prog (parse-cmd TEST8) (mem-alloc 'i 1 empty-mem))) - -; nic nie zwraca main, wywala błąd -(define TEST9 - '(func main () - (i := 1))) -(define (test9) (eval-prog (parse-cmd TEST9) (mem-alloc 'i 1 empty-mem))) - -; return poza jakąkolwiek funkcją jest wynikiem programu -(define TEST10 - '({func main () - (return i)} - (i := 2) - (return -1))) -(define (test10) (eval-prog (parse-cmd TEST10) (mem-alloc 'i 1 empty-mem))) - - -; arity mismatch -(define TEST11 - '({func main () - (return (call decr ()))} - {func decr (x) - (return (- x 1))})) -(define (test11) (eval-prog (parse-cmd TEST11) empty-mem)) diff --git a/Semestr 2/racket/egzamin/zad2.bak b/Semestr 2/racket/egzamin/zad2.bak deleted file mode 100644 index 02e2ae0..0000000 --- a/Semestr 2/racket/egzamin/zad2.bak +++ /dev/null @@ -1,119 +0,0 @@ -#lang racket - -;; ZADANIE 2 -;; ========= - -;; W tym zadaniu przyjrzymy się pierwszemu "językowi programowania" -;; który widzieliśmy na zajęciach: wyrażeniom arytmetycznym. Ich -;; prostota przejawia się przede wszystkim tym że nie występują w nich -;; zmienne (a w szczególności ich wiązanie) — dlatego możemy o nich -;; wnioskować nie używając narzędzi cięższych niż te poznane na -;; wykładzie. - -;; W tym zadaniu będziemy chcieli udowodnić że nasza prosta kompilacja -;; do odwrotnej notacji polskiej jest poprawna. Konkretniej, należy -;; · sformułować zasady indukcji dla obydwu typów danych -;; reprezentujących wyrażenia (expr? i rpn-expr?) -;; · sformułować i udowodnić twierdzenie mówiące że kompilacja -;; zachowuje wartość programu, tj. że obliczenie wartości programu -;; jest równoważne skompilowaniu go do RPN i obliczeniu. -;; · sformułować i udowodnić twierdzenie mówiące że translacja z RPN -;; do wyrażeń arytmetycznych (ta która była zadaniem domowym; -;; implementacja jest poniżej) jest (prawą) odwrotnością translacji -;; do RPN (czyli że jak zaczniemy od wyrażenia i przetłumaczymy do -;; RPN i z powrotem, to dostaniemy to samo wyrażenie). -;; Swoje rozwiązanie należy wpisać na końcu tego szablonu w -;; komentarzu, podobnie do niniejszej treści zadania; proszę zadbać o -;; czytelność dowodów! - -(struct const (val) #:transparent) -(struct binop (op l r) #:transparent) - -(define (operator? x) - (member x '(+ * - /))) - -(define (expr? e) - (match e - [(const v) - (integer? v)] - [(binop op l r) - (and (operator? op) - (expr? l) - (expr? r))] - [_ false])) - - -(define (value? v) - (number? v)) - -(define (op->proc op) - (match op - ['+ +] - ['- -] - ['* *] - ['/ /])) - -;; zał: (expr? e) jest prawdą -;; (value? (eval e)) jest prawdą -(define (eval e) - (match e - [(const v) v] - [(binop op l r) - (let ((vl (eval l)) - (vr (eval r)) - (p (op->proc op))) - (p vl vr))])) - -(define (rpn-expr? e) - (and (list? e) - (pair? e) - (andmap (lambda (x) (or (number? x) (operator? x))) e))) - - -(struct stack (xs)) - -(define empty-stack (stack null)) -(define (empty-stack? s) (null? (stack-xs s))) -(define (top s) (car (stack-xs s))) -(define (push a s) (stack (cons a (stack-xs s)))) -(define (pop s) (stack (cdr (stack-xs s)))) - - -(define (eval-am e s) - (cond - [(null? e) (top s)] - [(number? (car e)) (eval-am (cdr e) (push (car e) s))] - [(operator? (car e)) - (let* ((vr (top s)) - (s (pop s)) - (vl (top s)) - (s (pop s)) - (v ((op->proc (car e)) vl vr))) - (eval-am (cdr e) (push v s)))])) - -(define (rpn-eval e) - (eval-am e empty-stack)) - -(define (arith->rpn e) - (match e - [(const v) (list v)] - [(binop op l r) (append (arith->rpn l) (arith->rpn r) (list op))])) - -(define (rpn-translate e s) - (cond - [(null? e) - (top s)] - - [(number? (car e)) - (rpn-translate (cdr e) (push (const (car e)) s))] - - [(operator? (car e)) - (let* ((er (top s)) - (s (pop s)) - (el (top s)) - (s (pop s)) - (en (binop (car e) el er))) - (rpn-translate (cdr e) (push en s)))])) - -(define (rpn->arith e) - (rpn-translate e empty-stack))
\ No newline at end of file diff --git a/Semestr 2/racket/egzamin/zad2.rkt b/Semestr 2/racket/egzamin/zad2.rkt deleted file mode 100644 index e549f07..0000000 --- a/Semestr 2/racket/egzamin/zad2.rkt +++ /dev/null @@ -1,186 +0,0 @@ -#lang racket - -;; Oświadczam, że rozwiązanie zadania egzaminacyjnego przygotowałem -;; w pełni samodzielnie, korzystając wyłącznie z materiałów do wykładu, -;; notatek, podręcznika, oraz materiałów zacytowanych w treści rozwiązania. -;; Oświadczam że nie korzystałem w żadnej formie z pomocy osób trzecich -;; w przygotowaniu rozwiązania ani też takiej pomocy nie udzielałem -;; i nie udostępniałem nikomu swojego rozwiązania. - -;; ZADANIE 2 -;; ========= - -;; W tym zadaniu przyjrzymy się pierwszemu "językowi programowania" -;; który widzieliśmy na zajęciach: wyrażeniom arytmetycznym. Ich -;; prostota przejawia się przede wszystkim tym że nie występują w nich -;; zmienne (a w szczególności ich wiązanie) — dlatego możemy o nich -;; wnioskować nie używając narzędzi cięższych niż te poznane na -;; wykładzie. - -;; W tym zadaniu będziemy chcieli udowodnić że nasza prosta kompilacja -;; do odwrotnej notacji polskiej jest poprawna. Konkretniej, należy -;; · sformułować zasady indukcji dla obydwu typów danych -;; reprezentujących wyrażenia (expr? i rpn-expr?) -;; · sformułować i udowodnić twierdzenie mówiące że kompilacja -;; zachowuje wartość programu, tj. że obliczenie wartości programu -;; jest równoważne skompilowaniu go do RPN i obliczeniu. -;; · sformułować i udowodnić twierdzenie mówiące że translacja z RPN -;; do wyrażeń arytmetycznych (ta która była zadaniem domowym; -;; implementacja jest poniżej) jest (prawą) odwrotnością translacji -;; do RPN (czyli że jak zaczniemy od wyrażenia i przetłumaczymy do -;; RPN i z powrotem, to dostaniemy to samo wyrażenie). -;; Swoje rozwiązanie należy wpisać na końcu tego szablonu w -;; komentarzu, podobnie do niniejszej treści zadania; proszę zadbać o -;; czytelność dowodów! - -(struct const (val) #:transparent) -(struct binop (op l r) #:transparent) - -(define (operator? x) - (member x '(+ * - /))) - -(define (expr? e) - (match e - [(const v) - (integer? v)] - [(binop op l r) - (and (operator? op) - (expr? l) - (expr? r))] - [_ false])) - - -(define (value? v) - (number? v)) - -(define (op->proc op) - (match op - ['+ +] - ['- -] - ['* *] - ['/ /])) - -;; zał: (expr? e) jest prawdą -;; (value? (eval e)) jest prawdą -(define (eval e) - (match e - [(const v) v] - [(binop op l r) - (let ((vl (eval l)) - (vr (eval r)) - (p (op->proc op))) - (p vl vr))])) - -(define (rpn-expr? e) - (and (list? e) - (pair? e) - (andmap (lambda (x) (or (number? x) (operator? x))) e))) - -;; mój kod -(define (parse-expr q) - (cond - [(integer? q) (const q)] - [(and (list? q) (= (length q) 3) (operator? (first q))) - (binop (first q) (parse-expr (second q)) (parse-expr (third q)))])) - -(struct stack (xs)) - -(define empty-stack (stack null)) -(define (empty-stack? s) (null? (stack-xs s))) -(define (top s) (car (stack-xs s))) -(define (push a s) (stack (cons a (stack-xs s)))) -(define (pop s) (stack (cdr (stack-xs s)))) - - -(define (eval-am e s) - (cond - [(null? e) (top s)] - [(number? (car e)) (eval-am (cdr e) (push (car e) s))] - [(operator? (car e)) - (let* ((vr (top s)) - (s (pop s)) - (vl (top s)) - (s (pop s)) - (v ((op->proc (car e)) vl vr))) - (eval-am (cdr e) (push v s)))])) - -(define (rpn-eval e) - (eval-am e empty-stack)) - -(define (arith->rpn e) - (match e - [(const v) (list v)] - [(binop op l r) (append (arith->rpn l) (arith->rpn r) (list op))])) - -(define (rpn-translate e s) - (cond - [(null? e) - (top s)] - - [(number? (car e)) - (rpn-translate (cdr e) (push (const (car e)) s))] - - [(operator? (car e)) - (let* ((er (top s)) - (s (pop s)) - (el (top s)) - (s (pop s)) - (en (binop (car e) el er))) - (rpn-translate (cdr e) (push en s)))])) - -(define (rpn->arith e) - (rpn-translate e empty-stack)) - - -;; W kilku miejscach pozwoliłem sobie zapomnieć że symbol operatora i operator -;; to nie to samo, ale nie ma to znaczenia w kontekście dowodów. -;; Przez ES oznaczam empty-stack -;; -;; Zasada indukcji dla expr: -;; Dla dowolnej własności P, jeśli -;; · zachodzi P((const x)) dla dowolnego x oraz -;; · dla dowolnych e1, e2 oraz operator op jeśli zachodzi P(e1), P(e2) -;; to zachodzi P((binop op e1 e2)) -;; to dla dowolnego e, jeśli zachodzi (expr? e) to zachodzi P(e) -;; -;; Zasada indukcji dla rpn (ale tego wg rpn-expr?): -;; Dla dowolnej własności P, jeśli -;; · zachodzi P(x) dla dowolnej liczby lub opeartora x oraz -;; · dla dowolnej listy liczb lub operatorów xs oraz dowolnej liczby lub -;; operatora x, jesli zachodzi P(xs), to zachodzi P((cons x xs)) -;; to dla dowolnej listy xs liczb lub operatorów zachodzi P(xs) -;; -;; -;; Tw. 1: Jeśli spełnione jest (expr? e), to (eval e) ≡ (rpn-eval (arith->rpn e)) -;; -;; D-d. Skorzystamy z zasady indukcji dla wyrażeń. -;; · Weźmy dowolną liczbę x. Wtedy jeśli e ≡ (const x), to zachodzi -;; (eval (const x)) ≡ x ≡ (rpn-eval '(x)) ≡ (rpn-eval (arith->rpn (const x))) -;; · Weźmy dowolne e1, e2 spełniające naszą tezę oraz jakiś operator op. Wtedy -;; (eval (binop op e1 e2)) ≡ -;; (op (eval e1) (eval e2)) ≡ [Z definicji eval-am] -;; (eval-am '() (push (op (eval e1) (eval e2)) ES)) ≡ -;; (eval-am '(op) (push (eval e2) (push (eval e1) ES))) ≡ [Z założenia indukcyjnego] -;; (eval-am '(op) (push (rpn-eval (arith->rpn e2)) (push (eval e1) ES))) ≡ -;; (eval-am (append (arith->rpn e2) '(op)) (push (eval e1) ES)) ≡ [Z założenia indukcyjnego] -;; (eval-am (append (arith->rpn e1) (arith->rpn e2) '(op)) ES) ≡ -;; (rpn-eval (append (arith->rpn e1) (arith->rpn e2) '(op))) ≡ [Z definicji arith->rpn] -;; (rpn-eval (arith->rpn (binop op e1 e2))) -;; Pokazaliśmy oba warunki indukcji dla wyrażeń, zatem twierdzenie prawdziwe jest -;; dla dowolnego wyrażenia e spełniającego (expr? e). -;; -;; Tw. 2: Jeśli spełnione jest (expr? e), to (rpn->arith (arith->rpn e)) ≡ e -;; -;; D-d. Skoryzstamy z indukcji dla wyrażeń. -;; · Weźmy dowolną liczbę x. Wtedy dla e ≡ (const x) zachodzi -;; (rpn->arith (arith->rpn e)) ≡ (rpn->arith '(x)) ≡ (const x) -;; · Weźmy dowolne e1, e2 dla których twierdzenie zachodzi oraz operator op. Wtedy -;; (rpn->arith (arith->rpn (binop op e1 e2))) ≡ [Z definicji arith->rpn] -;; (rpn->arith (append (arith->rpn e1) (arith->rpn e2) '(op))) ≡ -;; (rpn-translate (append (arith->rpn e1) (arith->rpn e2) '(op)) ES) ≡ [Z zał. (arith->rpn e1) ewaluuje się do liczby] -;; (rpn-translate (append (arith->rpn e2) '(op)) (push e1 ES)) ≡ [Z zał. (arith->rpn e2) ewaluuje się do liczby] -;; (rpn-translate '(op) (push e2 (push e1 ES))) ≡ [Z definicji rpn-translate] -;; (rpn-translate '() (push (binop op e1 e2) ES)) ≡ -;; (binop op e1 e2) -;; Pokazaliśmy oba warunki indukcji dla wyrażeń, zatem twierdzenie jest prawdziwe -;; dla dowolnego e spełniającego (expr? e). diff --git a/Semestr 2/racket/egzamin/zad3.bak b/Semestr 2/racket/egzamin/zad3.bak deleted file mode 100644 index 20115e9..0000000 --- a/Semestr 2/racket/egzamin/zad3.bak +++ /dev/null @@ -1,4 +0,0 @@ -#lang racket - - - diff --git a/Semestr 2/racket/egzamin/zad3.rkt b/Semestr 2/racket/egzamin/zad3.rkt deleted file mode 100644 index 9bfed02..0000000 --- a/Semestr 2/racket/egzamin/zad3.rkt +++ /dev/null @@ -1,347 +0,0 @@ -#lang racket - -;; Oświadczam, że rozwiązanie zadania egzaminacyjnego przygotowałem -;; w pełni samodzielnie, korzystając wyłącznie z materiałów do wykładu, -;; notatek, podręcznika, oraz materiałów zacytowanych w treści rozwiązania. -;; Oświadczam że nie korzystałem w żadnej formie z pomocy osób trzecich -;; w przygotowaniu rozwiązania ani też takiej pomocy nie udzielałem -;; i nie udostępniałem nikomu swojego rozwiązania. - -;; ZADANIE 3 -;; ========= - -;; Z gramatykami bezkontekstowymi spotkaliście się już na Wstępie do -;; Informatyki. W tym zadaniu potraktujemy je jako dane dla naszych -;; programów. - -;; Przypomnijmy, że gramatyka bezkontekstowa składa się z -;; · skończonego zbioru *symboli nieterminalnych* -;; · skończonego zbioru *symboli terminalnych* -;; · wybranego nieterminalnego symbolu startowego -;; · zbioru *produkcji*, czyli par symbol nieterminalny - lista -;; (potencjalnie pusta) symboli terminalnych lub nieterminalnych - -;; Słowo (ciąg symboli terminalnych) możemy wyprowadzić z gramatyki, -;; jeśli możemy zacząć od ciągu składającego się z symbolu startowego -;; możemy użyć skończonej liczby produkcji z gramatyki przepisując -;; symbol nieterminalny na ciąg symboli mu odpowiadających (w danej -;; produkcji). - - -;; Przykład: poprawne nawiasowania - -;; Gramatyka składa się z jednego symbolu nieterminalnego, S (który -;; jest oczywiście symbolem startowym) i dwóch symboli terminalnych -;; "(" i ")", i zawiera następujące produkcje (zwyczajowo zapisywane -;; przy użyciu strzałki; zwróćcie uwagę że pierwszy ciąg jest pusty!): -;; S -> -;; S -> SS -;; S -> (S) - -;; W często spotykanej, bardziej zwięzłej, postaci BNF moglibyśmy tę -;; gramatykę zapisać tak (dbając trochę bardziej o wizualne -;; oddzielenie symboli terminalnych i nieterminalnych): -;; S ::= "" | SS | "(" S ")" -;; Mamy tu te same produkcje, ale tylko raz zapisujemy każdą z -;; powtarzających się lewych stron. - -;; Z gramatyki tej da się wyprowadzić wszystkie poprawnie rozstawione -;; ciągi nawiasów — zobaczmy jak wyprowadzić (na jeden ze sposobów) -;; ciąg "(()())". Zaczynamy, jak zawsze, od słowa złożonego z symbolu -;; startowego i przepisujemy: -;; S -> (S) -> (SS) -> ((S)S) -> ((S)(S)) -> (()(S)) -> (()()) - - -;; Zadanie cz. 1 - -;; Zdefiniuj reprezentację gramatyki jako typu danych w -;; Rackecie. Warto zastanowić się co można uprościć względem definicji -;; matematycznej — w szczególności możemy założyć że dowolne napisy -;; (typu string) są ciągami symboli terminalnych, i że nie musimy -;; podawać jawnie zbioru nieterminali; również reprezentacja produkcji -;; gramatyki jako worka z parami wejście-wyjście niekoniecznie jest -;; najwygodniejsza. - -;; Uwaga: w tym zadaniu nie wymagamy definiowania składni konkretnej i -;; parsowania, ale bardzo polecamy wybranie jakiejś formy, żeby móc -;; sensownie przetestować swoje rozwiązanie! - - -;; "Optymalizacja" gramatyk - -;; Gramatyki, podobnie jak programy, piszą ludzie — może więc zdarzyć -;; się że znajdą się tam śmieci. Mogą one mieć dwojaką formę: symboli -;; nieterminalnych, których nie da się wyprowadzić z symbolu -;; startowego, lub symboli nieterminalnych z których nie da się -;; wyprowadzić żadnego słowa terminalnego (tj. niezawierającego -;; symboli nieterminalnych). Przykładowo, do naszej gramatyki -;; moglibyśmy dodać symbole P i Q, i produkcje: -;; S -> ")(" P -;; P -> PP "qed" -;; Q -> "abc" - -;; Mimo że nasza gramatyka wygląda inaczej na pierwszy rzut oka, tak -;; naprawdę się nie zmieniła: do symbolu Q nie możemy dojść z symbolu -;; S, a więc "abc" nigdy nie wystąpi w słowie wyprowadzalnym z -;; gramatyki. Analogicznie, z P nie da się wyprowadzić żadnego słowa, -;; które nie zawierałoby symbolu P — a zatem żadnego słowa złożonego -;; tylko z symboli terminalnych. To znaczy, że naszą gramatykę możemy -;; uprościć wyrzucając z niej symbole nieterminalne (i produkcje które -;; ich używają) do których nie da się dojść (tj. są *nieosiągalne*) i -;; te, z których nie da się ułożyć słowa terminalnego (tj. są -;; *nieproduktywne*). Jeśli z naszej rozszerzonej gramatyki wyrzucimy -;; takie symbole, dostaniemy oczywiście gramatykę początkową. - - -;; Zadanie cz. 2 - -;; Dla swojej reprezentacji gramatyki z poprzedniej części zadania -;; napisz dwie procedury: cfg-unreachable, znajdującą symbole -;; nieterminalne które są nieosiągalne z symbolu startowego, i -;; cfg-unproductive, znajdującą symbole nieterminalne które nie są -;; produktywne. Następnie użyj tych procedur żeby zdefiniować -;; procedurę cfg-optimize, która uprości daną gramatykę usuwając z -;; niej symbole nieosiągalne i nieproduktywne, a także odpowiednie -;; produkcje. - -;; Rozwiązanie wpisz w poniższym pliku, i opatrz komentarzem -;; opisującym wybraną reprezentację (i podjęte przy jej projektowaniu -;; decyzje), a także zaimplementowane w cz. 2. algorytmy. - - - - - - -;; Zadanie 1 - -;; Reprezentacja jest docyś prosta, mianowicie stworzyłem struktury -;; terminal, non-terminal, rule oraz grammar. Dwa pierwsze to -;; po prostu jednoelementowe struktury utrzymujące nazwę symboli. -;; grammar to dwuelementowa struktura, jej pierwszym elementem -;; jest symbol startowy, a następnym produkcja, czyli lista reguł (listof rule), -;; a reguły to dwuelementowe struktury (symbol niterminalny - lista nonterminali lub termianli). -;; Generalnie dzięki temu, że mam te struktury terminal oraz non-terminal -;; to symbol nieterminalne i temrinalne mogą być czykolwiek. Dodatkowo -;; dla uproszczenia w miejscach, gdzie mam pewność że chodzi mi o -;; symbol nieterminalny, to nie opakowuję go w strukturę. -;; Przykładowo rules w gramatyce może wyglądać tak: -;; (list -;; (rule 'S (list (terminal ""))) -;; (rule 'S (list (non-terminal 'S) (non-terminal 'S))) -;; (rule 'S (list (terminal "(") (non-terminal 'S) (terminal ")")))) -;; Oczywiście symbol nieterminalny nie musi być racketowym symbolem, może być czymkolwiek. -;; Podobnie z symbolami terminalnymi. Proszę również zauważyć, że dzięki -;; strukturom non-terminal oraz terminal te same racketowe obiekty mogą być jednocześnie -;; terminalami oraz nieterminalami! -;; W tych parach na pierwszym miejscu nie jest non-terminal, tylko po prostu cokolwiek -;; no i oczywiście mam wtedy pewność że musi być to non-terminal, nie ma potrzeby -;; żeby pakować go również w tę strukturę. - - -;; Postanowiłem napisać parser (make-cfg q), generuje on gramatyki w bardzo konkretny sposób, -;; trochę ograniczo to czym mogą być symbole nieterminalne oraz terminalne, -;; ale nie wydaje mi się że i tak składnia jest bardzo wygodna i mało ograniczająca. - -;; Składnia konkretna naszych gramatyk wygląda bardzo podobnie do zapisu -;; przedstawionego w treści zadania. -;; np. gramatyka nawiasowania będzie wyglądać następująco: -;; '(grammar S (S ::= "" -- SS -- "(" S ")")) -;; ale mogłaby wyglądać też tak: -;; '(grammar S (S ::= "") (S ::= SS -- "(" S ")")) -;; a np. ta nieciekawa gramatyka przedstawiona w treści zadania: -;; '(grammar S (S ::= "] [" P) (P ::= PP "qed") (Q ::= "abc")) -;; Zatem będzie to lista, która na pierwszym miejscu ma symbol 'grammar -;; na drugim miejscu ma symbol startowy -;; następnie następuje lista produkcji w formacie: -;; <non-terminal> ::= <lista produkcji, produkcje oddzielone są separatorem --> -;; Zalety: -;; - rozróżnienie w składni konkretnej symboli nieterminalnych i terminalnych -;; przez użycie symboli i stringów pozwala na to, aby symbole terminalne nazywały się tak -;; jak terminalne, tj. "S" nie jest tym samym co 'S. -;; - składnia wydaje się bardzo wygodna w użyciu, nie ma też problemu, żeby później dopisać -;; dodatkowe reguły dla jakiegoś nieterminala, -;; - parser jest całkiem łatwy w implementacji -;; Wady: -;; - symbole nieterminalne mogą składać się jedynie z jednego symbolu, zatem nie możemy robić ich -;; zbyt wiele. Jest tak dlatego, że np. tutaj (S ::= SS) nie chodzi mi o symbol SS, tylko -;; o sąsiadujące symbole SS (jednak gdyby nie używać parsera to normalnie moglibyśmy -;; mieć wieloznakowe symbole nieterminalne!). - -;; Dla przykładu taka gramatyka: -;; '(grammar S (S ::= "" -- SS -- "(" S ")" -- Q) (Q ::= "" -- QS -- "[" Q "]")) -;; będzie reprezentowana następująco: -;; (grammar -;; 'S -;; (list -;; (rule 'S (list (terminal ""))) -;; (rule 'S (list (non-terminal 'S) (non-terminal 'S))) -;; (rule 'S (list (terminal "(") (non-terminal 'S) (terminal ")"))) -;; (rule 'S (list (non-terminal 'Q))) -;; (rule 'Q (list (terminal ""))) -;; (rule 'Q (list (non-terminal 'Q) (non-terminal 'S))) -;; (rule 'Q (list (terminal "[") (non-terminal 'Q) (terminal "]"))))) - -;; Cała reprezentacja :D -(struct non-terminal (sym) #:transparent) -(struct terminal (sym) #:transparent) -(struct rule (nt xs) #:transparent) -(struct grammar (start rules) #:transparent) - - -;; PARSER -(define SEPARATOR '--) - -(define (split-at-symb symb xs) - (define (iter left right) - (cond - [(null? right) (cons left null)] - [(eq? symb (car right)) (cons left (cdr right))] - [else (iter (cons (car right) left) (cdr right))])) - (let ([res (iter null xs)]) - (cons (reverse (car res)) (cdr res)))) - -(define (split-by-separator xs) - (let ([res (split-at-symb SEPARATOR xs)]) - (if (null? (cdr res)) - res - (cons (car res) (split-by-separator (cdr res)))))) - -;; PARSER SKŁADNI KONKRETNEJ DO JEJ REPREZENTACJI -(define (make-cfg q) - (cond - [(and (list? q) (eq? 'grammar (first q))) - (grammar (second q) (append-map make-cfg (cddr q)))] - [(and (list? q) (eq? '::= (second q))) - (let ([nt (first q)] - [rules (split-by-separator (cddr q))]) - (map (lambda (x) (rule nt x)) (map make-prod rules)))])) - -(define (symbol->list s) - (map string->symbol - (map string - (string->list (symbol->string s))))) - -(define (make-prod xs) - (cond - [(null? xs) null] - [(string? (car xs)) (cons (terminal (car xs)) (make-prod (cdr xs)))] - [(symbol? (car xs)) (append (map non-terminal (symbol->list (car xs))) (make-prod (cdr xs)))] - [else (error "Invalid syntax in production" xs)])) - - -(define sample '(S ::= "" -- SS -- "(" S ")")) -(define sample2 '(grammar S (S ::= "" -- SS -- "(" S ")" -- Q) (Q ::= "" -- QQ -- "[" Q "]"))) -(define sample3 '(grammar S - (S ::= A B -- D E) - (A ::= "a") - (B ::= "b" C) - (C ::= "c") - (D ::= "d" F) - (E ::= "e") - (F ::= "f" D))) - -(define (sample-grammar) (make-cfg sample3)) - -;; zadanie 2 - -;; korzystam z algorytmów przedstawionych w tej książce: -;; https://bit.ly/3ev0NUA, konkretnie te ze stron 50-51 -;; Pozwoliłem sobie trochę zmienić przeznaczenie funkcji cfg-unreachable oraz cfg-unproductive -;; Zamiast zwracać nieproduktywne nieterminale, zwracają właśnie produktywne -;; i analogicznie w tym drugim. Po prostu taka implementacja jest dla mnie wygodniejsza, -;; a jest bardzo nieistotną zmianą koncepcyjną. -;; Stąd zmiana nazwy na cfg-productive oraz cfg-reachable - -;; cfg-productive działa w ten sposób: -;; Jakiś nieterminal nazywamy produktywnym, jeśli ma co najmniej jedną produktywną zasadę -;; Jakąś regułę nazywamy produktywną, jeśli składa się z terminali lub produktywnych nieterminali -;; Jasno widać, że wg tej definicji te nieterminale, które nie są produktywne, są nieproduktywne -;; wg definicji zadania, a cała reszta jest produktwna. - -;; Algorytm znajdowania produktywnych nieterminali: -;; Mamy listę produktywnych nieterminali P, początkowo pustą -;; 1. Stwórz nową listę P' -;; 2. Przejdź po liście reguł -;; -> jeśli dana reguła jest produktywna (wg P), dodaj jej nieterminal do P' -;; 3. Jeśli P != P', zrób P := P' i wróć do 1. -;; 4. Zwróć P - -;; Fajne w tym algorytmie jest to, że jeśli mamy jakiś nieterminal, którego -;; używamy w jakiejś regule, ale ten nieterminal nie ma zdefiniowanej żadnej reguły, -;; to nie zostanie oznaczony jako produktywny, co jest dla nas korzystne. - -;; Algorytm znajdowania osiągalnych nieterminali: -;; Traktujemy nitereminale jak wierzchołki w grafie a reguły jako listy sąsiedztwa. -;; Terminale są liśćmi, a nieterminale węzłami. Robimy po prostu DFSa z nieterminala -;; startowego i węzły do których dotrzemy oznaczamy jako osiągalne. - -;; Wg papierka który tutaj podałem, jeśli najpierw usuniemy nieproduktywne nieterminale, -;; a w następnej kolejności nieosiągalne, to nasza gramatyka stanie się regularna. -;; Wydaje się to w miarę sensowne -- pierszy algorytm to takie odcinanie liści i odcyklanie -;; grafu, a ten drugi to po prostu DFS. - -;; przydatne predykaty -- na productive-nt mam listę symboli niterminalnych -;; (nie struktury non-terminal, tylko te symbole!) -;; które wiem że są produktywne. -;; productive? sprawdza, czy nietermial jest produktywny -;; to drugie sprawdza czy reguła jest produktywna -;; (czyli czy składa się z produktywnych nonterminali lub terminali) -(define (productive? p productive-nt) - (or (terminal? p) (member (non-terminal-sym p) productive-nt))) -(define (rule-productive? r productive-nt) - (andmap (lambda (x) (productive? x productive-nt)) r)) - -;; zwraca listę produktywnych symboli (nie nonterminali!) -(define (cfg-productive g) - (define (find-productive-nt productive-nt rules) - (cond - [(null? rules) (remove-duplicates productive-nt)] - [(rule-productive? (rule-xs (car rules)) productive-nt) - (find-productive-nt (cons (rule-nt (car rules)) productive-nt) (cdr rules))] - [else (find-productive-nt productive-nt (cdr rules))])) - (define (iter productive-nt) - (let ([new-prod-nt (find-productive-nt productive-nt (grammar-rules g))]) - (if (equal? productive-nt new-prod-nt) - productive-nt - (iter new-prod-nt)))) - (iter null)) - -;; zwraca listę osiągalnych symboli -(define (cfg-reachable g) - (define (iter verts vis) - (cond - [(null? verts) vis] - [(member (car verts) vis) (iter (cdr verts) vis)] - [else (iter (cdr verts) (dfs (car verts) vis))])) - (define (dfs v vis) - (let* ([rules (filter (lambda (r) (eq? (rule-nt r) v)) (grammar-rules g))] - [verts (append-map (lambda (r) (rule-xs r)) rules)] - [verts (filter non-terminal? verts)] - [verts (map non-terminal-sym verts)]) - (iter verts (cons v vis)))) - (dfs (grammar-start g) null)) - - -;; robi z gramatyki g gramatykę regularną -(define (cfg-optimize g) - (let* ([productive-nt (cfg-productive g)] - [productive-rules (filter (lambda (r) - (rule-productive? (rule-xs r) productive-nt)) - (grammar-rules g))] - [new-g (grammar (grammar-start g) productive-rules)] ; <----- nowa gramatyka, bez nieproduktywnych - [reachable-nt (cfg-reachable new-g)] ; reguł i symboli nieterminalnych - [res-g (grammar (grammar-start new-g) (filter ; <----- dobra gramatyka - (lambda (r) (member (rule-nt r) reachable-nt)) - (grammar-rules new-g)))]) - res-g)) - -(define (test) (cfg-optimize (make-cfg sample3))) - -;; Pokazanie że symbole nie muszą być racketowymi symbolami :) -(define (test2) (cfg-optimize - (grammar '() - (list (cons '() (list (terminal '()))) - (cons '() (list (terminal "(") (non-terminal '()) (terminal ")"))) - (cons '() (list (non-terminal '()) (non-terminal '()))))))) -
\ No newline at end of file diff --git a/Semestr 2/racket/egzamin/zad3a.bak b/Semestr 2/racket/egzamin/zad3a.bak deleted file mode 100644 index 81570d0..0000000 --- a/Semestr 2/racket/egzamin/zad3a.bak +++ /dev/null @@ -1,298 +0,0 @@ -#lang racket - -;; ZADANIE 3 -;; ========= - -;; Z gramatykami bezkontekstowymi spotkaliście się już na Wstępie do -;; Informatyki. W tym zadaniu potraktujemy je jako dane dla naszych -;; programów. - -;; Przypomnijmy, że gramatyka bezkontekstowa składa się z -;; · skończonego zbioru *symboli nieterminalnych* -;; · skończonego zbioru *symboli terminalnych* -;; · wybranego nieterminalnego symbolu startowego -;; · zbioru *produkcji*, czyli par symbol nieterminalny - lista -;; (potencjalnie pusta) symboli terminalnych lub nieterminalnych - -;; Słowo (ciąg symboli terminalnych) możemy wyprowadzić z gramatyki, -;; jeśli możemy zacząć od ciągu składającego się z symbolu startowego -;; możemy użyć skończonej liczby produkcji z gramatyki przepisując -;; symbol nieterminalny na ciąg symboli mu odpowiadających (w danej -;; produkcji). - - -;; Przykład: poprawne nawiasowania - -;; Gramatyka składa się z jednego symbolu nieterminalnego, S (który -;; jest oczywiście symbolem startowym) i dwóch symboli terminalnych -;; "(" i ")", i zawiera następujące produkcje (zwyczajowo zapisywane -;; przy użyciu strzałki; zwróćcie uwagę że pierwszy ciąg jest pusty!): -;; S -> -;; S -> SS -;; S -> (S) - -;; W często spotykanej, bardziej zwięzłej, postaci BNF moglibyśmy tę -;; gramatykę zapisać tak (dbając trochę bardziej o wizualne -;; oddzielenie symboli terminalnych i nieterminalnych): -;; S ::= "" | SS | "(" S ")" -;; Mamy tu te same produkcje, ale tylko raz zapisujemy każdą z -;; powtarzających się lewych stron. - -;; Z gramatyki tej da się wyprowadzić wszystkie poprawnie rozstawione -;; ciągi nawiasów — zobaczmy jak wyprowadzić (na jeden ze sposobów) -;; ciąg "(()())". Zaczynamy, jak zawsze, od słowa złożonego z symbolu -;; startowego i przepisujemy: -;; S -> (S) -> (SS) -> ((S)S) -> ((S)(S)) -> (()(S)) -> (()()) - - -;; Zadanie cz. 1 - -;; Zdefiniuj reprezentację gramatyki jako typu danych w -;; Rackecie. Warto zastanowić się co można uprościć względem definicji -;; matematycznej — w szczególności możemy założyć że dowolne napisy -;; (typu string) są ciągami symboli terminalnych, i że nie musimy -;; podawać jawnie zbioru nieterminali; również reprezentacja produkcji -;; gramatyki jako worka z parami wejście-wyjście niekoniecznie jest -;; najwygodniejsza. - -;; Uwaga: w tym zadaniu nie wymagamy definiowania składni konkretnej i -;; parsowania, ale bardzo polecamy wybranie jakiejś formy, żeby móc -;; sensownie przetestować swoje rozwiązanie! - - -;; "Optymalizacja" gramatyk - -;; Gramatyki, podobnie jak programy, piszą ludzie — może więc zdarzyć -;; się że znajdą się tam śmieci. Mogą one mieć dwojaką formę: symboli -;; nieterminalnych, których nie da się wyprowadzić z symbolu -;; startowego, lub symboli nieterminalnych z których nie da się -;; wyprowadzić żadnego słowa terminalnego (tj. niezawierającego -;; symboli nieterminalnych). Przykładowo, do naszej gramatyki -;; moglibyśmy dodać symbole P i Q, i produkcje: -;; S -> ")(" P -;; P -> PP "qed" -;; Q -> "abc" - -;; Mimo że nasza gramatyka wygląda inaczej na pierwszy rzut oka, tak -;; naprawdę się nie zmieniła: do symbolu Q nie możemy dojść z symbolu -;; S, a więc "abc" nigdy nie wystąpi w słowie wyprowadzalnym z -;; gramatyki. Analogicznie, z P nie da się wyprowadzić żadnego słowa, -;; które nie zawierałoby symbolu P — a zatem żadnego słowa złożonego -;; tylko z symboli terminalnych. To znaczy, że naszą gramatykę możemy -;; uprościć wyrzucając z niej symbole nieterminalne (i produkcje które -;; ich używają) do których nie da się dojść (tj. są *nieosiągalne*) i -;; te, z których nie da się ułożyć słowa terminalnego (tj. są -;; *nieproduktywne*). Jeśli z naszej rozszerzonej gramatyki wyrzucimy -;; takie symbole, dostaniemy oczywiście gramatykę początkową. - - -;; Zadanie cz. 2 - -;; Dla swojej reprezentacji gramatyki z poprzedniej części zadania -;; napisz dwie procedury: cfg-unreachable, znajdującą symbole -;; nieterminalne które są nieosiągalne z symbolu startowego, i -;; cfg-unproductive, znajdującą symbole nieterminalne które nie są -;; produktywne. Następnie użyj tych procedur żeby zdefiniować -;; procedurę cfg-optimize, która uprości daną gramatykę usuwając z -;; niej symbole nieosiągalne i nieproduktywne, a także odpowiednie -;; produkcje. - -;; Rozwiązanie wpisz w poniższym pliku, i opatrz komentarzem -;; opisującym wybraną reprezentację (i podjęte przy jej projektowaniu -;; decyzje), a także zaimplementowane w cz. 2. algorytmy. - - - - - - -;; Zadanie 1 - -;; Postanowiłem napisać parser, bo bez tego zadanie wydaje mi się dosyć ubogie -;; Składnia konkretna naszych gramatyk wygląda bardzo podobnie do zapisu -;; przedstawionego w treści zadania. -;; np. gramatyka nawiasowania będzie wyglądać następująco: -;; '(grammar S (S ::= "" -- SS -- "(" S ")")) -;; ale mogłaby wyglądać też tak: -;; '(grammar S (S ::= "") (S ::= SS -- "(" S ")")) -;; a np. ta nieciekawa gramatyka przedstawiona w treści zadania: -;; '(grammar S (S ::= "] [" P) (P ::= PP "qed") (Q ::= "abc")) -;; Zatem będzie to lista, która na pierwszym miejscu ma symbol 'grammar -;; na drugim miejscu ma symbol startowy -;; następnie następuje lista produkcji w formacie: -;; <non-terminal> ::= <lista produkcji, produkcje oddzielone są separatorem --> -;; Zalety: -;; - rozróżnienie w składni konkretnej symboli nieterminalnych i terminalnych -;; przez użycie symboli i stringów pozwala na to, aby symbole terminalne nazywały się tak -;; jak terminalne, tj. "S" nie jest tym samym co 'S. -;; - składnia wydaje się bardzo wygodna w użyciu, nie ma też problemu, żeby później dopisać -;; dodatkowe produkcje dla jednego symbolu nieterminalnego, np. (S ::= "") (S ::= SS) -;; - parser jest łatwy w implementacji -;; Wady: -;; - symbole nieterminalne mogą składać się jedynie z jednego symbolu, zatem nie możemy robić ich -;; zbyt wiele - -;; Reprezentacja gramatyki: podczas parsowania gramatyki symbole i stringi wewnątrz produkcji -;; reprezentowane są przez struktury terminal oraz non-terminal. Cała gramatyka to -;; struktura dwuelementowa - pierwszym jest symbol startowy, a drugim lista par <symbol . produkcja> -;; Taka decyzja właśnie pozwoliła na to, że zaproponowana przeze mnie składania konkretna jest -;; bardzo prosta do sparsowania - wystarczy każdą produkcję podzielić ze względu na separator '-- -;; i do czegoś podobnego do środowisk dodawać po prostu odpowiednie pary. -;; dla przykładu taka gramatyka: -;; '(grammar S (S ::= "" -- SS -- "(" S ")" -- Q) (Q ::= "" -- QS -- "[" Q "]")) -;; będzie reprezentowana następująco: -;; (grammar -;; 'S -;; (production -;; (list -;; (list 'S (terminal "")) -;; (list 'S (non-terminal 'S) (non-terminal 'S)) -;; (list 'S (terminal "(") (non-terminal 'S) (terminal ")")) -;; (list 'S (non-terminal 'Q)) -;; (list 'Q (terminal "")) -;; (list 'Q (non-terminal 'Q) (non-terminal 'S)) -;; (list 'Q (terminal "[") (non-terminal 'Q) (terminal "]"))))) -;; Prosze zauważyć, że np. SS zostało zamienione na dwa sąsiednie nieterminalne symbole S -;; (to właśnie powód, dlaczego symbole nieterminalne mogą być jedynie jednoznakowe). - -;; Zdecydowałem się dodać strukturę production, bo wtedy łatwo można na niej operować -;; pisząc funkcje production-add, czy production-lookup itp. - - -(struct non-terminal (sym) #:transparent) -(struct terminal (sym) #:transparent) -(struct grammar (start rules) #:transparent) - -(define SEPARATOR '--) - -(define (split-at-symb symb xs) - (define (iter left right) - (cond - [(null? right) (cons left null)] - [(eq? symb (car right)) (cons left (cdr right))] - [else (iter (cons (car right) left) (cdr right))])) - (let ([res (iter null xs)]) - (cons (reverse (car res)) (cdr res)))) - -(define (split-by-separator xs) - (let ([res (split-at-symb SEPARATOR xs)]) - (if (null? (cdr res)) - res - (cons (car res) (split-by-separator (cdr res)))))) - -(define (make-cfg q) - (cond - [(and (list? q) (eq? 'grammar (first q))) - (grammar (second q) (append-map make-cfg (cddr q)))] - [(and (list? q) (eq? '::= (second q))) - (let ([nt (first q)] - [rules (split-by-separator (cddr q))]) - (map (lambda (x) (cons nt x)) (map make-prod rules)))])) - -(define (symbol->list s) - (map string->symbol - (map string - (string->list (symbol->string s))))) - -(define (make-prod xs) - (cond - [(null? xs) null] - [(string? (car xs)) (cons (terminal (car xs)) (make-prod (cdr xs)))] - [(symbol? (car xs)) (append (map non-terminal (symbol->list (car xs))) (make-prod (cdr xs)))] - [else (error "Invalid syntax in production" xs)])) - - -(define sample '(S ::= "" -- SS -- "(" S ")")) -(define sample2 '(grammar S (S ::= "" -- SS -- "(" S ")" -- Q) (Q ::= "" -- QQ -- "[" Q "]"))) -(define sample3 '(grammar S - (S ::= A B -- D E) - (A ::= "a") - (B ::= "b" C) - (C ::= "c") - (D ::= "d" F) - (E ::= "e") - (F ::= "f" D))) - -;; zadanie 2 - -;; korzystam z algorytmów przedstawionych w tej książce: -;; https://bit.ly/3ev0NUA, konkretnie te ze stron 50-51 -;; Pozwoliłem sobie trochę zmienić przeznaczenie funkcji cfg-unreachable oraz cfg-unproductive -;; Zamiast zwracać nieproduktywne nieterminale, zwracają właśnie produktywne -;; i analogicznie w tym drugim. Po prostu taka implementacja jest dla mnie wygodniejsza, -;; a jest bardzo nieistotną zmianą koncepcyjną. -;; Stąd zmiana nazwy na cfg-productive oraz cfg-reachable - -;; cfg-productive działa w ten sposób: -;; Jakiś nieterminal nazywamy produktywnym, jeśli ma co najmniej jedną produktywną zasadę -;; Jakąś zasadę nazywamy produktywną, jeśli składa się z terminali oraz produktywnych nieterminali -;; Jasno widać, że wg tej definicji te nieterminale, które nie są produktywne, są nieproduktywne -;; wg definicji zadania, a cała reszta jest produktwna. - -;; Algorytm znajdowania produktywnych nieterminali: -;; Mamy listę produktywnych nieterminali P, początkowo pustą -;; 1. Stwórz nową listę P' -;; 2. Przejdź po liście produkcji -;; -> jeśli dana produkcja jest produktywna (wg P), dodaj jej nieterminal do P' -;; 3. Jeśli P != P', zrób P := P' i wróć do 1. -;; 4. Zwróć P - -;; Fajne w tym algorytmie jest to, że jeśli mamy jakiś nieterminal, którego -;; używamy w jakiejś produkcji, ale ten nieterminal nie ma zdefiniowanej swojej produkcji -;; to nie zostanie oznaczony jako produktywny, co jest dla nas korzystne - -;; Algorytm znajdowania osiągalnych nieterminali: -;; Traktujemy nitereminale jak wierzchołki w grafie a zasady jako listy sąsiedztwa. -;; Terminale są liśćmi, a nieterminale węzłami. Robimy po prostu DFSa z nieterminalu -;; startowego i węzły do których dotrzemy oznaczamy jako osiągalne. - -;; Wg papierka który tutaj podałem, jeśli najpierw usuniemy nieproduktywne nieterminale, -;; a w następnej kolejności nieosiągalne, to nasza gramatyka stanie się regularna. - -(define (productive? p productive-nt) - (or (terminal? p) (member (non-terminal-sym p) productive-nt))) -(define (rule-productive? r productive-nt) - (andmap (lambda (x) (productive? x productive-nt)) r)) - -(define (cfg-productive g) - (define (find-productive-nt productive-nt rules) - (cond - [(null? rules) (remove-duplicates productive-nt)] - [(rule-productive? (cdar rules) productive-nt) - (find-productive-nt (cons (caar rules) productive-nt) (cdr rules))] - [else (find-productive-nt productive-nt (cdr rules))])) - (define (iter productive-nt) - (let ([new-prod-nt (find-productive-nt productive-nt (grammar-rules g))]) - (if (equal? productive-nt new-prod-nt) - productive-nt - (iter new-prod-nt)))) - (iter null)) - -(define (cfg-reachable g) - (define (iter verts vis) - (cond - [(null? verts) vis] - [(member (car verts) vis) (iter (cdr verts) vis)] - [else (iter (cdr verts) (dfs (car verts) vis))])) - (define (dfs v vis) - (display v) - (newline) - (let* ([rules (filter (lambda (r) (eq? (car r) v)) (grammar-rules g))] - [verts (append-map (lambda (r) (cdr r)) rules)] - [verts (filter non-terminal? verts)] - [verts (map non-terminal-sym verts)]) - (iter verts (cons v vis)))) - (dfs (grammar-start g) null)) - -(define (cfg-optimize g) - (let* ([productive-nt (cfg-productive g)] - [productive-rules (filter (lambda (r) - (rule-productive? (cdr r) productive-nt)) - (grammar-rules g))] - [new-g (grammar (grammar-start g) productive-rules)] - [reachable-nt (cfg-reachable new-g)] - [res-g (grammar (grammar-start new-g) (filter - (lambda (r) (member (car r) reachable-nt)) - (grammar-rules new-g)))]) - res-g)) -
\ No newline at end of file diff --git a/Semestr 2/racket/egzamin/zad3a.rkt b/Semestr 2/racket/egzamin/zad3a.rkt deleted file mode 100644 index eaa6645..0000000 --- a/Semestr 2/racket/egzamin/zad3a.rkt +++ /dev/null @@ -1,301 +0,0 @@ -#lang racket - -;; ZADANIE 3 -;; ========= - -;; Z gramatykami bezkontekstowymi spotkaliście się już na Wstępie do -;; Informatyki. W tym zadaniu potraktujemy je jako dane dla naszych -;; programów. - -;; Przypomnijmy, że gramatyka bezkontekstowa składa się z -;; · skończonego zbioru *symboli nieterminalnych* -;; · skończonego zbioru *symboli terminalnych* -;; · wybranego nieterminalnego symbolu startowego -;; · zbioru *produkcji*, czyli par symbol nieterminalny - lista -;; (potencjalnie pusta) symboli terminalnych lub nieterminalnych - -;; Słowo (ciąg symboli terminalnych) możemy wyprowadzić z gramatyki, -;; jeśli możemy zacząć od ciągu składającego się z symbolu startowego -;; możemy użyć skończonej liczby produkcji z gramatyki przepisując -;; symbol nieterminalny na ciąg symboli mu odpowiadających (w danej -;; produkcji). - - -;; Przykład: poprawne nawiasowania - -;; Gramatyka składa się z jednego symbolu nieterminalnego, S (który -;; jest oczywiście symbolem startowym) i dwóch symboli terminalnych -;; "(" i ")", i zawiera następujące produkcje (zwyczajowo zapisywane -;; przy użyciu strzałki; zwróćcie uwagę że pierwszy ciąg jest pusty!): -;; S -> -;; S -> SS -;; S -> (S) - -;; W często spotykanej, bardziej zwięzłej, postaci BNF moglibyśmy tę -;; gramatykę zapisać tak (dbając trochę bardziej o wizualne -;; oddzielenie symboli terminalnych i nieterminalnych): -;; S ::= "" | SS | "(" S ")" -;; Mamy tu te same produkcje, ale tylko raz zapisujemy każdą z -;; powtarzających się lewych stron. - -;; Z gramatyki tej da się wyprowadzić wszystkie poprawnie rozstawione -;; ciągi nawiasów — zobaczmy jak wyprowadzić (na jeden ze sposobów) -;; ciąg "(()())". Zaczynamy, jak zawsze, od słowa złożonego z symbolu -;; startowego i przepisujemy: -;; S -> (S) -> (SS) -> ((S)S) -> ((S)(S)) -> (()(S)) -> (()()) - - -;; Zadanie cz. 1 - -;; Zdefiniuj reprezentację gramatyki jako typu danych w -;; Rackecie. Warto zastanowić się co można uprościć względem definicji -;; matematycznej — w szczególności możemy założyć że dowolne napisy -;; (typu string) są ciągami symboli terminalnych, i że nie musimy -;; podawać jawnie zbioru nieterminali; również reprezentacja produkcji -;; gramatyki jako worka z parami wejście-wyjście niekoniecznie jest -;; najwygodniejsza. - -;; Uwaga: w tym zadaniu nie wymagamy definiowania składni konkretnej i -;; parsowania, ale bardzo polecamy wybranie jakiejś formy, żeby móc -;; sensownie przetestować swoje rozwiązanie! - - -;; "Optymalizacja" gramatyk - -;; Gramatyki, podobnie jak programy, piszą ludzie — może więc zdarzyć -;; się że znajdą się tam śmieci. Mogą one mieć dwojaką formę: symboli -;; nieterminalnych, których nie da się wyprowadzić z symbolu -;; startowego, lub symboli nieterminalnych z których nie da się -;; wyprowadzić żadnego słowa terminalnego (tj. niezawierającego -;; symboli nieterminalnych). Przykładowo, do naszej gramatyki -;; moglibyśmy dodać symbole P i Q, i produkcje: -;; S -> ")(" P -;; P -> PP "qed" -;; Q -> "abc" - -;; Mimo że nasza gramatyka wygląda inaczej na pierwszy rzut oka, tak -;; naprawdę się nie zmieniła: do symbolu Q nie możemy dojść z symbolu -;; S, a więc "abc" nigdy nie wystąpi w słowie wyprowadzalnym z -;; gramatyki. Analogicznie, z P nie da się wyprowadzić żadnego słowa, -;; które nie zawierałoby symbolu P — a zatem żadnego słowa złożonego -;; tylko z symboli terminalnych. To znaczy, że naszą gramatykę możemy -;; uprościć wyrzucając z niej symbole nieterminalne (i produkcje które -;; ich używają) do których nie da się dojść (tj. są *nieosiągalne*) i -;; te, z których nie da się ułożyć słowa terminalnego (tj. są -;; *nieproduktywne*). Jeśli z naszej rozszerzonej gramatyki wyrzucimy -;; takie symbole, dostaniemy oczywiście gramatykę początkową. - - -;; Zadanie cz. 2 - -;; Dla swojej reprezentacji gramatyki z poprzedniej części zadania -;; napisz dwie procedury: cfg-unreachable, znajdującą symbole -;; nieterminalne które są nieosiągalne z symbolu startowego, i -;; cfg-unproductive, znajdującą symbole nieterminalne które nie są -;; produktywne. Następnie użyj tych procedur żeby zdefiniować -;; procedurę cfg-optimize, która uprości daną gramatykę usuwając z -;; niej symbole nieosiągalne i nieproduktywne, a także odpowiednie -;; produkcje. - -;; Rozwiązanie wpisz w poniższym pliku, i opatrz komentarzem -;; opisującym wybraną reprezentację (i podjęte przy jej projektowaniu -;; decyzje), a także zaimplementowane w cz. 2. algorytmy. - - - - - - -;; Zadanie 1 - -;; Postanowiłem napisać parser, bo bez tego zadanie wydaje mi się dosyć ubogie -;; Składnia konkretna naszych gramatyk wygląda bardzo podobnie do zapisu -;; przedstawionego w treści zadania. -;; np. gramatyka nawiasowania będzie wyglądać następująco: -;; '(grammar S (S ::= "" -- SS -- "(" S ")")) -;; ale mogłaby wyglądać też tak: -;; '(grammar S (S ::= "") (S ::= SS -- "(" S ")")) -;; a np. ta nieciekawa gramatyka przedstawiona w treści zadania: -;; '(grammar S (S ::= "] [" P) (P ::= PP "qed") (Q ::= "abc")) -;; Zatem będzie to lista, która na pierwszym miejscu ma symbol 'grammar -;; na drugim miejscu ma symbol startowy -;; następnie następuje lista produkcji w formacie: -;; <non-terminal> ::= <lista produkcji, produkcje oddzielone są separatorem --> -;; Zalety: -;; - rozróżnienie w składni konkretnej symboli nieterminalnych i terminalnych -;; przez użycie symboli i stringów pozwala na to, aby symbole terminalne nazywały się tak -;; jak terminalne, tj. "S" nie jest tym samym co 'S. -;; - składnia wydaje się bardzo wygodna w użyciu, nie ma też problemu, żeby później dopisać -;; dodatkowe produkcje dla jednego symbolu nieterminalnego, np. (S ::= "") (S ::= SS) -;; - parser jest łatwy w implementacji -;; Wady: -;; - symbole nieterminalne mogą składać się jedynie z jednego symbolu, zatem nie możemy robić ich -;; zbyt wiele - -;; Reprezentacja gramatyki: podczas parsowania gramatyki symbole i stringi wewnątrz produkcji -;; reprezentowane są przez struktury terminal oraz non-terminal. Cała gramatyka to -;; struktura dwuelementowa - pierwszym jest symbol startowy, a drugim lista par <symbol . produkcja> -;; Taka decyzja właśnie pozwoliła na to, że zaproponowana przeze mnie składania konkretna jest -;; bardzo prosta do sparsowania - wystarczy każdą produkcję podzielić ze względu na separator '-- -;; i do czegoś podobnego do środowisk dodawać po prostu odpowiednie pary. -;; dla przykładu taka gramatyka: -;; '(grammar S (S ::= "" -- SS -- "(" S ")" -- Q) (Q ::= "" -- QS -- "[" Q "]")) -;; będzie reprezentowana następująco: -;; (grammar -;; 'S -;; (production -;; (list -;; (list 'S (terminal "")) -;; (list 'S (non-terminal 'S) (non-terminal 'S)) -;; (list 'S (terminal "(") (non-terminal 'S) (terminal ")")) -;; (list 'S (non-terminal 'Q)) -;; (list 'Q (terminal "")) -;; (list 'Q (non-terminal 'Q) (non-terminal 'S)) -;; (list 'Q (terminal "[") (non-terminal 'Q) (terminal "]"))))) -;; Prosze zauważyć, że np. SS zostało zamienione na dwa sąsiednie nieterminalne symbole S -;; (to właśnie powód, dlaczego symbole nieterminalne mogą być jedynie jednoznakowe). - -;; Zdecydowałem się dodać strukturę production, bo wtedy łatwo można na niej operować -;; pisząc funkcje production-add, czy production-lookup itp. - - -(struct non-terminal (sym) #:transparent) -(struct terminal (sym) #:transparent) -(struct grammar (start rules) #:transparent) - -(define SEPARATOR '--) - -(define (make-cfg q) - (cond - [(and (list? q) (eq? 'grammar (first q))) - (grammar (second q) (append-map make-cfg (cddr q)))] - [(and (list? q) (eq? '::= (second q))) - (let ([nt (first q)] - [rules (split-by-separator (cddr q))]) - (map (lambda (x) (cons nt x)) (map make-rules rules)))] - [else (error "MAKE-CFG -- Parse error, unknown token" q)])) - -(define (make-cfg start rules) - (grammar start (make-rules rules))) - -(define (make-rules xs) - (cond - [(null? xs) null] - [(string? (car xs)) (cons (terminal (car xs)) (make-rules (cdr xs)))] - [(symbol? (car xs)) (append (map non-terminal (symbol->list (car xs))) (make-rules (cdr xs)))] - [else (error "Invalid syntax in production" xs)])) - -(define (split-at-symb symb xs) - (define (iter left right) - (cond - [(null? right) (cons left null)] - [(eq? symb (car right)) (cons left (cdr right))] - [else (iter (cons (car right) left) (cdr right))])) - (let ([res (iter null xs)]) - (cons (reverse (car res)) (cdr res)))) - -(define (split-by-separator xs) - (let ([res (split-at-symb SEPARATOR xs)]) - (if (null? (cdr res)) - res - (cons (car res) (split-by-separator (cdr res)))))) - -(define (symbol->list s) - (map string->symbol - (map string - (string->list (symbol->string s))))) - -(define sample '(S ::= "" -- SS -- "(" S ")")) -(define sample2 '(grammar S (S ::= "" -- SS -- "(" S ")" -- Q) (Q ::= "" -- QQ -- "[" Q "]"))) -(define sample3 '(grammar S - (S ::= A B -- D E) - (A ::= "a") - (B ::= "b" C) - (C ::= "c") - (D ::= "d" F) - (E ::= "e") - (F ::= "f" D))) - -;; zadanie 2 - -;; korzystam z algorytmów przedstawionych w tej książce: -;; https://bit.ly/3ev0NUA, konkretnie te ze stron 50-51 -;; Pozwoliłem sobie trochę zmienić przeznaczenie funkcji cfg-unreachable oraz cfg-unproductive -;; Zamiast zwracać nieproduktywne nieterminale, zwracają właśnie produktywne -;; i analogicznie w tym drugim. Po prostu taka implementacja jest dla mnie wygodniejsza, -;; a jest bardzo nieistotną zmianą koncepcyjną. -;; Stąd zmiana nazwy na cfg-productive oraz cfg-reachable - -;; cfg-productive działa w ten sposób: -;; Jakiś nieterminal nazywamy produktywnym, jeśli ma co najmniej jedną produktywną zasadę -;; Jakąś zasadę nazywamy produktywną, jeśli składa się z terminali oraz produktywnych nieterminali -;; Jasno widać, że wg tej definicji te nieterminale, które nie są produktywne, są nieproduktywne -;; wg definicji zadania, a cała reszta jest produktwna. - -;; Algorytm znajdowania produktywnych nieterminali: -;; Mamy listę produktywnych nieterminali P, początkowo pustą -;; 1. Stwórz nową listę P' -;; 2. Przejdź po liście produkcji -;; -> jeśli dana produkcja jest produktywna (wg P), dodaj jej nieterminal do P' -;; 3. Jeśli P != P', zrób P := P' i wróć do 1. -;; 4. Zwróć P - -;; Fajne w tym algorytmie jest to, że jeśli mamy jakiś nieterminal, którego -;; używamy w jakiejś produkcji, ale ten nieterminal nie ma zdefiniowanej swojej produkcji -;; to nie zostanie oznaczony jako produktywny, co jest dla nas korzystne - -;; Algorytm znajdowania osiągalnych nieterminali: -;; Traktujemy nitereminale jak wierzchołki w grafie a zasady jako listy sąsiedztwa. -;; Terminale są liśćmi, a nieterminale węzłami. Robimy po prostu DFSa z nieterminalu -;; startowego i węzły do których dotrzemy oznaczamy jako osiągalne. - -;; Wg papierka który tutaj podałem, jeśli najpierw usuniemy nieproduktywne nieterminale, -;; a w następnej kolejności nieosiągalne, to nasza gramatyka stanie się regularna. - -(define (productive? p productive-nt) - (or (terminal? p) (member (non-terminal-sym p) productive-nt))) -(define (rule-productive? r productive-nt) - (andmap (lambda (x) (productive? x productive-nt)) r)) - -(define (cfg-productive g) - (define (find-productive-nt productive-nt rules) - (cond - [(null? rules) (remove-duplicates productive-nt)] - [(rule-productive? (cdar rules) productive-nt) - (find-productive-nt (cons (caar rules) productive-nt) (cdr rules))] - [else (find-productive-nt productive-nt (cdr rules))])) - (define (iter productive-nt) - (let ([new-prod-nt (find-productive-nt productive-nt (grammar-rules g))]) - (if (equal? productive-nt new-prod-nt) - productive-nt - (iter new-prod-nt)))) - (iter null)) - -(define (cfg-reachable g) - (define (iter verts vis) - (cond - [(null? verts) vis] - [(member (car verts) vis) (iter (cdr verts) vis)] - [else (iter (cdr verts) (dfs (car verts) vis))])) - (define (dfs v vis) - (display v) - (newline) - (let* ([rules (filter (lambda (r) (eq? (car r) v)) (grammar-rules g))] - [verts (append-map (lambda (r) (cdr r)) rules)] - [verts (filter non-terminal? verts)] - [verts (map non-terminal-sym verts)]) - (iter verts (cons v vis)))) - (dfs (grammar-start g) null)) - -(define (cfg-optimize g) - (let* ([productive-nt (cfg-productive g)] - [productive-rules (filter (lambda (r) - (rule-productive? (cdr r) productive-nt)) - (grammar-rules g))] - [new-g (grammar (grammar-start g) productive-rules)] - [reachable-nt (cfg-reachable new-g)] - [res-g (grammar (grammar-start new-g) (filter - (lambda (r) (member (car r) reachable-nt)) - (grammar-rules new-g)))]) - res-g)) -
\ No newline at end of file diff --git a/Semestr 2/racket/l10z18/solution.bak b/Semestr 2/racket/l10z18/solution.bak deleted file mode 100644 index 02eb770..0000000 --- a/Semestr 2/racket/l10z18/solution.bak +++ /dev/null @@ -1,363 +0,0 @@ -#lang racket - -;; Składnia abstrakcyjna -(struct const (val) #:transparent) -(struct var-expr (name) #:transparent) -(struct let-expr (id bound body) #:transparent) -(struct letrec-expr (id bound body) #:transparent) -(struct if-expr (eb et ef) #:transparent) -(struct lambda-expr (arg body) #:transparent) -(struct app-expr (fun arg) #:transparent) - -(define (keyword s) - (member s '(true false null and or if cond else lambda let letrec))) - -(define (expr? e) - (match e - [(const n) (or (number? n) - (boolean? n) - (null? n) - (string? n))] - [(var-expr id) (symbol? id)] - [(let-expr x e1 e2 ) (and (symbol? x) - (expr? e1) - (expr? e2))] - [(letrec-expr x e1 e2) (and (symbol? x) - (expr? e1) - (expr? e2))] - [(if-expr eb et ef) (and (expr? eb) - (expr? et) - (expr? ef))] - [(lambda-expr x e) (and (symbol? x) - (expr? e))] - [(app-expr ef ea) (and (expr? ef) - (expr? ea))] - [_ false])) - -;; Parsowanie (zacytowane wyrażenie -> składnia abstrakcyjna) -(define (parse q) - (cond - [(number? q) (const q)] - [(string? q) (const q)] - [(eq? q 'true) (const true)] - [(eq? q 'false) (const false)] - [(eq? q 'null) (const null)] - [(and (symbol? q) - (not (keyword q))) - (var-expr q)] - [(and (list? q) - (= (length q) 3) - (eq? (first q) 'let) - (list? (second q)) - (= (length (second q)) 2) - (symbol? (first (second q)))) - (let-expr (first (second q)) - (parse (second (second q))) - (parse (third q)))] - [(and (list? q) - (= (length q) 3) - (eq? (first q) 'letrec) - (list? (second q)) - (= (length (second q)) 2) - (symbol? (first (second q)))) - (letrec-expr (first (second q)) - (parse (second (second q))) - (parse (third q)))] - [(and (list? q) - (= (length q) 4) - (eq? (first q) 'if)) - (if-expr (parse (second q)) - (parse (third q)) - (parse (fourth q)))] - [(and (list? q) - (pair? q) - (eq? (first q) 'and)) - (desugar-and (map parse (cdr q)))] - [(and (list? q) - (pair? q) - (eq? (first q) 'or)) - (desugar-or (map parse (cdr q)))] - [(and (list? q) - (>= (length q) 2) - (eq? (first q) 'cond)) - (parse-cond (cdr q))] - [(and (list? q) - (= (length q) 3) - (eq? (first q) 'lambda) - (list? (second q)) - (andmap symbol? (second q)) - (cons? (second q))) - (desugar-lambda (second q) (parse (third q)))] - [(and (list? q) - (>= (length q) 2)) - (desugar-app (parse (first q)) (map parse (cdr q)))] - [else (error "Unrecognized token:" q)])) - -(define (parse-cond qs) - (match qs - [(list (list 'else q)) - (parse q)] - - [(list (list q _)) - (error "Expected 'else' in last branch but found:" q)] - - [(cons (list qb qt) qs) - (if-expr (parse qb) (parse qt) (parse-cond qs))])) - -(define (desugar-and es) - (if (null? es) - (const true) - (if-expr (car es) (desugar-and (cdr es)) (const false)))) - -(define (desugar-or es) - (if (null? es) - (const false) - (if-expr (car es) (const true) (desugar-or (cdr es))))) - -(define (desugar-lambda xs e) - (if (null? xs) - e - (lambda-expr (car xs) (desugar-lambda (cdr xs) e)))) - -(define (desugar-app e es) - (if (null? es) - e - (desugar-app (app-expr e (car es)) (cdr es)))) - -;; Środowiska -(struct blackhole ()) -(struct environ (xs)) - -(define env-empty (environ null)) -(define (env-add x v env) - (environ (cons (mcons x v) (environ-xs env)))) -(define (env-lookup x env) - (define (assoc-lookup xs) - (cond [(null? xs) - (error "Unknown identifier" x)] - [(eq? x (mcar (car xs))) - (let ((v (mcdr (car xs)))) - (if (blackhole? v) - (error "Jumped into blackhole at" x) - v))] - [else (assoc-lookup (cdr xs))])) - (assoc-lookup (environ-xs env))) -(define (env-update! x v env) - (define (assoc-update xs) - (cond [(null? xs) (error "Unknown identifier" x)] - [(eq? x (mcar (car xs))) - (set-mcdr! (car xs) v)] - [else (assoc-update (cdr xs))])) - (assoc-update (environ-xs env))) - -;; Domknięcia -(struct clo (arg body env)) - -;; Procedury wbudowane, gdzie -;; proc — Racketowa procedura którą należy uruchomić -;; args — lista dotychczas dostarczonych argumentów -;; pnum — liczba brakujących argumentów (> 0) -;; W ten sposób pozwalamy na częściową aplikację Racketowych procedur -;; — zauważmy że zawsze znamy pnum, bo w naszym języku arność -;; procedury jest ustalona z góry -(struct builtin (proc args pnum) #:transparent) - -;; Pomocnicze konstruktory procedur unarnych i binarnych -(define (builtin/1 p) - (builtin (lambda (x) (return (p x))) null 1)) -(define (builtin/2 p) - (builtin (lambda (x y) (return (p x y))) null 2)) - -;; Procedury -(define (proc? v) - (or (and (clo? v) - (symbol? (clo-arg v)) - (expr? (clo-body v)) - (environ? (clo-env v))) - (and (builtin? v) - (procedure? (builtin-proc v)) - (andmap value? (builtin-args v)) - (natural? (builtin-pnum v)) - (> (builtin-pnum v) 0)))) - -;; Definicja typu wartości -(define (value? v) - (or (number? v) - (boolean? v) - (null? v) - (string? v) - (and (cons? v) - (value? (car v)) - (value? (cdr v))) - (proc? v))) - -;; Środowisko początkowe (przypisujące procedury wbudowane ich nazwom) - -(define start-env - (foldl (lambda (p env) (env-add (first p) (second p) env)) - env-empty - `((+ ,(builtin/2 +)) - (- ,(builtin/2 -)) - (* ,(builtin/2 *)) - (/ ,(builtin/2 /)) - (~ ,(builtin/1 -)) - (< ,(builtin/2 <)) - (> ,(builtin/2 >)) - (= ,(builtin/2 =)) - (<= ,(builtin/2 <=)) - (>= ,(builtin/2 >=)) - (not ,(builtin/1 not)) - (cons ,(builtin/2 cons)) - (car ,(builtin/1 car)) - (cdr ,(builtin/1 cdr)) - (pair? ,(builtin/1 cons?)) - (null? ,(builtin/1 null?)) - (boolean? ,(builtin/1 boolean?)) - (number? ,(builtin/1 number?)) - (procedure? ,(builtin/1 (lambda (x) (or (clo? x) (builtin? x))))) - (string? ,(builtin/1 string?)) - (string-= ,(builtin/2 string=?)) - ;; and so on, and so on - ))) - -;; Efekt - -(define (effect-builtin/1 p) - (builtin p null 1)) -(define (effect-builtin/2 p) - (builtin p null 2)) - -(define effect-env - (foldl (lambda (p env) (env-add (first p) (second p) env)) - start-env - `((choose ,(effect-builtin/2 (lambda (x y) (list x y)))) - ))) - -(define (bind c k) (append-map k c)) - -(define (return x) (list x)) - -;; Ewaluator -(define (eval-env e env) - (match e - [(const n) - (return n)] - - [(var-expr x) - (return (env-lookup x env))] - - [(let-expr x e1 e2) - (bind (eval-env e1 env) (lambda (v1) - (eval-env e2 (env-add x v1 env))))] - - [(letrec-expr f ef eb) - (let ((new-env (env-add f (blackhole) env))) - (bind (eval-env ef new-env) (lambda (vf) - (env-update! f vf new-env) - (eval-env eb new-env))))] - - [(if-expr eb et ef) - (bind (eval-env eb env) (lambda (vb) - (match vb - [#t (eval-env et env)] - [#f (eval-env ef env)] - [v (error "Not a boolean:" v)])))] - - [(lambda-expr x e) - (return (clo x e env))] - - [(app-expr ef ea) - (bind (eval-env ef env) (lambda (vf) - (bind (eval-env ea env) (lambda (va) - (match vf - [(clo x e env) - (eval-env e (env-add x va env))] - [(builtin p args nm) - (if (= nm 1) - (apply p (reverse (cons va args))) - (return (builtin p (cons va args) (- nm 1))))] - [_ (error "Not a function:" vf)])))))])) - -(define (eval e) - (eval-env e effect-env)) - - -;; Przykladowy program - -(define PROGRAM - '((if (choose true false) (lambda (x) x) (lambda (x) (+ x 1))) (choose 1 2))) - - -;; REPL — interpreter interaktywny (read-eval-print loop) - -;; dodajemy składnię na wiązanie zmiennych "na poziomie interpretera" -;; i komendę wyjścia "exit" ... -(struct letrec-repl (id expr)) -(struct let-repl (id expr)) -(struct exit-repl ()) - -;; ... a także rozszerzoną procedurę parsującą te dodatkowe komendy i -;; prostą obsługę błędów -(define (parse-repl q) - (with-handlers - ([exn? (lambda (exn) - (display "Parse error! ") - (displayln (exn-message exn)))]) - (cond - [(eq? q 'exit) (exit-repl)] - [(and (list? q) - (= 3 (length q)) - (eq? (first q) 'let)) - (let-repl (second q) (parse (third q)))] - [(and (list? q) - (= 3 (length q)) - (eq? (first q) 'letrec)) - (letrec-repl (second q) (parse (third q)))] - [else (parse q)]))) - -;; trochę zamieszania w procedurze eval-repl wynika z rudymentarnej -;; obsługi błędów: nie chcemy żeby błąd w interpretowanym programie -;; kończył działanie całego interpretera! -(define (eval-repl c env continue) - (define (eval-with-err e env) - (with-handlers - ([exn? (lambda (exn) - (display "Error! ") - (displayln (exn-message exn)))]) - (eval-env e env))) - (match c - [(exit-repl) - (void)] - - [(let-repl x e) - (let ((v (eval-with-err e env))) - (if (void? v) - (continue env) - (continue (env-add x v env))))] - - [(letrec-repl f e) - (let* ((new-env (env-add f (blackhole) env)) - (v (eval-with-err e new-env))) - (if (void? v) - (continue env) - (begin - (env-update! f v new-env) - (continue new-env))))] - - [_ - (let ((v (eval-with-err c env))) - (unless (void? v) - (displayln v)) - (continue env))])) - -;; I w końcu interaktywny interpreter -(define (repl) - (define (go env) - (display "FUN > ") - (let* ((q (read)) - (c (parse-repl q))) - (if (void? c) - (go env) - (eval-repl c env go)))) - (displayln "Welcome to the FUN functional language interpreter!") - (go start-env))
\ No newline at end of file diff --git a/Semestr 2/racket/l10z18/solution.rkt b/Semestr 2/racket/l10z18/solution.rkt deleted file mode 100644 index 7adcea4..0000000 --- a/Semestr 2/racket/l10z18/solution.rkt +++ /dev/null @@ -1,409 +0,0 @@ -#lang racket - -;; Składnia abstrakcyjna -(struct const (val) #:transparent) -(struct var-expr (name) #:transparent) -(struct let-expr (id bound body) #:transparent) -(struct letrec-expr (id bound body) #:transparent) -(struct if-expr (eb et ef) #:transparent) -(struct lambda-expr (arg body) #:transparent) -(struct app-expr (fun arg) #:transparent) - -(provide parse eval norm) - -(define (keyword s) - (member s '(true false null and or if cond else lambda let letrec))) - -(define (expr? e) - (match e - [(const n) (or (number? n) - (boolean? n) - (null? n) - (string? n))] - [(var-expr id) (symbol? id)] - [(let-expr x e1 e2 ) (and (symbol? x) - (expr? e1) - (expr? e2))] - [(letrec-expr x e1 e2) (and (symbol? x) - (expr? e1) - (expr? e2))] - [(if-expr eb et ef) (and (expr? eb) - (expr? et) - (expr? ef))] - [(lambda-expr x e) (and (symbol? x) - (expr? e))] - [(app-expr ef ea) (and (expr? ef) - (expr? ea))] - [_ false])) - -;; Parsowanie (zacytowane wyrażenie -> składnia abstrakcyjna) -(define (parse q) - (cond - [(number? q) (const q)] - [(string? q) (const q)] - [(eq? q 'true) (const true)] - [(eq? q 'false) (const false)] - [(eq? q 'null) (const null)] - [(and (symbol? q) - (not (keyword q))) - (var-expr q)] - [(and (list? q) - (= (length q) 3) - (eq? (first q) 'let) - (list? (second q)) - (= (length (second q)) 2) - (symbol? (first (second q)))) - (let-expr (first (second q)) - (parse (second (second q))) - (parse (third q)))] - [(and (list? q) - (= (length q) 3) - (eq? (first q) 'letrec) - (list? (second q)) - (= (length (second q)) 2) - (symbol? (first (second q)))) - (letrec-expr (first (second q)) - (parse (second (second q))) - (parse (third q)))] - [(and (list? q) - (= (length q) 4) - (eq? (first q) 'if)) - (if-expr (parse (second q)) - (parse (third q)) - (parse (fourth q)))] - [(and (list? q) - (pair? q) - (eq? (first q) 'and)) - (desugar-and (map parse (cdr q)))] - [(and (list? q) - (pair? q) - (eq? (first q) 'or)) - (desugar-or (map parse (cdr q)))] - [(and (list? q) - (>= (length q) 2) - (eq? (first q) 'cond)) - (parse-cond (cdr q))] - [(and (list? q) - (= (length q) 3) - (eq? (first q) 'lambda) - (list? (second q)) - (andmap symbol? (second q)) - (cons? (second q))) - (desugar-lambda (second q) (parse (third q)))] - [(and (list? q) - (>= (length q) 2)) - (desugar-app (parse (first q)) (map parse (cdr q)))] - [else (error "Unrecognized token:" q)])) - -(define (parse-cond qs) - (match qs - [(list (list 'else q)) - (parse q)] - - [(list (list q _)) - (error "Expected 'else' in last branch but found:" q)] - - [(cons (list qb qt) qs) - (if-expr (parse qb) (parse qt) (parse-cond qs))])) - -(define (desugar-and es) - (if (null? es) - (const true) - (if-expr (car es) (desugar-and (cdr es)) (const false)))) - -(define (desugar-or es) - (if (null? es) - (const false) - (if-expr (car es) (const true) (desugar-or (cdr es))))) - -(define (desugar-lambda xs e) - (if (null? xs) - e - (lambda-expr (car xs) (desugar-lambda (cdr xs) e)))) - -(define (desugar-app e es) - (if (null? es) - e - (desugar-app (app-expr e (car es)) (cdr es)))) - -;; Środowiska -(struct blackhole ()) -(struct environ (xs)) - -(define env-empty (environ null)) -(define (env-add x v env) - (environ (cons (mcons x v) (environ-xs env)))) -(define (env-lookup x env) - (define (assoc-lookup xs) - (cond [(null? xs) - (error "Unknown identifier" x)] - [(eq? x (mcar (car xs))) - (let ((v (mcdr (car xs)))) - (if (blackhole? v) - (error "Jumped into blackhole at" x) - v))] - [else (assoc-lookup (cdr xs))])) - (assoc-lookup (environ-xs env))) -(define (env-update! x v env) - (define (assoc-update xs) - (cond [(null? xs) (error "Unknown identifier" x)] - [(eq? x (mcar (car xs))) - (set-mcdr! (car xs) v)] - [else (assoc-update (cdr xs))])) - (assoc-update (environ-xs env))) - -;; Domknięcia -(struct clo (arg body env)) - -;; Procedury wbudowane, gdzie -;; proc — Racketowa procedura którą należy uruchomić -;; args — lista dotychczas dostarczonych argumentów -;; pnum — liczba brakujących argumentów (> 0) -;; W ten sposób pozwalamy na częściową aplikację Racketowych procedur -;; — zauważmy że zawsze znamy pnum, bo w naszym języku arność -;; procedury jest ustalona z góry -(struct builtin (proc args pnum) #:transparent) - -;; Pomocnicze konstruktory procedur unarnych i binarnych -(define (builtin/1 p) - (builtin (lambda (x) (return (p x))) null 1)) -(define (builtin/2 p) - (builtin (lambda (x y) (return (p x y))) null 2)) - -;; Procedury -(define (proc? v) - (or (and (clo? v) - (symbol? (clo-arg v)) - (expr? (clo-body v)) - (environ? (clo-env v))) - (and (builtin? v) - (procedure? (builtin-proc v)) - (andmap value? (builtin-args v)) - (natural? (builtin-pnum v)) - (> (builtin-pnum v) 0)))) - -;; Definicja typu wartości -(define (value? v) - (or (number? v) - (boolean? v) - (null? v) - (string? v) - (and (cons? v) - (value? (car v)) - (value? (cdr v))) - (proc? v))) - -;; Środowisko początkowe (przypisujące procedury wbudowane ich nazwom) - -(define start-env - (foldl (lambda (p env) (env-add (first p) (second p) env)) - env-empty - `((+ ,(builtin/2 +)) - (- ,(builtin/2 -)) - (* ,(builtin/2 *)) - (/ ,(builtin/2 /)) - (~ ,(builtin/1 -)) - (< ,(builtin/2 <)) - (> ,(builtin/2 >)) - (= ,(builtin/2 =)) - (<= ,(builtin/2 <=)) - (>= ,(builtin/2 >=)) - (not ,(builtin/1 not)) - (cons ,(builtin/2 cons)) - (car ,(builtin/1 car)) - (cdr ,(builtin/1 cdr)) - (pair? ,(builtin/1 cons?)) - (null? ,(builtin/1 null?)) - (boolean? ,(builtin/1 boolean?)) - (number? ,(builtin/1 number?)) - (procedure? ,(builtin/1 (lambda (x) (or (clo? x) (builtin? x))))) - (string? ,(builtin/1 string?)) - (string-= ,(builtin/2 string=?)) - ;; and so on, and so on - ))) - -;; Efekt - -(define (effect-builtin/1 p) - (builtin p null 1)) -(define (effect-builtin/2 p) - (builtin p null 2)) -(define (effect-builtin/3 p) - (builtin p null 3)) - - -(define effect-env - (foldl (lambda (p env) (env-add (first p) (second p) env)) - start-env - `((flip ,(effect-builtin/3 (lambda (p x y) (list (cons p x) (cons (- 1 p) y))))) - (uniform ,(effect-builtin/1 (lambda (x) (let ((l (/ 1 (length x)))) - (map (lambda (x) (cons l x)) x))))) - ))) - -;; c to lista par (pstwo, wartość) -;; k to funkcja która przyjmuje wartość i coś z nią robi sobie i zwraca listę par (pstwo, wartość) - -(define (bind c k) - (append-map - (lambda (x) (let ((pstwo (car x)) - (val (cdr x))) - (map - (lambda (x) (cons (* pstwo (car x)) (cdr x))) - (k (cdr x))))) - c)) - -(define (return x) (list (cons 1 x))) - -;; Ewaluator -(define (eval-env e env) - (match e - [(const n) - (return n)] - - [(var-expr x) - (return (env-lookup x env))] - - [(let-expr x e1 e2) - (bind (eval-env e1 env) (lambda (v1) - (eval-env e2 (env-add x v1 env))))] - - [(letrec-expr f ef eb) - (let ((new-env (env-add f (blackhole) env))) - (bind (eval-env ef new-env) (lambda (vf) - (env-update! f vf new-env) - (eval-env eb new-env))))] - - [(if-expr eb et ef) - (bind (eval-env eb env) (lambda (vb) - (match vb - [#t (eval-env et env)] - [#f (eval-env ef env)] - [v (error "Not a boolean:" v)])))] - - [(lambda-expr x e) - (return (clo x e env))] - - [(app-expr ef ea) - (bind (eval-env ef env) (lambda (vf) - (bind (eval-env ea env) (lambda (va) - (match vf - [(clo x e env) - (eval-env e (env-add x va env))] - [(builtin p args nm) - (if (= nm 1) - (apply p (reverse (cons va args))) - (return (builtin p (cons va args) (- nm 1))))] - [_ (error "Not a function:" vf)])))))])) - -(define (eval e) - (eval-env e effect-env)) - - -;; Przykladowy program - -(define PROGRAM - '((if (choose true false) (lambda (x) x) (lambda (x) (+ x 1))) (choose 1 2))) - - -;; REPL — interpreter interaktywny (read-eval-print loop) - -;; dodajemy składnię na wiązanie zmiennych "na poziomie interpretera" -;; i komendę wyjścia "exit" ... -(struct letrec-repl (id expr)) -(struct let-repl (id expr)) -(struct exit-repl ()) - -;; ... a także rozszerzoną procedurę parsującą te dodatkowe komendy i -;; prostą obsługę błędów -(define (parse-repl q) - (with-handlers - ([exn? (lambda (exn) - (display "Parse error! ") - (displayln (exn-message exn)))]) - (cond - [(eq? q 'exit) (exit-repl)] - [(and (list? q) - (= 3 (length q)) - (eq? (first q) 'let)) - (let-repl (second q) (parse (third q)))] - [(and (list? q) - (= 3 (length q)) - (eq? (first q) 'letrec)) - (letrec-repl (second q) (parse (third q)))] - [else (parse q)]))) - -;; trochę zamieszania w procedurze eval-repl wynika z rudymentarnej -;; obsługi błędów: nie chcemy żeby błąd w interpretowanym programie -;; kończył działanie całego interpretera! -(define (eval-repl c env continue) - (define (eval-with-err e env) - (with-handlers - ([exn? (lambda (exn) - (display "Error! ") - (displayln (exn-message exn)))]) - (eval-env e env))) - (match c - [(exit-repl) - (void)] - - [(let-repl x e) - (let ((v (eval-with-err e env))) - (if (void? v) - (continue env) - (continue (env-add x v env))))] - - [(letrec-repl f e) - (let* ((new-env (env-add f (blackhole) env)) - (v (eval-with-err e new-env))) - (if (void? v) - (continue env) - (begin - (env-update! f v new-env) - (continue new-env))))] - - [_ - (let ((v (eval-with-err c env))) - (unless (void? v) - (displayln v)) - (continue env))])) - -;; I w końcu interaktywny interpreter -(define (repl) - (define (go env) - (display "FUN > ") - (let* ((q (read)) - (c (parse-repl q))) - (if (void? c) - (go env) - (eval-repl c env go)))) - (displayln "Welcome to the FUN functional language interpreter!") - (go start-env)) - - -(define prog '(if (flip 0.3 true false) "wygrana" "przegrana")) - - -(define (norm xs) - (define sum (lambda (xs) (foldl + 0 xs))) - (define carlist (lambda (xs) (map car xs))) - (define (iter xs res) - (cond - [(null? xs) res] - [(member (cdar xs) (map cdr res)) (iter (cdr xs) res)] - [else (let* ((cur (cdar xs)) - (pstwa (filter (lambda (x) (equal? (cdr x) cur)) xs))) - (iter (cdr xs) (cons (cons (sum (carlist pstwa)) cur) res)))])) - (iter xs null)) - - -(define DICE-MANY - '(letrec [from-to (lambda (x n) - (cons x - (if (= x n) - null - (from-to (+ 1 x) n))))] - (let [dice (lambda (x) (uniform (from-to 1 6)))] - (letrec [dice-many (lambda (n) (if (= n 0) - 0 - (+ (dice 0) (dice-many (- n 1)))))] - (dice-many (dice 0))))))
\ No newline at end of file diff --git a/Semestr 2/racket/l11/rozw.bak b/Semestr 2/racket/l11/rozw.bak deleted file mode 100644 index cda82ce..0000000 --- a/Semestr 2/racket/l11/rozw.bak +++ /dev/null @@ -1,2 +0,0 @@ -#lang racket - diff --git a/Semestr 2/racket/l11/rozw.rkt b/Semestr 2/racket/l11/rozw.rkt deleted file mode 100644 index e45e403..0000000 --- a/Semestr 2/racket/l11/rozw.rkt +++ /dev/null @@ -1,776 +0,0 @@ -#reader(lib"read.ss""wxme")WXME0109 ## -#| - This file uses the GRacket editor format. - Open this file in DrRacket version 7.6 or later to read it. - - Most likely, it was created by saving a program in DrRacket, - and it probably contains a program with non-text elements - (such as images or comment boxes). - - http://racket-lang.org/ -|# - 33 7 #"wxtext\0" -3 1 6 #"wxtab\0" -1 1 8 #"wximage\0" -2 0 8 #"wxmedia\0" -4 1 34 #"(lib \"syntax-browser.ss\" \"mrlib\")\0" -1 0 36 #"(lib \"cache-image-snip.ss\" \"mrlib\")\0" -1 0 68 -(0 - #"((lib \"image-core.ss\" \"mrlib\") (lib \"image-core-wxme.rkt\" \"mr" - #"lib\"))\0" -) 1 0 16 #"drscheme:number\0" -3 0 44 #"(lib \"number-snip.ss\" \"drscheme\" \"private\")\0" -1 0 36 #"(lib \"comment-snip.ss\" \"framework\")\0" -1 0 93 -(1 - #"((lib \"collapsed-snipclass.ss\" \"framework\") (lib \"collapsed-sni" - #"pclass-wxme.ss\" \"framework\"))\0" -) 0 0 43 #"(lib \"collapsed-snipclass.ss\" \"framework\")\0" -0 0 19 #"drscheme:sexp-snip\0" -0 0 29 #"drscheme:bindings-snipclass%\0" -1 0 101 -(2 - #"((lib \"ellipsis-snip.rkt\" \"drracket\" \"private\") (lib \"ellipsi" - #"s-snip-wxme.rkt\" \"drracket\" \"private\"))\0" -) 2 0 88 -(3 - #"((lib \"pict-snip.rkt\" \"drracket\" \"private\") (lib \"pict-snip.r" - #"kt\" \"drracket\" \"private\"))\0" -) 0 0 55 -#"((lib \"snip.rkt\" \"pict\") (lib \"snip-wxme.rkt\" \"pict\"))\0" -1 0 34 #"(lib \"bullet-snip.rkt\" \"browser\")\0" -0 0 25 #"(lib \"matrix.ss\" \"htdp\")\0" -1 0 22 #"drscheme:lambda-snip%\0" -1 0 29 #"drclickable-string-snipclass\0" -0 0 26 #"drracket:spacer-snipclass\0" -0 0 57 -#"(lib \"hrule-snip.rkt\" \"macro-debugger\" \"syntax-browser\")\0" -1 0 26 #"drscheme:pict-value-snip%\0" -0 0 45 #"(lib \"image-snipr.ss\" \"slideshow\" \"private\")\0" -1 0 38 #"(lib \"pict-snipclass.ss\" \"slideshow\")\0" -2 0 55 #"(lib \"vertical-separator-snip.ss\" \"stepper\" \"private\")\0" -1 0 18 #"drscheme:xml-snip\0" -1 0 31 #"(lib \"xml-snipclass.ss\" \"xml\")\0" -1 0 21 #"drscheme:scheme-snip\0" -2 0 34 #"(lib \"scheme-snipclass.ss\" \"xml\")\0" -1 0 10 #"text-box%\0" -1 0 32 #"(lib \"text-snipclass.ss\" \"xml\")\0" -1 0 1 6 #"wxloc\0" - 0 0 81 0 1 #"\0" -0 75 1 #"\0" -0 10 90 -1 90 -1 3 -1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 255 255 255 1 -1 0 9 -#"Standard\0" -0 75 12 #"Courier New\0" -0 16 90 -1 90 -1 3 -1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 255 255 255 1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 -1 -1 2 24 -#"framework:default-color\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 255 255 0 0 0 -1 -1 2 -1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 150 0 150 0 0 0 -1 -1 2 15 -#"text:ports out\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 34 119 34 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 93 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 255 0 0 0 0 0 -1 --1 2 15 #"text:ports err\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 204 204 0 0 0 -1 -1 2 -1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 175 0 0 0 -1 -1 2 17 -#"text:ports value\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 144 179 255 0 0 0 -1 -1 2 -1 #"\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 34 139 34 0 0 0 -1 --1 2 27 #"Matching Parenthesis Style\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 34 139 34 0 0 0 -1 --1 2 1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 37 -#"framework:syntax-color:scheme:symbol\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 144 179 255 0 0 0 -1 -1 2 -38 #"framework:syntax-color:scheme:keyword\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 144 179 255 0 0 0 -1 -1 2 -1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 194 116 31 0 0 0 -1 -1 2 -38 #"framework:syntax-color:scheme:comment\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 204 221 170 0 0 0 -1 -1 2 -1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 41 128 38 0 0 0 -1 -1 2 37 -#"framework:syntax-color:scheme:string\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 144 179 255 0 0 0 -1 -1 2 -35 #"framework:syntax-color:scheme:text\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 144 179 255 0 0 0 -1 -1 2 -39 #"framework:syntax-color:scheme:constant\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 144 179 255 0 0 0 -1 -1 2 -1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 132 60 36 0 0 0 -1 -1 2 49 -#"framework:syntax-color:scheme:hash-colon-keyword\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 144 179 255 0 0 0 -1 -1 2 -42 #"framework:syntax-color:scheme:parenthesis\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 178 178 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 36 -#"framework:syntax-color:scheme:error\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 204 204 0 0 0 -1 -1 2 -1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 36 -#"framework:syntax-color:scheme:other\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 144 179 255 0 0 0 -1 -1 2 -16 #"Misspelled Text\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 255 255 0 0 0 -1 -1 2 -1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 81 112 203 0 0 0 -1 -1 2 -38 #"drracket:check-syntax:lexically-bound\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 50 163 255 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 178 34 34 0 0 0 -1 -1 2 28 -#"drracket:check-syntax:set!d\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 204 204 0 0 0 -1 -1 2 -37 #"drracket:check-syntax:unused-require\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 204 204 0 0 0 -1 -1 2 -36 #"drracket:check-syntax:free-variable\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 204 204 0 0 0 -1 -1 2 -1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 68 0 203 0 0 0 -1 -1 2 31 -#"drracket:check-syntax:imported\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 166 0 255 0 0 0 -1 -1 2 47 -#"drracket:check-syntax:my-obligation-style-pref\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 255 192 203 0 0 0 -1 -1 2 -1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 0 116 0 0 0 0 -1 -1 2 50 -#"drracket:check-syntax:their-obligation-style-pref\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 50 205 50 0 0 0 -1 -1 2 48 -#"drracket:check-syntax:unk-obligation-style-pref\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 255 255 255 0 0 0 -1 -1 2 -1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 139 142 28 0 0 0 -1 -1 2 -49 #"drracket:check-syntax:both-obligation-style-pref\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 240 230 140 0 0 0 -1 -1 2 -26 #"plt:htdp:test-coverage-on\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 255 255 255 0 0 0 -1 -1 2 -1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 1 0 0 0 0 0 0 255 165 0 0 0 0 -1 -1 2 27 -#"plt:htdp:test-coverage-off\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 1 0 0 0 0 0 0 205 92 92 0 0 0 -1 -1 4 1 -#"\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 4 4 #"XML\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 2 37 #"plt:module-language:test-coverage-on\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 255 255 255 0 0 0 -1 -1 2 -38 #"plt:module-language:test-coverage-off\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 1 0 0 0 0 0 0 205 92 92 0 0 0 -1 -1 0 36 -#"mrlib/syntax-browser:subtitle-color\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 100 149 237 0 0 0 -1 -1 0 -42 #"mrlib/syntax-browser:focused-syntax-color\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 50 205 50 0 0 0 -1 -1 4 1 -#"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 191 255 0 0 0 -1 --1 4 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 191 255 0 0 0 -1 --1 4 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 152 251 152 0 0 0 --1 -1 4 32 #"widget.rkt::browser-text% basic\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 4 59 -#"macro-debugger/syntax-browser/properties color-text% basic\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 58 1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 190 190 190 0 0 0 -1 -1 2 -1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 200 0 0 0 0 0 -1 -1 4 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 255 255 0 0 0 -1 -1 4 -1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 4 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 255 0 0 0 -1 -1 4 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 185 220 113 0 0 0 -1 -1 4 -1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 155 255 155 0 0 0 -1 -1 4 -1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 116 116 0 0 0 -1 -1 4 -1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 18 67 155 0 0 0 -1 -1 4 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 30 70 190 0 0 0 -1 -1 4 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 75 135 185 0 0 0 -1 -1 4 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 176 208 208 0 0 0 -1 -1 4 -1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 116 116 255 0 0 0 -1 -1 4 -1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 200 125 255 0 0 0 -1 -1 4 -1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 143 15 223 0 0 0 -1 -1 4 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 165 0 0 0 0 -1 -1 4 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 141 19 5 0 0 0 -1 -1 4 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 244 194 71 0 0 0 -1 -1 4 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 255 255 127 0 0 0 -1 -1 4 -1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 86 86 86 0 0 0 -1 -1 4 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 255 255 255 0 31 31 -1 -1 -4 1 #"\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 255 255 0 -1 -1 - 0 475 0 28 3 12 #"#lang racket" -0 0 24 29 1 #"\n" -0 0 24 29 1 #"\n" -0 0 24 3 1 #"(" -0 0 15 3 7 #"require" -0 0 24 3 1 #" " -0 0 14 3 15 #"racket/contract" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 29 1 #"\n" -0 0 24 29 1 #"\n" -0 0 17 3 13 #";;; Zadanie 1" -0 0 24 29 1 #"\n" -0 0 24 29 1 #"\n" -0 0 24 3 1 #"(" -0 0 15 3 15 #"define/contract" -0 0 24 3 2 #" (" -0 0 14 3 8 #"suffixes" -0 0 24 3 1 #" " -0 0 14 3 2 #"xs" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 3 3 #" (" -0 0 14 3 14 #"parametric->/c" -0 0 24 3 2 #" [" -0 0 14 3 1 #"a" -0 0 24 3 3 #"] (" -0 0 14 3 2 #"->" -0 0 24 3 2 #" (" -0 0 14 3 6 #"listof" -0 0 24 3 1 #" " -0 0 14 3 1 #"a" -0 0 24 3 3 #") (" -0 0 14 3 6 #"listof" -0 0 24 3 2 #" (" -0 0 14 3 6 #"listof" -0 0 24 3 1 #" " -0 0 14 3 1 #"a" -0 0 24 3 5 #")))) " -0 0 24 29 1 #"\n" -0 0 24 3 3 #" (" -0 0 14 3 2 #"if" -0 0 24 3 2 #" (" -0 0 14 3 5 #"null?" -0 0 24 3 1 #" " -0 0 14 3 2 #"xs" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 3 6 #" " -0 0 14 3 4 #"null" -0 0 24 29 1 #"\n" -0 0 24 3 7 #" (" -0 0 14 3 4 #"cons" -0 0 24 3 1 #" " -0 0 14 3 2 #"xs" -0 0 24 3 2 #" (" -0 0 14 3 8 #"suffixes" -0 0 24 3 2 #" (" -0 0 14 3 3 #"cdr" -0 0 24 3 1 #" " -0 0 14 3 2 #"xs" -0 0 24 3 5 #")))))" -0 0 24 29 1 #"\n" -0 0 24 29 1 #"\n" -0 0 24 29 1 #"\n" -0 0 17 3 13 #";;; Zadanie 2" -0 0 24 29 1 #"\n" -0 0 24 29 1 #"\n" -0 0 24 3 1 #"(" -0 0 15 3 15 #"define/contract" -0 0 24 3 2 #" (" -0 0 14 3 8 #"sublists" -0 0 24 3 1 #" " -0 0 14 3 2 #"xs" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 3 3 #" (" -0 0 14 3 14 #"parametric->/c" -0 0 24 3 2 #" [" -0 0 14 3 1 #"a" -0 0 24 3 3 #"] (" -0 0 14 3 2 #"->" -0 0 24 3 2 #" (" -0 0 14 3 6 #"listof" -0 0 24 3 1 #" " -0 0 14 3 1 #"a" -0 0 24 3 3 #") (" -0 0 14 3 6 #"listof" -0 0 24 3 2 #" (" -0 0 14 3 6 #"listof" -0 0 24 3 1 #" " -0 0 14 3 1 #"a" -0 0 24 3 6 #")))) " -0 0 24 29 1 #"\n" -0 0 24 3 3 #" (" -0 0 14 3 2 #"if" -0 0 24 3 2 #" (" -0 0 14 3 5 #"null?" -0 0 24 3 1 #" " -0 0 14 3 2 #"xs" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 3 7 #" (" -0 0 14 3 4 #"list" -0 0 24 3 1 #" " -0 0 14 3 4 #"null" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 3 7 #" (" -0 0 14 3 10 #"append-map" -0 0 24 29 1 #"\n" -0 0 24 3 8 #" (" -0 0 15 3 6 #"lambda" -0 0 24 3 2 #" (" -0 0 14 3 2 #"ys" -0 0 24 3 3 #") (" -0 0 14 3 4 #"list" -0 0 24 3 2 #" (" -0 0 14 3 4 #"cons" -0 0 24 3 2 #" (" -0 0 14 3 3 #"car" -0 0 24 3 1 #" " -0 0 14 3 2 #"xs" -0 0 24 3 2 #") " -0 0 14 3 2 #"ys" -0 0 24 3 2 #") " -0 0 14 3 2 #"ys" -0 0 24 3 2 #"))" -0 0 24 29 1 #"\n" -0 0 24 3 8 #" (" -0 0 14 3 8 #"sublists" -0 0 24 3 2 #" (" -0 0 14 3 3 #"cdr" -0 0 24 3 1 #" " -0 0 14 3 2 #"xs" -0 0 24 3 5 #")))))" -0 0 24 29 1 #"\n" -0 0 24 29 1 #"\n" -0 0 24 29 1 #"\n" -0 0 17 3 13 #";;; Zadanie 3" -0 0 24 29 1 #"\n" -0 0 24 29 1 #"\n" -0 0 24 3 1 #"(" -0 0 15 3 15 #"define/contract" -0 0 24 3 2 #" (" -0 0 14 3 17 #"autistic-identity" -0 0 24 3 1 #" " -0 0 14 3 1 #"x" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 3 3 #" (" -0 0 14 3 14 #"parametric->/c" -0 0 24 3 2 #" [" -0 0 14 3 1 #"a" -0 0 24 3 1 #" " -0 0 14 3 1 #"b" -0 0 24 3 3 #"] (" -0 0 14 3 2 #"->" -0 0 24 3 1 #" " -0 0 14 3 1 #"a" -0 0 24 3 1 #" " -0 0 14 3 1 #"b" -0 0 24 3 1 #" " -0 0 14 3 1 #"a" -0 0 24 3 2 #"))" -0 0 24 29 1 #"\n" -0 0 24 3 2 #" " -0 0 14 3 1 #"x" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 29 1 #"\n" -0 0 24 3 1 #"(" -0 0 15 3 15 #"define/contract" -0 0 24 3 2 #" (" -0 0 14 3 6 #"create" -0 0 24 3 1 #" " -0 0 14 3 4 #"comb" -0 0 24 3 1 #" " -0 0 14 3 4 #"next" -0 0 24 3 1 #" " -0 0 14 3 3 #"beg" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 3 3 #" (" -0 0 14 3 14 #"parametric->/c" -0 0 24 3 2 #" [" -0 0 14 3 1 #"a" -0 0 24 3 1 #" " -0 0 14 3 1 #"b" -0 0 24 3 1 #" " -0 0 14 3 1 #"c" -0 0 24 3 3 #"] (" -0 0 14 3 2 #"->" -0 0 24 3 2 #" (" -0 0 14 3 2 #"->" -0 0 24 3 1 #" " -0 0 14 3 1 #"a" -0 0 24 3 1 #" " -0 0 14 3 1 #"b" -0 0 24 3 1 #" " -0 0 14 3 1 #"c" -0 0 24 3 3 #") (" -0 0 14 3 2 #"->" -0 0 24 3 1 #" " -0 0 14 3 1 #"a" -0 0 24 3 1 #" " -0 0 14 3 1 #"b" -0 0 24 3 2 #") " -0 0 14 3 1 #"a" -0 0 24 3 1 #" " -0 0 14 3 1 #"c" -0 0 24 3 2 #"))" -0 0 24 29 1 #"\n" -0 0 24 3 4 #" ((" -0 0 14 3 4 #"comb" -0 0 24 3 2 #" (" -0 0 14 3 4 #"next" -0 0 24 3 1 #" " -0 0 14 3 3 #"beg" -0 0 24 3 2 #") " -0 0 14 3 3 #"beg" -0 0 24 3 3 #")))" -0 0 24 29 1 #"\n" -0 0 24 29 1 #"\n" -0 0 24 3 1 #"(" -0 0 15 3 15 #"define/contract" -0 0 24 3 2 #" (" -0 0 14 3 7 #"compose" -0 0 24 3 1 #" " -0 0 14 3 2 #"bc" -0 0 24 3 1 #" " -0 0 14 3 2 #"ab" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 3 3 #" (" -0 0 14 3 14 #"parametric->/c" -0 0 24 3 2 #" [" -0 0 14 3 1 #"a" -0 0 24 3 1 #" " -0 0 14 3 1 #"b" -0 0 24 3 1 #" " -0 0 14 3 1 #"c" -0 0 24 3 3 #"] (" -0 0 14 3 2 #"->" -0 0 24 3 2 #" (" -0 0 14 3 2 #"->" -0 0 24 3 1 #" " -0 0 14 3 1 #"b" -0 0 24 3 1 #" " -0 0 14 3 1 #"c" -0 0 24 3 3 #") (" -0 0 14 3 2 #"->" -0 0 24 3 1 #" " -0 0 14 3 1 #"a" -0 0 24 3 1 #" " -0 0 14 3 1 #"b" -0 0 24 3 3 #") (" -0 0 14 3 2 #"->" -0 0 24 3 1 #" " -0 0 14 3 1 #"a" -0 0 24 3 1 #" " -0 0 14 3 1 #"c" -0 0 24 3 3 #")))" -0 0 24 29 1 #"\n" -0 0 24 3 3 #" (" -0 0 15 3 6 #"lambda" -0 0 24 3 2 #" (" -0 0 14 3 1 #"x" -0 0 24 3 3 #") (" -0 0 14 3 2 #"bc" -0 0 24 3 2 #" (" -0 0 14 3 2 #"ab" -0 0 24 3 1 #" " -0 0 14 3 1 #"x" -0 0 24 3 4 #"))))" -0 0 24 29 1 #"\n" -0 0 24 29 1 #"\n" -0 0 24 3 1 #"(" -0 0 15 3 15 #"define/contract" -0 0 24 3 2 #" (" -0 0 14 3 5 #"ident" -0 0 24 3 1 #" " -0 0 14 3 1 #"f" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 3 3 #" (" -0 0 14 3 14 #"parametric->/c" -0 0 24 3 2 #" [" -0 0 14 3 1 #"a" -0 0 24 3 3 #"] (" -0 0 14 3 2 #"->" -0 0 24 3 2 #" (" -0 0 14 3 2 #"->" -0 0 24 3 2 #" (" -0 0 14 3 2 #"->" -0 0 24 3 1 #" " -0 0 14 3 1 #"a" -0 0 24 3 1 #" " -0 0 14 3 1 #"a" -0 0 24 3 2 #") " -0 0 14 3 1 #"a" -0 0 24 3 2 #") " -0 0 14 3 1 #"a" -0 0 24 3 2 #"))" -0 0 24 29 1 #"\n" -0 0 24 3 3 #" (" -0 0 14 3 1 #"f" -0 0 24 3 1 #" " -0 0 14 3 8 #"identity" -0 0 24 3 2 #"))" -0 0 24 29 1 #"\n" -0 0 24 29 1 #"\n" -0 0 17 3 13 #";;; Zadanie 4" -0 0 24 29 1 #"\n" -0 0 24 29 1 #"\n" -0 0 24 3 1 #"(" -0 0 15 3 15 #"define/contract" -0 0 24 3 2 #" (" -0 0 14 3 12 #"broken-contr" -0 0 24 3 1 #" " -0 0 14 3 1 #"x" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 3 3 #" (" -0 0 14 3 14 #"parametric->/c" -0 0 24 3 2 #" [" -0 0 14 3 1 #"a" -0 0 24 3 1 #" " -0 0 14 3 1 #"b" -0 0 24 3 3 #"] (" -0 0 14 3 2 #"->" -0 0 24 3 1 #" " -0 0 14 3 1 #"a" -0 0 24 3 1 #" " -0 0 14 3 1 #"b" -0 0 24 3 2 #"))" -0 0 24 29 1 #"\n" -0 0 24 3 3 #" (" -0 0 14 3 12 #"broken-contr" -0 0 24 3 1 #" " -0 0 14 3 1 #"x" -0 0 24 3 2 #"))" -0 0 24 29 1 #"\n" -0 0 24 29 1 #"\n" -0 0 24 29 1 #"\n" -0 0 17 3 13 #";;; Zadanie 5" -0 0 24 29 1 #"\n" -0 0 24 29 1 #"\n" -0 0 24 3 1 #"(" -0 0 15 3 15 #"define/contract" -0 0 24 3 2 #" (" -0 0 14 3 9 #"foldl-map" -0 0 24 3 1 #" " -0 0 14 3 1 #"f" -0 0 24 3 1 #" " -0 0 14 3 1 #"a" -0 0 24 3 1 #" " -0 0 14 3 2 #"xs" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 3 3 #" (" -0 0 14 3 14 #"parametric->/c" -0 0 24 3 2 #" [" -0 0 14 3 1 #"F" -0 0 24 3 1 #" " -0 0 14 3 1 #"A" -0 0 24 3 1 #" " -0 0 14 3 1 #"L" -0 0 24 3 3 #"] (" -0 0 14 3 2 #"->" -0 0 24 3 2 #" (" -0 0 14 3 2 #"->" -0 0 24 3 1 #" " -0 0 14 3 1 #"L" -0 0 24 3 1 #" " -0 0 14 3 1 #"A" -0 0 24 3 2 #" (" -0 0 14 3 6 #"cons/c" -0 0 24 3 1 #" " -0 0 14 3 1 #"F" -0 0 24 3 1 #" " -0 0 14 3 1 #"A" -0 0 24 3 3 #")) " -0 0 14 3 1 #"A" -0 0 24 3 2 #" (" -0 0 14 3 6 #"listof" -0 0 24 3 1 #" " -0 0 14 3 1 #"L" -0 0 24 3 3 #") (" -0 0 14 3 6 #"cons/c" -0 0 24 3 2 #" (" -0 0 14 3 6 #"listof" -0 0 24 3 1 #" " -0 0 14 3 1 #"F" -0 0 24 3 2 #") " -0 0 14 3 1 #"A" -0 0 24 3 4 #"))) " -0 0 24 29 1 #"\n" -0 0 24 3 3 #" (" -0 0 15 3 6 #"define" -0 0 24 3 2 #" (" -0 0 14 3 2 #"it" -0 0 24 3 1 #" " -0 0 14 3 1 #"a" -0 0 24 3 1 #" " -0 0 14 3 2 #"xs" -0 0 24 3 1 #" " -0 0 14 3 2 #"ys" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 3 5 #" (" -0 0 14 3 2 #"if" -0 0 24 3 2 #" (" -0 0 14 3 5 #"null?" -0 0 24 3 1 #" " -0 0 14 3 2 #"xs" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 3 9 #" (" -0 0 14 3 4 #"cons" -0 0 24 3 2 #" (" -0 0 14 3 7 #"reverse" -0 0 24 3 1 #" " -0 0 14 3 2 #"ys" -0 0 24 3 2 #") " -0 0 14 3 1 #"a" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 3 9 #" (" -0 0 15 3 3 #"let" -0 0 24 3 3 #" [(" -0 0 14 3 1 #"p" -0 0 24 3 2 #" (" -0 0 14 3 1 #"f" -0 0 24 3 2 #" (" -0 0 14 3 3 #"car" -0 0 24 3 1 #" " -0 0 14 3 2 #"xs" -0 0 24 3 2 #") " -0 0 14 3 1 #"a" -0 0 24 3 3 #"))]" -0 0 24 29 1 #"\n" -0 0 24 3 11 #" (" -0 0 14 3 2 #"it" -0 0 24 3 2 #" (" -0 0 14 3 3 #"cdr" -0 0 24 3 1 #" " -0 0 14 3 1 #"p" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 3 15 #" (" -0 0 14 3 3 #"cdr" -0 0 24 3 1 #" " -0 0 14 3 2 #"xs" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 3 15 #" (" -0 0 14 3 4 #"cons" -0 0 24 3 2 #" (" -0 0 14 3 3 #"car" -0 0 24 3 1 #" " -0 0 14 3 1 #"p" -0 0 24 3 2 #") " -0 0 14 3 2 #"ys" -0 0 24 3 5 #")))))" -0 0 24 29 1 #"\n" -0 0 24 3 3 #" (" -0 0 14 3 2 #"it" -0 0 24 3 1 #" " -0 0 14 3 1 #"a" -0 0 24 3 1 #" " -0 0 14 3 2 #"xs" -0 0 24 3 1 #" " -0 0 14 3 4 #"null" -0 0 24 3 2 #"))" -0 0 diff --git a/Semestr 2/racket/l11/solution.bak b/Semestr 2/racket/l11/solution.bak deleted file mode 100644 index 3ae167a..0000000 --- a/Semestr 2/racket/l11/solution.bak +++ /dev/null @@ -1,18 +0,0 @@ -#lang racket - -(require racket/contract) - -(provide (contract-out [square square/c])) -(provide square/c) - -(define square/c (-> number? (not/c negative?))) - -(define (square x) (* x x)) - - -(define with-labels/c (parametric->/c [a b] (-> (-> a b)) - -(define (with-labels f xs) - (if (null? xs) - null - (cons (list (f (car xs)) (car xs)) (with-labels f (cdr xs)))))
\ No newline at end of file diff --git a/Semestr 2/racket/l11/solution.rkt b/Semestr 2/racket/l11/solution.rkt deleted file mode 100644 index 55e4ba6..0000000 --- a/Semestr 2/racket/l11/solution.rkt +++ /dev/null @@ -1,35 +0,0 @@ -#lang racket - -(provide (contract-out - [with-labels with-labels/c] - [foldr-map foldr-map/c] - [pair-from pair-from/c])) -(provide with-labels/c foldr-map/c pair-from/c) - - -(define with-labels/c (parametric->/c [a b] (-> (-> a b) (listof a) (listof (cons/c b (cons/c a null?)))))) - -(define (with-labels f xs) - (if (null? xs) - null - (cons (list (f (car xs)) (car xs)) (with-labels f (cdr xs))))) - - - -(define foldr-map/c (parametric->/c [x a f] (-> (-> x a (cons/c f a)) a (listof x) (cons/c (listof f) a)))) - -(define (foldr-map f a xs) - (define (it a xs ys) - (if (null? xs) - (cons ys a) - (let [(p (f (car xs) a))] - (it (cdr p) - (cdr xs) - (cons (car p) ys))))) - (it a (reverse xs) null)) - - -(define pair-from/c (parametric->/c [x fx gx] (-> (-> x fx) (-> x gx) (-> x (cons/c fx gx))))) - -(define (pair-from f g) - (lambda (x) (cons (f x) (g x))))
\ No newline at end of file diff --git a/Semestr 2/racket/l11z20/compiled/drracket/errortrace/graph_rkt.dep b/Semestr 2/racket/l11z20/compiled/drracket/errortrace/graph_rkt.dep deleted file mode 100644 index 6d38ce0..0000000 --- a/Semestr 2/racket/l11z20/compiled/drracket/errortrace/graph_rkt.dep +++ /dev/null @@ -1 +0,0 @@ -("7.6" racket ("b51d3a36a64d34c7978bfc22f2a5fe674cee1cb6" . "8314027ed4c1c6fd9c412af77103e94790e59dd2") (collects #"errortrace" #"errortrace-key.rkt") (collects #"racket" #"main.rkt") (collects #"racket" #"runtime-config.rkt")) diff --git a/Semestr 2/racket/l11z20/compiled/drracket/errortrace/graph_rkt.zo b/Semestr 2/racket/l11z20/compiled/drracket/errortrace/graph_rkt.zo Binary files differdeleted file mode 100644 index ef91f9a..0000000 --- a/Semestr 2/racket/l11z20/compiled/drracket/errortrace/graph_rkt.zo +++ /dev/null diff --git a/Semestr 2/racket/l11z20/graph.bak b/Semestr 2/racket/l11z20/graph.bak deleted file mode 100644 index 9f4d79d..0000000 --- a/Semestr 2/racket/l11z20/graph.bak +++ /dev/null @@ -1,97 +0,0 @@ -#lang racket - -(provide bag^ graph^ simple-graph@ graph-search^ graph-search@) - -;; sygnatura dla struktury danych -(define-signature bag^ - ((contracted - [bag? (-> any/c boolean?)] - [empty-bag (and/c bag? bag-empty?)] - [bag-empty? (-> bag? boolean?)] - [bag-insert (-> bag? any/c (and/c bag? (not/c bag-empty?)))] - [bag-peek (-> (and/c bag? (not/c bag-empty?)) any/c)] - [bag-remove (-> (and/c bag? (not/c bag-empty?)) bag?)]))) - -;; sygnatura: grafy -(define-signature graph^ - ((contracted - [graph (-> list? (listof edge?) graph?)] - [graph? (-> any/c boolean?)] - [graph-nodes (-> graph? list?)] - [graph-edges (-> graph? (listof edge?))] - [edge (-> any/c any/c edge?)] - [edge? (-> any/c boolean?)] - [edge-start (-> edge? any/c)] - [edge-end (-> edge? any/c)] - [has-node? (-> graph? any/c boolean?)] - [outnodes (-> graph? any/c list?)] - [remove-node (-> graph? any/c graph?)] - ))) - -;; prosta implementacja grafów -(define-unit simple-graph@ - (import) - (export graph^) - - (define (graph? g) - (and (list? g) - (eq? (length g) 3) - (eq? (car g) 'graph))) - - (define (edge? e) - (and (list? e) - (eq? (length e) 3) - (eq? (car e) 'edge))) - - (define (graph-nodes g) (cadr g)) - - (define (graph-edges g) (caddr g)) - - (define (graph n e) (list 'graph n e)) - - (define (edge n1 n2) (list 'edge n1 n2)) - - (define (edge-start e) (cadr e)) - - (define (edge-end e) (caddr e)) - - (define (has-node? g n) (not (not (member n (graph-nodes g))))) - - (define (outnodes g n) - (filter-map - (lambda (e) - (and (eq? (edge-start e) n) - (edge-end e))) - (graph-edges g))) - - (define (remove-node g n) - (graph - (remove n (graph-nodes g)) - (filter - (lambda (e) - (not (eq? (edge-start e) n))) - (graph-edges g))))) - -;; sygnatura dla przeszukiwania grafu -(define-signature graph-search^ - (search)) - -;; implementacja przeszukiwania grafu -;; uzależniona od implementacji grafu i struktury danych -(define-unit graph-search@ - (import bag^ graph^) - (export graph-search^) - (define (search g n) - (define (it g b l) - (cond - [(bag-empty? b) (reverse l)] - [(has-node? g (bag-peek b)) - (it (remove-node g (bag-peek b)) - (foldl - (lambda (n1 b1) (bag-insert b1 n1)) - (bag-remove b) - (outnodes g (bag-peek b))) - (cons (bag-peek b) l))] - [else (it g (bag-remove b) l)])) - (it g (bag-insert empty-bag n) '())) - ) diff --git a/Semestr 2/racket/l11z20/graph.rkt b/Semestr 2/racket/l11z20/graph.rkt deleted file mode 100644 index ec19576..0000000 --- a/Semestr 2/racket/l11z20/graph.rkt +++ /dev/null @@ -1,100 +0,0 @@ -#lang racket - -(provide bag^ graph^ simple-graph@ graph-search^ graph-search@) - -;; sygnatura dla struktury danych -(define-signature bag^ - ((contracted - [bag? (-> any/c boolean?)] - [empty-bag (and/c bag? bag-empty?)] - [bag-empty? (-> bag? boolean?)] - [bag-insert (-> bag? any/c (and/c bag? (not/c bag-empty?)))] - [bag-peek (-> (and/c bag? (not/c bag-empty?)) any/c)] - [bag-remove (-> (and/c bag? (not/c bag-empty?)) bag?)]))) - -;; sygnatura: grafy -(define-signature graph^ - ((contracted - [graph (-> list? (listof edge?) graph?)] - [graph? (-> any/c boolean?)] - [graph-nodes (-> graph? list?)] - [graph-edges (-> graph? (listof edge?))] - [edge (-> any/c any/c edge?)] - [edge? (-> any/c boolean?)] - [edge-start (-> edge? any/c)] - [edge-end (-> edge? any/c)] - [has-node? (-> graph? any/c boolean?)] - [outnodes (-> graph? any/c list?)] - [remove-node (-> graph? any/c graph?)] - ))) - -;; prosta implementacja grafów -(define-unit simple-graph@ - (import) - (export graph^) - - (define (graph? g) - (and (list? g) - (eq? (length g) 3) - (eq? (car g) 'graph))) - - (define (edge? e) - (and (list? e) - (eq? (length e) 3) - (eq? (car e) 'edge))) - - (define (graph-nodes g) (cadr g)) - - (define (graph-edges g) (caddr g)) - - (define (graph n e) (list 'graph n e)) - - (define (edge n1 n2) (list 'edge n1 n2)) - - (define (edge-start e) (cadr e)) - - (define (edge-end e) (caddr e)) - - (define (has-node? g n) (not (not (member n (graph-nodes g))))) - - (define (outnodes g n) - (filter-map - (lambda (e) - (and (eq? (edge-start e) n) - (edge-end e))) - (graph-edges g))) - - (define (remove-node g n) - (graph - (remove n (graph-nodes g)) - (filter - (lambda (e) - (not (eq? (edge-start e) n))) - (graph-edges g))))) - -;; sygnatura dla przeszukiwania grafu -(define-signature graph-search^ - (search)) - -;; implementacja przeszukiwania grafu -;; uzależniona od implementacji grafu i struktury danych -(define-unit graph-search@ - (import bag^ graph^) - (export graph-search^) - (define (search g n) - (define (it g b l) - (cond - [(bag-empty? b) (reverse l)] - [(has-node? g (bag-peek b)) - (it (remove-node g (bag-peek b)) - (foldl - (lambda (n1 b1) (bag-insert b1 n1)) - (bag-remove b) - (outnodes g (bag-peek b))) - (cons (bag-peek b) l))] - [else (it g (bag-remove b) l)])) - (it g (bag-insert empty-bag n) '())) - ) - -;; otwarcie komponentu grafu -(define-values/invoke-unit/infer simple-graph@)
\ No newline at end of file diff --git a/Semestr 2/racket/l11z20/solution.bak b/Semestr 2/racket/l11z20/solution.bak deleted file mode 100644 index 6f1f7b4..0000000 --- a/Semestr 2/racket/l11z20/solution.bak +++ /dev/null @@ -1 +0,0 @@ -#lang racket diff --git a/Semestr 2/racket/l11z20/solution.rkt b/Semestr 2/racket/l11z20/solution.rkt deleted file mode 100644 index e3ad81f..0000000 --- a/Semestr 2/racket/l11z20/solution.rkt +++ /dev/null @@ -1,245 +0,0 @@ -#lang racket - -(require "graph.rkt") -(provide bag-stack@ bag-fifo@) - -;; struktura danych - stos -(define-unit bag-stack@ - (import) - (export bag^) - - (define (bag? b) - (and (cons? b) - (eq? (car b) 'stack))) - - (define empty-bag (cons 'stack null)) - - (define (bag-empty? b) - (null? (cdr b))) - - (define (bag-insert b val) - (cons 'stack (cons val (cdr b)))) - - (define (bag-peek b) - (cadr b)) - - (define (bag-remove b) - (cons 'stack (cddr b))) -) - -;; struktura danych - kolejka FIFO -(define-unit bag-fifo@ - (import) - (export bag^) - - (define (bag? b) - (and (list? b) - (eq? (length b) 3) - (eq? (first b) 'queue))) - - (define empty-bag - (list 'queue null null)) - - (define (bag-empty? b) - (and (null? (second b)) (null? (third b)))) - - (define (bag-insert b val) - (list 'queue (cons val (second b)) (third b))) - - (define (bag-peek b) - (let ((insq (second b)) - (popq (third b))) - (cond - [(null? popq) (last insq)] - [else (first popq)]))) - - (define (bag-remove b) - (let ((insq (second b)) - (popq (third b))) - (cond - [(null? popq) (list 'queue null (cdr (reverse insq)))] - [else (list 'queue insq (cdr popq))]))) -) - -;; otwarcie komponentów stosu i kolejki - -(define-values/invoke-unit bag-stack@ - (import) - (export (prefix stack: bag^))) - -(define-values/invoke-unit bag-fifo@ - (import) - (export (prefix fifo: bag^))) - -;; testy w Quickchecku -(require quickcheck) - -;; liczba zapytań na test quickchecka -(define TESTS 1000) - - -;; TESTY DO KOLEJKI - -;; xs to lista jakichś liczb, queries to rodzaj wykonywanych operacji -;; 0 - popuje na listę pops -;; 1 - insertuje na queue -;; jest nie ma nic na kolejce/stosie i dostajemy 0, to nic nie robimy -;; jesli queries albo xs są puste to po prostu kończymy obsługiwanie zapytań -;; na koncu sprawdzamy, czy (reverse pops) jest prefiksem xs - - -(define (check-queue xs queries) - (define (iter xs queries queue pops) - ;; (display queue) - ;; (newline) - (if (or (null? queries) (null? xs)) - (reverse pops) - (cond - [(and (eq? (car queries) 0) (not (fifo:bag-empty? queue))) - (iter xs (cdr queries) (fifo:bag-remove queue) (cons (fifo:bag-peek queue) pops))] - [else (iter (cdr xs) (cdr queries) (fifo:bag-insert queue (car xs)) pops)]))) - (define (is-prefix? xs ys) - (if (null? xs) - #t - (and (equal? (car xs) (car ys)) (is-prefix? (cdr xs) (cdr ys))))) - (is-prefix? (iter xs queries fifo:empty-bag null) xs)) - -;; sprawdzenie czy nasza funkcja testująca w ogóle działa -(define check-queue-test (lambda () (check-queue (list 1 2 3 4 5 6 7 8) (list 0 1 1 1 0 0 0 1 1 0 1 0 1 0 0)))) - -;; testowanie kolejki -(define-unit queue-tests@ - (import bag^) - (export) - - (quickcheck - (property ([xs (choose-list (choose-real -100000 100000) TESTS)] - [ops (choose-list (choose-integer 0 1) TESTS)]) - (check-queue xs ops)))) - -(invoke-unit queue-tests@ (import (prefix fifo: bag^))) - - -;; TESTY DO STOSU - -;; niestety tutaj nie jest tak kolorowo, na kolejce -;; dokładnie wiemy jaka jest koljeność popowanych, na stosie to dosyć dowolne. -;; Z drugiej strony jego implementacja jest dużo prostsza, więc testy też nie muszą -;; być bardzo rygorystyczne. - -(define (check-stack xs) - (define (insert-list stack xs) - (if (null? xs) - stack - (insert-list (stack:bag-insert stack (car xs)) (cdr xs)))) - (define (clear-stack stack pops) - (if (stack:bag-empty? stack) - pops - (clear-stack (stack:bag-remove stack) (cons (stack:bag-peek stack) pops)))) - (equal? xs (clear-stack (insert-list stack:empty-bag xs) null))) - - -;; testowanie stacka -(define-unit stack-tests@ - (import bag^) - (export) - (quickcheck - (property ([xs (choose-list (choose-real -100000 100000) TESTS)]) - (check-stack xs)))) - -(invoke-unit stack-tests@ (import (prefix stack: bag^))) - - - -;; testy kolejek i stosów -(define-unit bag-tests@ - (import bag^) - (export) - - ;; test przykładowy: jeśli do pustej struktury dodamy element - ;; i od razu go usuniemy, wynikowa struktura jest pusta - (quickcheck - (property ([s arbitrary-symbol]) - (bag-empty? (bag-remove (bag-insert empty-bag s))))) - - ;; Sprawdzenie własności wspólnych dla obu struktur - (quickcheck - (property ([s arbitrary-symbol]) - (equal? s (bag-peek (bag-insert empty-bag s))))) -) - -;; uruchomienie testów dla obu struktur danych - -(invoke-unit bag-tests@ (import (prefix stack: bag^))) -(invoke-unit bag-tests@ (import (prefix fifo: bag^))) - - - -;; TESTOWANIE PRZESZUKIWAŃ - -;; otwarcie komponentu grafu -(define-values/invoke-unit/infer simple-graph@) - -;; otwarcie komponentów przeszukiwania -;; w głąb i wszerz -(define-values/invoke-unit graph-search@ - (import graph^ (prefix stack: bag^)) - (export (prefix dfs: graph-search^))) - -(define-values/invoke-unit graph-search@ - (import graph^ (prefix fifo: bag^)) - (export (prefix bfs: graph-search^))) - -;; graf testowy -(define test-graph - (graph - (list 1 2 3 4) - (list (edge 1 3) - (edge 1 2) - (edge 2 4)))) - -(define test-graph2 - (graph (list 1) null)) - -(define test-graph3 - (graph (list 1 2 3 4 5 6 7 8 9 10) - (list (edge 1 2) - (edge 1 3) - (edge 2 3) - (edge 3 2) - (edge 3 5) - (edge 6 5) - (edge 5 7) - (edge 5 8) - (edge 7 9) - (edge 8 9) - (edge 9 10) - (edge 1 10) - (edge 10 1)))) - - -(define test-graph4 - (graph (list 1 2 3 4 5 6) - (list (edge 1 2) - (edge 2 3) - (edge 3 4) - (edge 4 5) - (edge 5 6)))) - -;; uruchomienie przeszukiwania na przykładowym grafie -(bfs:search test-graph 1) -(dfs:search test-graph 1) - -(bfs:search test-graph2 1) -(dfs:search test-graph2 1) - -(bfs:search test-graph3 1) -(dfs:search test-graph3 1) - -(bfs:search test-graph3 6) -(dfs:search test-graph3 6) - -(bfs:search test-graph4 1) -(dfs:search test-graph4 1) - - diff --git a/Semestr 2/racket/l13/oceny.txt b/Semestr 2/racket/l13/oceny.txt deleted file mode 100644 index 9f17cad..0000000 --- a/Semestr 2/racket/l13/oceny.txt +++ /dev/null @@ -1,18 +0,0 @@ -1 sem
-
-MDM - 5 5
-AO - 5
-AM 1 - 5 5
-LDI - 5 5
-MIA - 5
-
-8 * 5
-
-
-2 sem
-
-Topologia - 5 3
-Analiza - 4 4
-MP - 5 5
-PPS - 5
-Algebra - 5 5
\ No newline at end of file diff --git a/Semestr 2/racket/l13/rozw.rkt b/Semestr 2/racket/l13/rozw.rkt deleted file mode 100644 index b4094db..0000000 --- a/Semestr 2/racket/l13/rozw.rkt +++ /dev/null @@ -1,79 +0,0 @@ -#lang typed/racket
-
-
-;;; zadanie 1
-
-(: prefixes (All (a) (-> (Listof a) (Listof (Listof a)))))
-(define (prefixes xs)
- (if (null? xs)
- (list null)
- (cons xs (prefixes (cdr xs)))))
-
-
-
-;;; zadanie 2
-
-(struct vector2 ([x : Real] [y : Real]) #:transparent)
-(struct vector3 ([x : Real] [y : Real] [z : Real]) #:transparent)
-
-(define-type Vector (U vector2 vector3))
-(define-predicate vector? Vector)
-
-
-(: square (-> Real Nonnegative-Real))
-(define (square x)
- (if (< x 0) (* x x) (* x x)))
-
-
-;;; pierwsza wersja
-
-(: vector-length (-> Vector Nonnegative-Real))
-(define (vector-length v)
- (if (vector2? v)
- (match v [(vector2 x y) (sqrt (+ (square x) (square y)))])
- (match v [(vector3 x y z) (sqrt (+ (square x) (square y) (square z)))])))
-
-
-;;; druga wersja
-
-(: vector-length-match (-> Vector Nonnegative-Real))
-(define (vector-length-match v)
- (match v
- [(vector2 x y) (sqrt (+ (square x) (square y)))]
- [(vector3 x y z) (sqrt (+ (square x) (square y) (square z)))]))
-
-
-
-;;; zadanie 4
-
-(struct leaf () #:transparent)
-(struct [a] node ([v : a] [xs : (Listof (Tree a))]) #:transparent)
-
-(define-type (Tree a) (node a))
-(define-predicate tree? (Tree Any))
-
-
-(: flat-map (All (a) (-> (-> (Tree a) (Listof a)) (Listof (Tree a)) (Listof a))))
-(define (flat-map f xs)
- (if (null? xs)
- null
- (append (f (car xs)) (flat-map f (cdr xs)))))
-
-(: preorder (All (a) (-> (Tree a) (Listof a))))
-(define (preorder t)
- (match t
- [(node v xs)
- (cons v (flat-map preorder xs))]))
-
-;;; (preorder (node 1 (list
-;;; (node 2 (list
-;;; (node 3 '())
-;;; (node 4 '())))
-;;; (node 5 '())
-;;; (node 'x (list
-;;; (node 't (list
-;;; (node 'z '()))))))))
-
-
-;;; zadanie 6
-
diff --git a/Semestr 2/racket/l13/solution.rkt b/Semestr 2/racket/l13/solution.rkt deleted file mode 100644 index 61804b3..0000000 --- a/Semestr 2/racket/l13/solution.rkt +++ /dev/null @@ -1,124 +0,0 @@ -#lang typed/racket
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-
-(provide parse typecheck)
-
-(define-type Expr (U const binop var-expr let-expr if-expr))
-(define-type Value (U Real Boolean))
-(define-type ArithOp (U '+ '- '/ '* '%))
-;;; (define-type ModOp '%)
-(define-type CompOp (U '= '> '>= '< '<=))
-(define-type LogicOp (U 'and 'or))
-(define-type BinopSym (U ArithOp CompOp LogicOp))
-
-(struct const ([val : Value]) #:transparent)
-(struct binop ([op : BinopSym] [l : Expr] [r : Expr]) #:transparent)
-(struct var-expr ([id : Symbol]) #:transparent)
-(struct let-expr ([id : Symbol] [e1 : Expr] [e2 : Expr]) #:transparent)
-(struct if-expr ([eb : Expr] [et : Expr] [ef : Expr]) #:transparent)
-
-(define-predicate expr? Expr)
-(define-predicate value? Value)
-(define-predicate arith-op? ArithOp)
-;;; (define-predicate mod-op? ModOp)
-(define-predicate comp-op? CompOp)
-(define-predicate logic-op? LogicOp)
-(define-predicate binop-sym? BinopSym)
-(define-predicate let-list? (List Symbol Any))
-
-(: parse (-> Any Expr))
-(define (parse q)
- (match q
- [_ #:when (value? q) (const q)]
- [_ #:when (eq? q 'true) (const true)]
- [_ #:when (eq? q 'false) (const false)] ; <---------------------------- !!!
- [_ #:when (symbol? q) (var-expr q)]
- [`(,s ,e1 ,e2)
- #:when (and (eq? s 'let) (let-list? e1))
- (let-expr (car e1)
- (parse (cadr e1))
- (parse e2))]
- [`(,s ,eb ,et ,ef)
- #:when (eq? s 'if)
- (if-expr (parse eb)
- (parse et)
- (parse ef))]
- [`(,s ,e1 ,e2)
- #:when (binop-sym? s)
- (binop s
- (parse e1)
- (parse e2))]
- [else (error "Parse error" q)]))
-
-; ---------- ;
-; Srodowiska ;
-; ---------- ;
-
-(define-type EType (U 'real 'boolean))
-(define-predicate EType? EType)
-
-(struct environ ([xs : (Listof (Pairof Symbol EType))]))
-(define env-empty (environ null))
-
-(: env-add (-> Symbol EType environ environ))
-(define (env-add x v env)
- (environ (cons (cons x v) (environ-xs env))))
-
-(: env-lookup (-> Symbol environ EType))
-(define (env-lookup x env)
- (: assoc-lookup (-> (Listof (Pairof Symbol EType)) EType))
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (car (car xs))) (cdr (car xs))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-
-(: check-op (-> Expr Expr EType EType environ (U EType #f)))
-(define (check-op e1 e2 arg-type ret-type env)
- (if (and (eq? (typecheck-env e1 env) arg-type)
- (eq? (typecheck-env e2 env) arg-type))
- ret-type
- #f))
-
-(: typecheck-env (-> Expr environ (U EType #f)))
-(define (typecheck-env e env)
- (match e
- [(const val)
- (cond
- [(real? val) 'real]
- [(boolean? val) 'boolean])]
- [(var-expr id) (env-lookup id env)]
- [(binop op e1 e2)
- (cond
- [(arith-op? op) (check-op e1 e2 'real 'real env)]
- [(comp-op? op) (check-op e1 e2 'real 'boolean env)]
- [(logic-op? op) (check-op e1 e2 'boolean 'boolean env)])]
- [(let-expr id e1 e2)
- (let ((id-type (typecheck-env e1 env)))
- (if id-type
- (typecheck-env e2 (env-add id id-type env))
- #f))]
- [(if-expr eb et ef)
- (let ((eb-type (typecheck-env eb env)))
- (if (not (eq? eb-type 'boolean))
- #f
- (let ((et-type (typecheck-env et env))
- (ef-type (typecheck-env ef env)))
- (if (eq? et-type ef-type) ;;; nie trzeba sprawdzac czy ktores z nich to #f
- et-type ;;; jesli tak jest, to i tak sie na pewno zwroci #f
- #f))))]))
-
-(: typecheck (-> Expr (U EType #f)))
-(define (typecheck e)
- (typecheck-env e env-empty))
-
-(define program
- '(if (or (< (% 123 10) 5)
- true)
- (+ 2 3)
- (/ 2 0)))
-
-(define (test-eval) (eval (parse program)))
\ No newline at end of file diff --git a/Semestr 2/racket/l13/zad6.rkt b/Semestr 2/racket/l13/zad6.rkt deleted file mode 100644 index 1dcfbfc..0000000 --- a/Semestr 2/racket/l13/zad6.rkt +++ /dev/null @@ -1,132 +0,0 @@ -#lang typed/racket
-
-; Do let-env.rkt dodajemy wartosci boolowskie
-;
-; Miejsca, ktore sie zmienily oznaczone sa przez !!!
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-
-(define-type Expr (U const binop var-expr let-expr if-expr))
-(define-type Value (U Real Boolean))
-(define-type BinopSym (U '+ '- '/ '* '% '= '> '>= '< '<= 'and 'or))
-
-(struct const ([val : Value]) #:transparent)
-(struct binop ([op : BinopSym] [l : Expr] [r : Expr]) #:transparent)
-(struct var-expr ([id : Symbol]) #:transparent)
-(struct let-expr ([id : Symbol] [e1 : Expr] [e2 : Expr]) #:transparent)
-(struct if-expr ([eb : Expr] [et : Expr] [ef : Expr]) #:transparent)
-
-
-(define-predicate expr? Expr)
-(define-predicate value? Value)
-(define-predicate binop-sym? BinopSym)
-(define-predicate let-list? (List Symbol Any))
-
-(: parse (-> Any Expr))
-(define (parse q)
- (match q
- [_ #:when (value? q) (const q)]
- [_ #:when (eq? q 'true) (const true)]
- [_ #:when (eq? q 'false) (const false)] ; <---------------------------- !!!
- [_ #:when (symbol? q) (var-expr q)]
- [`(,s ,e1 ,e2)
- #:when (and (eq? s 'let) (let-list? e1))
- (let-expr (car e1)
- (parse (cadr e1))
- (parse e2))]
- [`(,s ,eb ,et ,ef)
- #:when (eq? s 'if)
- (if-expr (parse eb)
- (parse et)
- (parse ef))]
- [`(,s ,e1 ,e2)
- #:when (binop-sym? s)
- (binop s
- (parse e1)
- (parse e2))]
- [else (error "Parse error" q)]))
-
-;;; (define (test-parse) (parse '(let [x (+ 2 2)] (+ x 1))))
-
-; ---------- ;
-; Srodowiska ;
-; ---------- ;
-
-(struct environ ([xs : (Listof (Pairof Symbol Value))]))
-(define env-empty (environ null))
-
-(: env-add (-> Symbol Value environ environ))
-(define (env-add x v env)
- (environ (cons (cons x v) (environ-xs env))))
-
-(: env-lookup (-> Symbol environ Value))
-(define (env-lookup x env)
- (: assoc-lookup (-> (Listof (Pairof Symbol Value)) Value))
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (car (car xs))) (cdr (car xs))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-
-; --------- ;
-; Ewaluacja ;
-; --------- ;
-
-(: arith-op (-> (-> Real Real Real) (-> Value Value Value)))
-(define (arith-op op)
- (lambda (x y) (if (and (real? x) (real? y))
- (ann (op x y) Value)
- (error "Wrong args for arithmetic operator" op x y))))
-
-(: mod-op (-> (-> Integer Integer Integer) (-> Value Value Value)))
-(define (mod-op op)
- (lambda (x y) (if (and (exact-integer? x) (exact-integer? y))
- (ann (op x y) Value)
- (error "Wrong args for modulo operator" op x y))))
-
-(: logic-op (-> (-> Boolean Boolean Boolean) (-> Value Value Value)))
-(define (logic-op op)
- (lambda (x y) (if (and (boolean? x) (boolean? y))
- (ann (op x y) Value)
- (error "Wrong args for logic operator" op x y))))
-
-(: comp-op (-> (-> Real Real Boolean) (-> Value Value Value)))
-(define (comp-op op)
- (lambda (x y) (if (and (real? x) (real? y))
- (ann (op x y) Value)
- (error "Wrong args for comparator" op x y))))
-
-
-(: op->proc (-> BinopSym (-> Value Value Value)))
-(define (op->proc op)
- (match op ['+ (arith-op +)] ['- (arith-op -)] ['* (arith-op *)] ['/ (arith-op /)]
- ['% (mod-op modulo)]
- ['= (comp-op =)] ['> (comp-op >)] ['>= (comp-op >=)] ['< (comp-op <)] ['<= (comp-op <=)]
- ['and (logic-op (lambda (x y) (and x y)))]
- ['or (logic-op (lambda (x y) (or x y)))]))
-
-(: eval-env (-> Expr environ Value))
-(define (eval-env e env)
- (match e
- [(const n) n]
- [(binop op l r) ((op->proc op) (eval-env l env)
- (eval-env r env))]
- [(let-expr x e1 e2)
- (eval-env e2 (env-add x (eval-env e1 env) env))]
- [(var-expr x) (env-lookup x env)]
- [(if-expr eb et ef) (if (eval-env eb env) ; <----------------- !!!
- (eval-env et env)
- (eval-env ef env))]))
-
-(: eval (-> Expr Value))
-(define (eval e) (eval-env e env-empty))
-
-(define program
- '(if (or (< (% 123 10) 5)
- true)
- (+ 2 3)
- (/ 2 0)))
-
-;;; (define (test-eval) (eval (parse program)))
\ No newline at end of file diff --git a/Semestr 2/racket/l14z22/solution.bak b/Semestr 2/racket/l14z22/solution.bak deleted file mode 100644 index 0d4f164..0000000 --- a/Semestr 2/racket/l14z22/solution.bak +++ /dev/null @@ -1,70 +0,0 @@ -#lang racket - -(require racklog) - -(provide solve) - -;; transpozycja tablicy zakodowanej jako lista list -(define (transpose xss) - (cond [(null? xss) xss] - ((null? (car xss)) (transpose (cdr xss))) - [else (cons (map car xss) - (transpose (map cdr xss)))])) - -;; procedura pomocnicza -;; tworzy listę n-elementową zawierającą wyniki n-krotnego -;; wywołania procedury f -(define (repeat-fn n f) - (if (eq? 0 n) null - (cons (f) (repeat-fn (- n 1) f)))) - -;; tworzy tablicę n na m elementów, zawierającą świeże -;; zmienne logiczne -(define (make-rect n m) - (repeat-fn m (lambda () (repeat-fn n _)))) - -;; predykat binarny -;; (%row-ok xs ys) oznacza, że xs opisuje wiersz (lub kolumnę) ys -(define %row-ok - (%rel () -;; TODO: uzupełnij! - )) - -;; TODO: napisz potrzebne ci pomocnicze predykaty - -;; funkcja rozwiązująca zagadkę -(define (solve rows cols) - (define board (make-rect (length cols) (length rows))) - (define tboard (transpose board)) - (define ret (%which (xss) - (%= xss board) -;; TODO: uzupełnij! - )) - (and ret (cdar ret))) - -;; testy -(equal? (solve '((2) (1) (1)) '((1 1) (2))) - '((* *) - (_ *) - (* _))) - -(equal? (solve '((2) (2 1) (1 1) (2)) '((2) (2 1) (1 1) (2))) - '((_ * * _) - (* * _ *) - (* _ _ *) - (_ * * _))) - -(equal? (solve '((4) (6) (2 2) (2 2) (6) (4) (2) (2) (2)) - '((9) (9) (2 2) (2 2) (4) (4))) - '((* * * * _ _) - (* * * * * *) - (* * _ _ * *) - (* * _ _ * *) - (* * * * * *) - (* * * * _ _) - (* * _ _ _ _) - (* * _ _ _ _) - (* * _ _ _ _))) - -;; TODO: możesz dodać własne testy - diff --git a/Semestr 2/racket/l14z22/solution.rkt b/Semestr 2/racket/l14z22/solution.rkt deleted file mode 100644 index 480c772..0000000 --- a/Semestr 2/racket/l14z22/solution.rkt +++ /dev/null @@ -1,87 +0,0 @@ -#lang racket - -(require racklog) - -(provide solve) - -;; transpozycja tablicy zakodowanej jako lista list -(define (transpose xss) - (cond [(null? xss) xss] - ((null? (car xss)) (transpose (cdr xss))) - [else (cons (map car xss) - (transpose (map cdr xss)))])) - -;; procedura pomocnicza -;; tworzy listę n-elementową zawierającą wyniki n-krotnego -;; wywołania procedury f -(define (repeat-fn n f) - (if (eq? 0 n) null - (cons (f) (repeat-fn (- n 1) f)))) - -;; tworzy tablicę n na m elementów, zawierającą świeże -;; zmienne logiczne -(define (make-rect n m) - (repeat-fn m (lambda () (repeat-fn n _)))) - -;; predykat binarny -;; (%row-ok xs ys) oznacza, że xs opisuje wiersz (lub kolumnę) ys -(define %row-ok - (%rel (xs ys zs n) - [(null null)] - [(xs (cons '_ ys)) - (%row-ok xs ys)] - [((cons n xs) ys) - (%stars ys n) - (%cut-first-n ys zs n) - (%row-ok xs zs)])) - - -(define %suffix - (%rel (xs ys x) - [(xs xs)] - [((cons x xs) ys) - (%suffix xs ys)])) - -(define %cut-first-n - (%rel (xs ys n yl) - [(xs xs 0)] - [(xs ys n) - (%suffix xs ys) - (%is #t (= (- (length xs) (length ys)) n))])) - - -;; usun n pierwszych elementow z xs -(define (suffix xs n) - (if (= n 0) - xs - (suffix (cdr xs) (- n 1)))) - - -;; sprawdza czy pierwsze n elementów listy to gwiazdki (dokladnie n) -(define %stars - (%rel (xs m n) - [(null 0)] - [((cons '_ xs) n) - (%is n 0)] - [((cons '* xs) n) - (%is m (- n 1)) - (%stars xs m)])) - -(define %board-ok - (%rel (xss xs yss ys) - [(null null)] - [((cons xs xss) (cons ys yss)) - (%row-ok xs ys) - (%board-ok xss yss)])) - -;; funkcja rozwiązująca zagadkę -(define (solve rows cols) - (define board (make-rect (length cols) (length rows))) - (define tboard (transpose board)) - (define ret (%which (xss) - (%= xss board) - (%board-ok rows board) - (%board-ok cols tboard))) - (and ret (cdar ret))) - - diff --git a/Semestr 2/racket/l15/kacp.bak b/Semestr 2/racket/l15/kacp.bak deleted file mode 100644 index ff2a2bc..0000000 --- a/Semestr 2/racket/l15/kacp.bak +++ /dev/null @@ -1,55 +0,0 @@ -#lang racket - -(define (run-concurrent . thunks) - (define threads (map thread thunks)) - (for-each thread-wait threads)) - -(define (random-sleep) - (sleep (/ (random) 100))) - -(define (with-random-sleep proc) - (lambda args - (random-sleep) - (apply proc args))) - -(define (make-serializer) - (define sem (make-semaphore 1)) - (lambda (proc) - (lambda args - (semaphore-wait sem) - (define ret (apply proc args)) - (semaphore-post sem) - ret))) - -(define (table) - (random-sleep) - (define forks (list (make-semaphore 1) - (make-semaphore 1) - (make-semaphore 1) - (make-semaphore 1) - (make-semaphore 1))) - (define (pick-fork i) - (random-sleep) - (semaphore-wait (list-ref forks i))) - (define (put-fork i) - (random-sleep) - (semaphore-post (list-ref forks i))) - (define (dispatch m) - (cond [(eq? m 'pick-fork) pick-fork] - [(eq? m 'put-fork) put-fork] - [else (error "Unknown request -- TABLE" - m)])) - dispatch) - -(define dtable (table)) - -(define (philosopher dining-table number) - (define my-turn (make-serializer)) - (define (eat) - (display number) - (newline) - ((dining-table 'pick-fork) number) - ((dining-table 'put-fork) number) - ((dining-table 'pick-fork) (modulo (+ number 1) 5)) - ((dining-table 'put-fork) (modulo (+ number 1) 5))) - (my-turn eat))
\ No newline at end of file diff --git a/Semestr 2/racket/l15/kacp.rkt b/Semestr 2/racket/l15/kacp.rkt deleted file mode 100644 index bd484f1..0000000 --- a/Semestr 2/racket/l15/kacp.rkt +++ /dev/null @@ -1,59 +0,0 @@ -#lang racket - -(define (run-concurrent . thunks) - (define threads (map thread thunks)) - (for-each thread-wait threads)) - -(define (random-sleep) - (sleep (/ (random) 100))) - -(define (with-random-sleep proc) - (lambda args - (random-sleep) - (apply proc args))) - -(define (make-serializer) - (define sem (make-semaphore 1)) - (lambda (proc) - (lambda args - (semaphore-wait sem) - (define ret (apply proc args)) - (semaphore-post sem) - ret))) - -(define (table) - (random-sleep) - (define forks (list (make-semaphore 1) - (make-semaphore 1) - (make-semaphore 1) - (make-semaphore 1) - (make-semaphore 1))) - (define (pick-fork i) - (random-sleep) - (semaphore-wait (list-ref forks i))) - (define (put-fork i) - (random-sleep) - (semaphore-post (list-ref forks i))) - (define (dispatch m) - (cond [(eq? m 'pick-fork) pick-fork] - [(eq? m 'put-fork) put-fork] - [else (error "Unknown request -- TABLE" - m)])) - dispatch) - -(define dtable (table)) - -(define (philosopher dining-table number) - (define my-turn (make-serializer)) - (define (eat) - (display "Zaczynam ") - (display number) - (newline) - ((dining-table 'pick-fork) number) - ((dining-table 'put-fork) number) - ((dining-table 'pick-fork) (modulo (+ number 1) 5)) - ((dining-table 'put-fork) (modulo (+ number 1) 5)) - (display "Koncze ") - (display number) - (newline)) - (my-turn eat))
\ No newline at end of file diff --git a/Semestr 2/racket/l15/solution.bak b/Semestr 2/racket/l15/solution.bak deleted file mode 100644 index 03ab86a..0000000 --- a/Semestr 2/racket/l15/solution.bak +++ /dev/null @@ -1,7 +0,0 @@ -#lang racket - - - -(define (run-concurrent . thunks) - (define threads (map thread thunks)) - (for-each thread-wait threads))
\ No newline at end of file diff --git a/Semestr 2/racket/l15/solution.rkt b/Semestr 2/racket/l15/solution.rkt deleted file mode 100644 index 915502e..0000000 --- a/Semestr 2/racket/l15/solution.rkt +++ /dev/null @@ -1,85 +0,0 @@ -#lang racket - -(provide philosopher) - -;; Do debugu - -(define (run-concurrent . thunks) - (define threads (map thread thunks)) - (for-each thread-wait threads)) - -(define (random-sleep) - (sleep (/ (random) 100))) - -(define (with-random-sleep proc) - (lambda args - (random-sleep) - (apply proc args))) - -(define (make-serializer) - (define sem (make-semaphore 1)) - (lambda (proc) - (lambda args - (semaphore-wait sem) - (define ret (apply proc args)) - (semaphore-post sem) - ret))) - -(define (make-table) - (define forks (map (lambda (x) (make-semaphore 1)) '(0 1 2 3 4))) - (define (get-fork i) - (list-ref forks i)) - (define (pick-fork i) - (random-sleep) - (semaphore-wait (get-fork i))) - (define (put-fork i) - (random-sleep) - (semaphore-post (get-fork i))) - (define (dispatch m) - (cond [(eq? m 'pick-fork) pick-fork] - [(eq? m 'put-fork) put-fork] - [else (error "Unknown request -- MAKE-TABLE" m)])) - dispatch) - -;(define dining-table (make-table)) - -;(define (repeat proc n) -; (if (> n 0) -; (begin -; (proc) -; (repeat proc (- n 1))) -; #f)) -; -;(define (hungry nr x) -; (lambda () (repeat (lambda () (philosopher dining-table nr)) x))) - -;; Rozwiązanie: - -(define forks-sem (map (lambda (x) (make-semaphore 1)) '(0 0 0 0 0))) - -(define (get-fork i) - (list-ref forks-sem i)) - -(define (is-free? i) - (semaphore-try-wait? (get-fork i))) - -(define (put-fork dining-table i) - ((dining-table 'put-fork) i) - (semaphore-post (get-fork i))) - -(define (philosopher dining-table i) - (define left-fork i) - (define right-fork (modulo (+ i 1) 5)) - (define (loop) - (if (is-free? left-fork) - (if (is-free? right-fork) - (begin - ((dining-table 'pick-fork) left-fork) - ((dining-table 'pick-fork) right-fork) - (put-fork dining-table left-fork) - (put-fork dining-table right-fork)) - (loop)) - (begin - (semaphore-post (get-fork left-fork)) - (loop)))) - (loop))
\ No newline at end of file diff --git a/Semestr 2/racket/l7z12/solution.rkt b/Semestr 2/racket/l7z12/solution.rkt deleted file mode 100644 index 089dee4..0000000 --- a/Semestr 2/racket/l7z12/solution.rkt +++ /dev/null @@ -1,95 +0,0 @@ -#lang racket
-
-(provide (struct-out const)
- (struct-out binop)
- (struct-out var-expr)
- (struct-out let-expr)
- (struct-out pos)
- (struct-out var-free)
- (struct-out var-bound)
- annotate-expression)
-
-;; ---------------
-;; Jezyk wejsciowy
-;; ---------------
-
-(struct pos (file line col) #:transparent)
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct var-expr (id) #:transparent)
-(struct let-expr (loc id e1 e2) #:transparent)
-
-(define (expr? e)
- (match e
- [(const n) (number? n)]
- [(binop op l r) (and (symbol? op) (expr? l) (expr? r))]
- [(var-expr x) (symbol? x)]
- [(let-expr loc x e1 e2)
- (and (pos? loc) (symbol? x) (expr? e1) (expr? e2))]
- [_ false]))
-
-(define (make-pos s)
- (pos (syntax-source s)
- (syntax-line s)
- (syntax-column s)))
-
-(define (parse e)
- (let ([r (syntax-e e)])
- (cond
- [(number? r) (const r)]
- [(symbol? r) (var-expr r)]
- [(and (list? r) (= 3 (length r)))
- (match (syntax-e (car r))
- ['let (let* ([e-def (syntax-e (second r))]
- [x (syntax-e (first e-def))])
- (let-expr (make-pos (first e-def))
- (if (symbol? x) x (error "parse error!"))
- (parse (second e-def))
- (parse (third r))))]
- [op (binop op (parse (second r)) (parse (third r)))])]
- [else (error "parse error!")])))
-
-;; ---------------
-;; Jezyk wyjsciowy
-;; ---------------
-
-(struct var-free (id) #:transparent)
-(struct var-bound (pos id) #:transparent)
-
-(define (expr-annot? e)
- (match e
- [(const n) (number? n)]
- [(binop op l r) (and (symbol? op) (expr-annot? l) (expr-annot? r))]
- [(var-free x) (symbol? x)]
- [(var-bound loc x) (and (pos? loc) (symbol? x))]
- [(let-expr loc x e1 e2)
- (and (pos? loc) (symbol? x) (expr-annot? e1) (expr-annot? e2))]
- [_ false]))
-
-(struct environ (xs))
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (cons x v) (environ-xs env))))
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs) false]
- [(eq? x (car (car xs))) (cdr (car xs))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-
-(define (annotate-expression-env e env)
- (match e
- [(const r) (const r)]
- [(binop op l r) (binop op (annotate-expression-env l env) (annotate-expression-env r env))]
- [(var-expr x) (let ((pos (env-lookup x env)))
- (if pos
- (var-bound pos x)
- (var-free x)))]
- [(let-expr loc x e1 e2) (let-expr loc x (annotate-expression-env e1 env) (annotate-expression-env e2 (env-add x loc env)))]))
-
-(define (annotate-expression e)
- (annotate-expression-env e env-empty))
-
-(define (test) (annotate-expression (parse #'(let [x 5] (let [x (* x y)] (+ x y))))))
diff --git a/Semestr 2/racket/l7z13/solution.rkt b/Semestr 2/racket/l7z13/solution.rkt deleted file mode 100644 index 0a0278a..0000000 --- a/Semestr 2/racket/l7z13/solution.rkt +++ /dev/null @@ -1,104 +0,0 @@ -#lang racket
-
-(provide (struct-out const) (struct-out binop) (struct-out var-expr) (struct-out let-expr) (struct-out var-dead) find-dead-vars)
-
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct var-expr (id) #:transparent)
-(struct var-dead (id) #:transparent)
-(struct let-expr (id e1 e2) #:transparent)
-
-(define (expr? e)
- (match e
- [(const n) (number? n)]
- [(binop op l r) (and (symbol? op) (expr? l) (expr? r))]
- [(var-expr x) (symbol? x)]
- [(var-dead x) (symbol? x)]
- [(let-expr x e1 e2) (and (symbol? x) (expr? e1) (expr? e2))]
- [_ false]))
-
-(define (parse q)
- (cond
- [(number? q) (const q)]
- [(symbol? q) (var-expr q)]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let))
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 3) (symbol? (first q)))
- (binop (first q)
- (parse (second q))
- (parse (third q)))]))
-
-; ---------------------------------- ;
-; Wyszukaj ostatnie uzycie zmiennych ;
-; ---------------------------------- ;
-
-(struct environ (xs))
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (cons x v) (environ-xs env))))
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "unbound identifier" x)]
- [(eq? x (car (car xs))) (cdr (car xs))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-(define (env-erase x env)
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "unbound identifier" x)]
- [(eq? x (caar xs)) (cdr xs)]
- [else (cons (car xs) (assoc-lookup (cdr xs)))]))
- (if (env-lookup x env)
- (environ (assoc-lookup (assoc-lookup (environ-xs env))))
- (environ (assoc-lookup (environ-xs env)))))
-
-
-(define (find-dead-vars-env e env)
- (match e
- [(const r) (cons (const r) env)]
- [(var-expr x) (if (env-lookup x env)
- (cons (var-expr x) env)
- (cons (var-dead x) (env-add x true env)))]
- [(binop op l r) (let* ((right-expr (find-dead-vars-env r env))
- (r (car right-expr))
- (env (cdr right-expr))
- (left-expr (find-dead-vars-env l env))
- (l (car left-expr))
- (env (cdr left-expr)))
- (cons (binop op l r) env))]
- [(let-expr x e1 e2) (let* ((right-expr (find-dead-vars-env e2 (env-add x false env)))
- (e2 (car right-expr))
- (env (env-erase x (cdr right-expr)))
- (left-expr (find-dead-vars-env e1 env))
- (e1 (car left-expr))
- (env (cdr left-expr)))
- (cons (let-expr x e1 e2) env))]))
-
-(define (find-dead-vars e)
- (car (find-dead-vars-env e env-empty)))
-
-
-(define (sample2) (find-dead-vars (let-expr 'x (const 3)
- (binop '+ (var-expr 'x)
- (let-expr 'x (const 5) (binop '+ (var-expr 'x) (var-expr 'x)))))))
-
-(define (test1) (find-dead-vars (parse '(let (x 3) (let (x (* x (+ x x))) (+ x x))))))
-(define (test2) (find-dead-vars (parse '(let (x 2) (let [x (let [x (+ x 2)] x)] x)))))
-(define (test3) (find-dead-vars (parse '(let [x 2] (+ (let [x (+ 2 x)] (* 3 x)) x)))))
-(define (test4) (find-dead-vars (parse '(let [x 2] (let [x (+ x 3)] (* x x))))))
-(define (test5) (find-dead-vars (parse '(let [x 2] (+ x (let [x (+ 2 x)] x))))))
-(define (test6) (find-dead-vars (parse '(let [x 2]
- (let [y (let [x (* x (+ x x))]
- (let [y (* x x)]
- (+ y 2)))]
- (+ x (* y y)))))))
-(define (test7) (find-dead-vars (parse '(let [x (let [x (let [x 2] (+ x x))] (+ x x))] (+ x x)))))
-;;; (define (test7) (find-dead-vars (parse '(let [x (let [x (let [x 2] (let (x 2) (+ x x)))] (+ x x))] (+ x x)))))
-(define (test8) (find-dead-vars (parse '(let [x 2] (let [x 2] (+ x x))))))
\ No newline at end of file diff --git a/Semestr 2/racket/l8z14/solution.bak b/Semestr 2/racket/l8z14/solution.bak deleted file mode 100644 index b51383a..0000000 --- a/Semestr 2/racket/l8z14/solution.bak +++ /dev/null @@ -1,155 +0,0 @@ -#lang racket - -; Do list.rkt dodajemy procedury -; -; Miejsca, ktore sie zmienily oznaczone sa przez !!! - -; --------- ; -; Wyrazenia ; -; --------- ; - -(struct const (val) #:transparent) -(struct binop (op l r) #:transparent) -(struct var-expr (id) #:transparent) -(struct let-expr (id e1 e2) #:transparent) -(struct if-expr (eb et ef) #:transparent) -(struct cons-expr (e1 e2) #:transparent) -(struct car-expr (e) #:transparent) -(struct cdr-expr (e) #:transparent) -(struct null-expr () #:transparent) -(struct null?-expr (e) #:transparent) -(struct app (f e) #:transparent) ; <------------------ !!! -(struct lam (id e) #:transparent) ; <------------------ !!! - -(define (expr? e) - (match e - [(const n) (or (number? n) (boolean? n))] - [(binop op l r) (and (symbol? op) (expr? l) (expr? r))] - [(var-expr x) (symbol? x)] - [(let-expr x e1 e2) - (and (symbol? x) (expr? e1) (expr? e2))] - [(if-expr eb et ef) - (and (expr? eb) (expr? et) (expr? ef))] - [(cons-expr e1 e2) (and (expr? e1) (expr? e2))] - [(car-expr e) (expr? e)] - [(cdr-expr e) (expr? e)] - [(null-expr) true] - [(null?-expr e) (expr? e)] - [(app f e) (and (expr? f) (expr? e))] ; <--------------------- !!! - [(lam id e) (and (symbol? id) (expr? e))] ; <----------------- !!! - [_ false])) - -(define (parse q) - (cond - [(number? q) (const q)] - [(eq? q 'true) (const true)] - [(eq? q 'false) (const false)] - [(eq? q 'null) (null-expr)] - [(symbol? q) (var-expr q)] - [(and (list? q) (eq? (length q) 2) (eq? (first q) 'null?)) - (null?-expr (parse (second q)))] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'cons)) - (cons-expr (parse (second q)) - (parse (third q)))] - [(and (list? q) (eq? (length q) 2) (eq? (first q) 'car)) - (car-expr (parse (second q)))] - [(and (list? q) (eq? (length q) 2) (eq? (first q) 'cdr)) - (cdr-expr (parse (second q)))] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let)) - (let-expr (first (second q)) - (parse (second (second q))) - (parse (third q)))] - [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if)) - (if-expr (parse (second q)) - (parse (third q)) - (parse (fourth q)))] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'lambda)) ; <!!! - (parse-lam (second q) (third q))] - [(and (list? q) (pair? q) (not (op->proc (car q)))) ; <------- !!! - (parse-app q)] - [(and (list? q) (eq? (length q) 3) (symbol? (first q))) - (binop (first q) - (parse (second q)) - (parse (third q)))])) - -(define (parse-app q) ; <----------------------------------------- !!! - (define (parse-app-accum q acc) - (cond [(= 1 (length q)) (app acc (parse (car q)))] - [else (parse-app-accum (cdr q) (app acc (parse (car q))))])) - (parse-app-accum (cdr q) (parse (car q)))) - -(define (parse-lam pat e) ; <------------------------------------- !!! - (cond [(= 1 (length pat)) - (lam (car pat) (parse e))] - [else - (lam (car pat) (parse-lam (cdr pat) e))])) - -; ---------- ; -; Srodowiska ; -; ---------- ; - -(struct environ (xs) #:transparent) - -(define env-empty (environ null)) -(define (env-add x v env) - (environ (cons (cons x v) (environ-xs env)))) -(define (env-lookup x env) - (define (assoc-lookup xs) - (cond [(null? xs) (error "Unknown identifier" x)] - [(eq? x (car (car xs))) (cdr (car xs))] - [else (assoc-lookup (cdr xs))])) - (assoc-lookup (environ-xs env))) - -; --------- ; -; Ewaluacja ; -; --------- ; - -(struct clo (id e env) #:transparent) ; <------------------------- !!! - -(define (value? v) - (or (number? v) - (boolean? v) - (and (pair? v) (value? (car v)) (value? (cdr v))) - (null? v) - (clo? v))) ; <---------------------------------------------- !!! - -(define (op->proc op) - (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo] - ['= =] ['> >] ['>= >=] ['< <] ['<= <=] - ['and (lambda (x y) (and x y))] - ['or (lambda (x y) (or x y))] - [_ false])) ; <--------------------------------------- !!! - -(define (eval-env e env) - (match e - [(const n) n] - [(binop op l r) ((op->proc op) (eval-env l env) - (eval-env r env))] - [(let-expr x e1 e2) - (eval-env e2 (env-add x (eval-env e1 env) env))] - [(var-expr x) (env-lookup x env)] - [(if-expr eb et ef) (if (eval-env eb env) - (eval-env et env) - (eval-env ef env))] - [(cons-expr e1 e2) (cons (eval-env e1 env) - (eval-env e2 env))] - [(car-expr e) (car (eval-env e env))] - [(cdr-expr e) (cdr (eval-env e env))] - [(null-expr) null] - [(null?-expr e) (null? (eval-env e env))] - [(lam x e) (clo x e env)] ; <--------------------------------- !!! - [(app f e) ; <------------------------------------------------ !!! - (let ([vf (eval-env f env)] - [ve (eval-env e env)]) - (match vf [(clo x body fun-env) - (eval-env body (env-add x ve fun-env))]))])) - -(define (eval e) (eval-env e env-empty)) - -(define program - '(let [twice (lambda (f x) (f (f x)))] - (let [inc (lambda (x) (+ 1 x))] - (twice twice twice twice inc 1)))) - - -(define (test-eval) (eval (parse program)))
\ No newline at end of file diff --git a/Semestr 2/racket/l8z14/solution.rkt b/Semestr 2/racket/l8z14/solution.rkt deleted file mode 100644 index 59556cf..0000000 --- a/Semestr 2/racket/l8z14/solution.rkt +++ /dev/null @@ -1,201 +0,0 @@ -#lang racket - -; Do list.rkt dodajemy procedury -; -; Miejsca, ktore sie zmienily oznaczone sa przez !!! - -; --------- ; -; Wyrazenia ; -; --------- ; - -(provide eval parse) - - -(struct const (val) #:transparent) -(struct binop (op l r) #:transparent) -(struct var-expr (id) #:transparent) -(struct let-expr (id e1 e2) #:transparent) -(struct if-expr (eb et ef) #:transparent) -(struct cons-expr (e1 e2) #:transparent) -(struct car-expr (e) #:transparent) -(struct cdr-expr (e) #:transparent) -(struct null-expr () #:transparent) -(struct null?-expr (e) #:transparent) -(struct app (f e) #:transparent) ; <------------------ !!! -(struct lam (id e) #:transparent) ; <------------------ !!! -(struct apply-expr (f xs) #:transparent) - -(define (expr? e) - (match e - [(const n) (or (number? n) (boolean? n))] - [(binop op l r) (and (symbol? op) (expr? l) (expr? r))] - [(var-expr x) (symbol? x)] - [(let-expr x e1 e2) - (and (symbol? x) (expr? e1) (expr? e2))] - [(if-expr eb et ef) - (and (expr? eb) (expr? et) (expr? ef))] - [(cons-expr e1 e2) (and (expr? e1) (expr? e2))] - [(car-expr e) (expr? e)] - [(cdr-expr e) (expr? e)] - [(null-expr) true] - [(null?-expr e) (expr? e)] - [(app f e) (and (expr? f) (expr? e))] ; <--------------------- !!! - [(lam id e) (and (symbol? id) (expr? e))] ; <----------------- !!! - [(apply-expr f xs) (and (expr? f) (expr? xs))] - [_ false])) - -(define (parse q) - (cond - [(number? q) (const q)] - [(eq? q 'true) (const true)] - [(eq? q 'false) (const false)] - [(eq? q 'null) (null-expr)] - [(symbol? q) (var-expr q)] - [(and (> (length q) 0) (list? q) (eq? (first q) 'list)) - (parse-list (cdr q))] - [(and (list? q) (eq? (length q) 2) (eq? (first q) 'null?)) - (null?-expr (parse (second q)))] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'apply)) - (apply-expr (parse (second q)) - (parse (third q)))] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'cons)) - (cons-expr (parse (second q)) - (parse (third q)))] - [(and (list? q) (eq? (length q) 2) (eq? (first q) 'car)) - (car-expr (parse (second q)))] - [(and (list? q) (eq? (length q) 2) (eq? (first q) 'cdr)) - (cdr-expr (parse (second q)))] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let)) - (let-expr (first (second q)) - (parse (second (second q))) - (parse (third q)))] - [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if)) - (if-expr (parse (second q)) - (parse (third q)) - (parse (fourth q)))] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'lambda)) ; <!!! - (parse-lam (second q) (third q))] - [(and (list? q) (pair? q) (not (op->proc (car q)))) ; <------- !!! - (parse-app q)] - [(and (list? q) (eq? (length q) 3) (symbol? (first q))) - (binop (first q) - (parse (second q)) - (parse (third q)))])) - - -(define (parse-app q) ; <----------------------------------------- !!! - (define (parse-app-accum q acc) - (cond [(= 1 (length q)) (app acc (parse (car q)))] - [else (parse-app-accum (cdr q) (app acc (parse (car q))))])) - (parse-app-accum (cdr q) (parse (car q)))) - -(define (parse-lam pat e) ; <------------------------------------- !!! - (cond [(= 1 (length pat)) - (lam (car pat) (parse e))] - [else - (lam (car pat) (parse-lam (cdr pat) e))])) - -(define (parse-list q) - (if (null? q) - (null-expr) - (cons-expr (parse (car q)) (parse-list (cdr q))))) - -; ---------- ; -; Srodowiska ; -; ---------- ; - -(struct environ (xs) #:transparent) - -(define env-empty (environ null)) -(define (env-add x v env) - (environ (cons (cons x v) (environ-xs env)))) -(define (env-lookup x env) - (define (assoc-lookup xs) - (cond [(null? xs) (error "Unknown identifier" x)] - [(eq? x (car (car xs))) (cdr (car xs))] - [else (assoc-lookup (cdr xs))])) - (assoc-lookup (environ-xs env))) - -; --------- ; -; Ewaluacja ; -; --------- ; - -(struct clo (id e env) #:transparent) ; <------------------------- !!! - -(define (value? v) - (or (number? v) - (boolean? v) - (and (pair? v) (value? (car v)) (value? (cdr v))) - (null? v) - (clo? v))) ; <---------------------------------------------- !!! - -(define (op->proc op) - (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo] - ['= =] ['> >] ['>= >=] ['< <] ['<= <=] - ['and (lambda (x y) (and x y))] - ['or (lambda (x y) (or x y))] - [_ false])) ; <--------------------------------------- !!! - -(define (eval-env e env) - (match e - [(const n) n] - [(binop op l r) ((op->proc op) (eval-env l env) - (eval-env r env))] - [(let-expr x e1 e2) - (eval-env e2 (env-add x (eval-env e1 env) env))] - [(var-expr x) (env-lookup x env)] - [(if-expr eb et ef) (if (eval-env eb env) - (eval-env et env) - (eval-env ef env))] - [(cons-expr e1 e2) (cons (eval-env e1 env) - (eval-env e2 env))] - [(car-expr e) (car (eval-env e env))] - [(cdr-expr e) (cdr (eval-env e env))] - [(null-expr) null] - [(null?-expr e) (null? (eval-env e env))] - [(apply-expr e1 e2) - (let ([xs (eval-env e2 env)]) - (eval-env (eval-apply e1 (reverse xs)) env))] - [(lam x e) (clo x e env)] ; <--------------------------------- !!! - [(app f e) ; <------------------------------------------------ !!! - (let ([vf (eval-env f env)] - [ve (eval-env e env)]) - (match vf [(clo x body fun-env) - (eval-env body (env-add x ve fun-env))]))])) - -(define (eval-apply e xs) - (if (null? xs) - e - (app (eval-apply e (cdr xs)) (const (car xs))))) - -(define (eval e) (eval-env e env-empty)) - -;; testy wspólnie z Karolem Ochmanem - -(define program1 - '(apply (lambda (x y) (+ x y)) - (cons 1 (cons 2 null)))) -(define program2 - '(apply (lambda (x y z) (+ x (+ y z))) - (cons 1 (cons 2 null)))) -(define program3 - '(apply (lambda (x y) (lambda (z) (+ x (+ y z)))) - (cons 1 (cons 2 (cons 3 null))))) -(define program4 - '(apply (lambda (x y) (+ x y)) - (cons 1 (cons 2 (cons 3 null))))) -(define program5 - '(let [f (lambda (x y z) (+ z (+ x y)))] - (apply (f 3) (cons 1 (cons 2 null))))) -(define program6 - '(let [f (lambda (x) x)] - (apply (f 4) null))) -(define program7 - '(apply (lambda (q w e r t y u i o p a s d f g h j k l) 3) - (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 - (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 - (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 null))))))))))))))))))))) -(define program8 - '(apply (lambda (q w e r t y u i o p a s d f g h j k l) 3) - (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 (cons 1 - (cons 1 (cons 1 (cons 1 (cons 1 null)))))))))))))))
\ No newline at end of file diff --git a/Semestr 2/racket/l8z15/solution.bak b/Semestr 2/racket/l8z15/solution.bak deleted file mode 100644 index cdc84f9..0000000 --- a/Semestr 2/racket/l8z15/solution.bak +++ /dev/null @@ -1,187 +0,0 @@ -#lang racket
-
-; Do list.rkt dodajemy procedury
-;
-; Miejsca, ktore sie zmienily oznaczone sa przez !!!
-
-(provide parse eval)
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct var-expr (id) #:transparent)
-(struct let-expr (id e1 e2) #:transparent)
-(struct if-expr (eb et ef) #:transparent)
-(struct cons-expr (e1 e2) #:transparent)
-(struct car-expr (e) #:transparent)
-(struct cdr-expr (e) #:transparent)
-(struct null-expr () #:transparent)
-(struct null?-expr (e) #:transparent)
-(struct app (f e) #:transparent) ; <------------------ !!!
-(struct lam (id e) #:transparent) ; <------------------ !!!
-
-(define (expr? e)
- (match e
- [(const n) (or (number? n) (boolean? n))]
- [(binop op l r) (and (symbol? op) (expr? l) (expr? r))]
- [(var-expr x) (symbol? x)]
- [(let-expr x e1 e2)
- (and (symbol? x) (expr? e1) (expr? e2))]
- [(if-expr eb et ef)
- (and (expr? eb) (expr? et) (expr? ef))]
- [(cons-expr e1 e2) (and (expr? e1) (expr? e2))]
- [(car-expr e) (expr? e)]
- [(cdr-expr e) (expr? e)]
- [(null-expr) true]
- [(null?-expr e) (expr? e)]
- [(app f e) (and (expr? f) (expr? e))] ; <--------------------- !!!
- [(lam id e) (and (symbol? id) (expr? e))] ; <----------------- !!!
- [_ false]))
-
-(define (parse q)
- (cond
- [(number? q) (const q)]
- [(eq? q 'true) (const true)]
- [(eq? q 'false) (const false)]
- [(eq? q 'null) (null-expr)]
- [(symbol? q) (var-expr q)]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'null?))
- (null?-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'cons))
- (cons-expr (parse (second q))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'car))
- (car-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'cdr))
- (cdr-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let))
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if))
- (if-expr (parse (second q))
- (parse (third q))
- (parse (fourth q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'lambda)) ; <!!!
- (parse-lam (second q) (third q))]
- [(and (list? q) (pair? q) (not (op->proc (car q)))) ; <------- !!!
- (parse-app q)]
- [(and (list? q) (eq? (length q) 3) (symbol? (first q)))
- (binop (first q)
- (parse (second q))
- (parse (third q)))]))
-
-(define (parse-app q) ; <----------------------------------------- !!!
- (define (parse-app-accum q acc)
- (cond [(= 1 (length q)) (app acc (parse (car q)))]
- [else (parse-app-accum (cdr q) (app acc (parse (car q))))]))
- (parse-app-accum (cdr q) (parse (car q))))
-
-(define (parse-lam pat e) ; <------------------------------------- !!!
- (cond [(= 1 (length pat))
- (lam (car pat) (parse e))]
- [else
- (lam (car pat) (parse-lam (cdr pat) e))]))
-
-; ---------- ;
-; Srodowiska ;
-; ---------- ;
-
-(struct environ (xs) #:transparent)
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (cons x v) (environ-xs env))))
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (car (car xs))) (cdr (car xs))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-
-; --------- ;
-; Ewaluacja ;
-; --------- ;
-
-(struct clo (id e env) #:transparent) ; <------------------------- !!!
-(struct odr (e env) #:transparent)
-
-(define (value? v)
- (or (number? v)
- (boolean? v)
- (and (pair? v) (value? (car v)) (value? (cdr v)))
- (null? v)
- (clo? v))) ; <---------------------------------------------- !!!
-
-(define (op->proc op)
- (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo]
- ['= =] ['> >] ['>= >=] ['< <] ['<= <=]
- ['and (lambda (x y) (and x y))]
- ['or (lambda (x y) (or x y))]
- [_ false])) ; <--------------------------------------- !!!
-
-(define (eval-env e env)
- (match e
- [(const n) n]
- [(binop op l r) ((op->proc op) (eval-env l env)
- (eval-env r env))]
- [(let-expr x e1 e2)
- (eval-env e2 (env-add x (eval-env e1 env) env))]
- [(var-expr x) (match (env-lookup x env)
- [(odr e env) (eval-env e env)]
- [f f])]
- [(if-expr eb et ef) (if (eval-env eb env)
- (eval-env et env)
- (eval-env ef env))]
- [(cons-expr e1 e2) (cons (odr e1 env)
- (odr e2 env))]
- [(car-expr e) (let ([p (eval-env e env)])
- (match (car p)
- [(odr e env) (eval-env e env)]))]
- [(cdr-expr e) (let ([p (eval-env e env)])
- (match (cdr p)
- [(odr e env) (eval-env e env)]))]
- [(null-expr) null]
- [(null?-expr e) (null? (eval-env e env))]
- [(lam x e) (clo x e env)] ; <--------------------------------- !!!
- [(app f e) ; <------------------------------------------------ !!!
- (let ([vf (eval-env f env)]
- [ve (odr e env)])
- (match vf [(clo x body fun-env)
- (eval-env body (env-add x ve fun-env))]))]))
-
-(define (eval e) (eval-env e env-empty))
-
-(define program
- '(let [twice (lambda (f x) (f (f x)))]
- (let [inc (lambda (x) (+ 1 x))]
- (twice twice twice twice inc 1))))
-
-
-;;; Testy wspólnie z Karolem Ochmanem
-
-(define (test-eval program) (eval (parse program)))
-
-(define program1
- '((lambda (x) (+ 3 3)) (/ 5 0)))
-(define program2
- '(let [if-fun (lambda (b t e) (if b t e))]
- (if-fun true 4 (/ 5 0))))
-(define program3
- '(car (cdr (cons 1 (cons 2 (cons 3 (cons 4 null)))))))
-(define program4
- '(car (cons (+ 3 4) (/ 5 0))))
-(define program5
- '(cons (+ 5 6) (- 4 3)))
-(define program6
- '(car (cdr (cdr (car (cons (cons (/ 0 0) (cons (/ 0 0) (cons 1 (/ 0 0)))) (cdr (cons (/ 0 0) null))))))))
-;;; (test-eval program)
-;;; (test-eval program1)
-;;; (test-eval program2)
-;;; (test-eval program3)
-;;; (test-eval program4)
-;;; (test-eval program5)
-;;; (test-eval program6)
\ No newline at end of file diff --git a/Semestr 2/racket/l8z15/solution.rkt b/Semestr 2/racket/l8z15/solution.rkt deleted file mode 100644 index 54b6cd3..0000000 --- a/Semestr 2/racket/l8z15/solution.rkt +++ /dev/null @@ -1,182 +0,0 @@ -#lang racket
-
-; Do list.rkt dodajemy procedury
-;
-; Miejsca, ktore sie zmienily oznaczone sa przez !!!
-
-(provide parse eval)
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct var-expr (id) #:transparent)
-(struct let-expr (id e1 e2) #:transparent)
-(struct if-expr (eb et ef) #:transparent)
-(struct cons-expr (e1 e2) #:transparent)
-(struct car-expr (e) #:transparent)
-(struct cdr-expr (e) #:transparent)
-(struct null-expr () #:transparent)
-(struct null?-expr (e) #:transparent)
-(struct app (f e) #:transparent) ; <------------------ !!!
-(struct lam (id e) #:transparent) ; <------------------ !!!
-
-(define (expr? e)
- (match e
- [(const n) (or (number? n) (boolean? n))]
- [(binop op l r) (and (symbol? op) (expr? l) (expr? r))]
- [(var-expr x) (symbol? x)]
- [(let-expr x e1 e2)
- (and (symbol? x) (expr? e1) (expr? e2))]
- [(if-expr eb et ef)
- (and (expr? eb) (expr? et) (expr? ef))]
- [(cons-expr e1 e2) (and (expr? e1) (expr? e2))]
- [(car-expr e) (expr? e)]
- [(cdr-expr e) (expr? e)]
- [(null-expr) true]
- [(null?-expr e) (expr? e)]
- [(app f e) (and (expr? f) (expr? e))] ; <--------------------- !!!
- [(lam id e) (and (symbol? id) (expr? e))] ; <----------------- !!!
- [_ false]))
-
-(define (parse q)
- (cond
- [(number? q) (const q)]
- [(eq? q 'true) (const true)]
- [(eq? q 'false) (const false)]
- [(eq? q 'null) (null-expr)]
- [(symbol? q) (var-expr q)]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'null?))
- (null?-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'cons))
- (cons-expr (parse (second q))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'car))
- (car-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'cdr))
- (cdr-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let))
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if))
- (if-expr (parse (second q))
- (parse (third q))
- (parse (fourth q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'lambda)) ; <!!!
- (parse-lam (second q) (third q))]
- [(and (list? q) (pair? q) (not (op->proc (car q)))) ; <------- !!!
- (parse-app q)]
- [(and (list? q) (eq? (length q) 3) (symbol? (first q)))
- (binop (first q)
- (parse (second q))
- (parse (third q)))]))
-
-(define (parse-app q) ; <----------------------------------------- !!!
- (define (parse-app-accum q acc)
- (cond [(= 1 (length q)) (app acc (parse (car q)))]
- [else (parse-app-accum (cdr q) (app acc (parse (car q))))]))
- (parse-app-accum (cdr q) (parse (car q))))
-
-(define (parse-lam pat e) ; <------------------------------------- !!!
- (cond [(= 1 (length pat))
- (lam (car pat) (parse e))]
- [else
- (lam (car pat) (parse-lam (cdr pat) e))]))
-
-; ---------- ;
-; Srodowiska ;
-; ---------- ;
-
-(struct environ (xs) #:transparent)
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (cons x v) (environ-xs env))))
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (car (car xs))) (cdr (car xs))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-
-; --------- ;
-; Ewaluacja ;
-; --------- ;
-
-(struct clo (id e env) #:transparent) ; <------------------------- !!!
-(struct odr (e env) #:transparent)
-
-(define (value? v)
- (or (number? v)
- (boolean? v)
- (and (pair? v) (value? (car v)) (value? (cdr v)))
- (null? v)
- (clo? v))) ; <---------------------------------------------- !!!
-
-(define (op->proc op)
- (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo]
- ['= =] ['> >] ['>= >=] ['< <] ['<= <=]
- ['and (lambda (x y) (and x y))]
- ['or (lambda (x y) (or x y))]
- [_ false])) ; <--------------------------------------- !!!
-
-(define (eval-env e env)
- (match e
- [(const n) n]
- [(binop op l r) ((op->proc op) (eval-env l env)
- (eval-env r env))]
- [(let-expr x e1 e2)
- (eval-env e2 (env-add x (eval-env e1 env) env))]
- [(var-expr x) (match (env-lookup x env)
- [(odr e env) (eval-env e env)]
- [f f])]
- [(if-expr eb et ef) (if (eval-env eb env)
- (eval-env et env)
- (eval-env ef env))]
- [(cons-expr e1 e2) (cons (odr e1 env)
- (odr e2 env))]
- [(car-expr e) (let ([p (eval-env e env)])
- (match (car p)
- [(odr e env) (eval-env e env)]))]
- [(cdr-expr e) (let ([p (eval-env e env)])
- (match (cdr p)
- [(odr e env) (eval-env e env)]))]
- [(null-expr) null]
- [(null?-expr e) (null? (eval-env e env))]
- [(lam x e) (clo x e env)] ; <--------------------------------- !!!
- [(app f e) ; <------------------------------------------------ !!!
- (let ([vf (eval-env f env)]
- [ve (odr e env)])
- (match vf [(clo x body fun-env)
- (eval-env body (env-add x ve fun-env))]))]))
-
-(define (eval e) (eval-env e env-empty))
-
-
-;;; Testy wspólnie z Karolem Ochmanem
-
-(define (test-eval program) (eval (parse program)))
-
-(define program1
- '((lambda (x) (+ 3 3)) (/ 5 0)))
-(define program2
- '(let [if-fun (lambda (b t e) (if b t e))]
- (if-fun true 4 (/ 5 0))))
-(define program3
- '(car (cdr (cons 1 (cons 2 (cons 3 (cons 4 null)))))))
-(define program4
- '(car (cons (+ 3 4) (/ 5 0))))
-(define program5
- '(cons (+ 5 6) (- 4 3)))
-(define program6
- '(car (cdr (cdr (car (cons (cons (/ 0 0) (cons (/ 0 0) (cons 1 (/ 0 0)))) (cdr (cons (/ 0 0) null))))))))
-;;; (test-eval program)
-;;; (test-eval program1)
-;;; (test-eval program2)
-;;; (test-eval program3)
-;;; (test-eval program4)
-;;; (test-eval program5)
-;;; (test-eval program6)
\ No newline at end of file diff --git a/Semestr 2/racket/l9/zad4.rkt b/Semestr 2/racket/l9/zad4.rkt deleted file mode 100644 index 7b5e0bc..0000000 --- a/Semestr 2/racket/l9/zad4.rkt +++ /dev/null @@ -1,202 +0,0 @@ -#lang racket
-
-; Do fun.rkt dodajemy rekurencyjne let-y
-;
-; Miejsca, ktore sie zmienily oznaczone sa przez !!!
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct var-expr (id) #:transparent)
-(struct let-expr (id e1 e2) #:transparent)
-(struct letrec-expr (id e1 e2) #:transparent) ; <----------------- !!!
-(struct if-expr (eb et ef) #:transparent)
-(struct cons-expr (e1 e2) #:transparent)
-(struct car-expr (e) #:transparent)
-(struct cdr-expr (e) #:transparent)
-(struct null-expr () #:transparent)
-(struct null?-expr (e) #:transparent)
-(struct app (f e) #:transparent)
-(struct lam (id e) #:transparent)
-(struct citation (q) #:transparent)
-
-(define (expr? e)
- (match e
- [(const n) (or (number? n) (boolean? n))]
- [(binop op l r) (and (symbol? op) (expr? l) (expr? r))]
- [(var-expr x) (symbol? x)]
- [(let-expr x e1 e2)
- (and (symbol? x) (expr? e1) (expr? e2))]
- [(letrec-expr x e1 e2) ; <------------------------------------ !!!
- (and (symbol? x) (expr? e1) (expr? e2))]
- [(if-expr eb et ef)
- (and (expr? eb) (expr? et) (expr? ef))]
- [(cons-expr e1 e2) (and (expr? e1) (expr? e2))]
- [(car-expr e) (expr? e)]
- [(cdr-expr e) (expr? e)]
- [(null-expr) true]
- [(null?-expr e) (expr? e)]
- [(app f e) (and (expr? f) (expr? e))]
- [(lam id e) (and (symbol? id) (expr? e))]
- [(citation q) true]
- [_ false]))
-
-(define (parse q)
- (cond
- [(number? q) (const q)]
- [(eq? q 'true) (const true)]
- [(eq? q 'false) (const false)]
- [(eq? q 'null) (null-expr)]
- [(symbol? q) (var-expr q)]
- [(and (list? q) (eq? 'quote (first q))) (citation (second q))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'null?))
- (null?-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'cons))
- (cons-expr (parse (second q))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'car))
- (car-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'cdr))
- (cdr-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let))
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'letrec)) ; <!!!
- (letrec-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if))
- (if-expr (parse (second q))
- (parse (third q))
- (parse (fourth q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'lambda))
- (parse-lam (second q) (third q))]
- [(and (list? q) (pair? q) (not (op->proc (car q))))
- (parse-app q)]
- [(and (list? q) (eq? (length q) 3) (symbol? (first q)))
- (binop (first q)
- (parse (second q))
- (parse (third q)))]))
-
-(define (parse-app q)
- (define (parse-app-accum q acc)
- (cond [(= 1 (length q)) (app acc (parse (car q)))]
- [else (parse-app-accum (cdr q) (app acc (parse (car q))))]))
- (parse-app-accum (cdr q) (parse (car q))))
-
-(define (parse-lam pat e)
- (cond [(= 1 (length pat))
- (lam (car pat) (parse e))]
- [else
- (lam (car pat) (parse-lam (cdr pat) e))]))
-
-; ---------- ;
-; Srodowiska ;
-; ---------- ;
-
-(struct blackhole () #:transparent) ; <------------------------- !!!
-(struct environ (xs) #:transparent)
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (mcons x v) (environ-xs env)))) ; <-------------- !!!
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (mcar (car xs))) ; <---------------------------- !!!
- (match (mcdr (car xs))
- [(blackhole) (error "Stuck forever in a black hole!")]
- [x x])]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-(define (env-update! x v xs) ; <---------------------------------- !!!
- (define (assoc-update! xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (mcar (car xs))) (set-mcdr! (car xs) v)]
- [else (env-update! x v (cdr xs))]))
- (assoc-update! (environ-xs xs)))
-
-; --------- ;
-; Ewaluacja ;
-; --------- ;
-
-(struct clo (id e env) #:transparent)
-
-(define (value? v)
- (or (number? v)
- (boolean? v)
- (and (pair? v) (value? (car v)) (value? (cdr v)))
- (null? v)
- (clo? v)
- (blackhole? v))) ; <---------------------------------------- !!!
-
-(define (op->proc op)
- (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo]
- ['= =] ['> >] ['>= >=] ['< <] ['<= <=]
- ['and (lambda (x y) (and x y))]
- ['or (lambda (x y) (or x y))]
- [_ false]))
-
-(define (eval-env e env)
- (match e
- [(const n) n]
- [(citation q) q]
- [(binop op l r) ((op->proc op) (eval-env l env)
- (eval-env r env))]
- [(let-expr x e1 e2)
- (eval-env e2 (env-add x (eval-env e1 env) env))]
- [(letrec-expr x e1 e2) ; <------------------------------------ !!!
- (let* ([new-env (env-add x (blackhole) env)]
- [v (eval-env e1 new-env)])
- (begin
- (env-update! x v new-env)
- (eval-env e2 new-env)))]
- [(var-expr x) (env-lookup x env)]
- [(if-expr eb et ef) (if (eval-env eb env)
- (eval-env et env)
- (eval-env ef env))]
- [(cons-expr e1 e2) (cons (eval-env e1 env)
- (eval-env e2 env))]
- [(car-expr e) (car (eval-env e env))]
- [(cdr-expr e) (cdr (eval-env e env))]
- [(null-expr) null]
- [(null?-expr e) (null? (eval-env e env))]
- [(lam x e) (clo x e env)]
- [(app f e)
- (let ([vf (eval-env f env)]
- [ve (eval-env e env)])
- (match vf [(clo x body fun-env)
- (eval-env body (env-add x ve fun-env))]))]))
-
-(define (eval e) (eval-env e env-empty))
-
-(define program
- '(letrec
- [fact (lambda (n) (if (= n 0) 1 (* n (fact (- n 1)))))]
- (letrec
- [even-odd
- (cons
- (lambda (x)
- (if (= x 0) true ((cdr even-odd) (- x 1))))
- (lambda (x)
- (if (= x 0) false ((car even-odd) (- x 1)))))]
- (let [even (car even-odd)]
- (let [odd (cdr even-odd)]
- (even (fact 6)))))))
-
-(define PROGRAM
- '(letrec [from-to (lambda (n k)
- (if (> n k)
- null
- (cons n (from-to (+ n 1) k))))]
- (letrec [sum (lambda (xs)
- (if (null? xs)
- 0
- (+ (car xs) (sum (cdr xs)))))]
- (sum (from-to 1 36)))))
-
-(define (test-eval) (eval (parse PROGRAM)))
\ No newline at end of file diff --git a/Semestr 2/racket/l9/zad7.rkt b/Semestr 2/racket/l9/zad7.rkt deleted file mode 100644 index 207162d..0000000 --- a/Semestr 2/racket/l9/zad7.rkt +++ /dev/null @@ -1,340 +0,0 @@ -#lang racket
-
-;; Składnia abstrakcyjna
-(struct const (val) #:transparent)
-(struct var-expr (name) #:transparent)
-(struct let-expr (id bound body) #:transparent)
-(struct letrec-expr (id bound body) #:transparent)
-(struct if-expr (eb et ef) #:transparent)
-(struct lambda-expr (arg body) #:transparent)
-(struct app-expr (fun arg) #:transparent)
-(struct display-expr (e) )
-
-(define (keyword s)
- (member s '(true false null and or if cond else lambda let letrec display read)))
-
-(define (expr? e)
- (match e
- [(const n) (or (number? n)
- (boolean? n)
- (null? n)
- (string? n))]
- [(var-expr id) (symbol? id)]
- [(let-expr x e1 e2 ) (and (symbol? x)
- (expr? e1)
- (expr? e2))]
- [(letrec-expr x e1 e2) (and (symbol? x)
- (expr? e1)
- (expr? e2))]
- [(if-expr eb et ef) (and (expr? eb)
- (expr? et)
- (expr? ef))]
- [(lambda-expr x e) (and (symbol? x)
- (expr? e))]
- [(app-expr ef ea) (and (expr? ef)
- (expr? ea))]
- [_ false]))
-
-;; Parsowanie (zacytowane wyrażenie -> składnia abstrakcyjna)
-(define (parse q)
- (cond
- [(number? q) (const q)]
- [(string? q) (const q)]
- [(eq? q 'true) (const true)]
- [(eq? q 'false) (const false)]
- [(eq? q 'null) (const null)]
- [(and (symbol? q)
- (not (keyword q)))
- (var-expr q)]
- [(and (list? q)
- (= (length q) 3)
- (eq? (first q) 'let)
- (list? (second q))
- (= (length (second q)) 2)
- (symbol? (first (second q))))
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q)
- (= (length q) 3)
- (eq? (first q) 'letrec)
- (list? (second q))
- (= (length (second q)) 2)
- (symbol? (first (second q))))
- (letrec-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q)
- (= (length q) 4)
- (eq? (first q) 'if))
- (if-expr (parse (second q))
- (parse (third q))
- (parse (fourth q)))]
- [(and (list? q)
- (pair? q)
- (eq? (first q) 'and))
- (desugar-and (map parse (cdr q)))]
- [(and (list? q)
- (pair? q)
- (eq? (first q) 'or))
- (desugar-or (map parse (cdr q)))]
- [(and (list? q)
- (>= (length q) 2)
- (eq? (first q) 'cond))
- (parse-cond (cdr q))]
- [(and (list? q)
- (= (length q) 3)
- (eq? (first q) 'lambda)
- (list? (second q))
- (andmap symbol? (second q))
- (cons? (second q)))
- (desugar-lambda (second q) (parse (third q)))]
- [(and (list? q)
- (>= (length q) 2))
- (desugar-app (parse (first q)) (map parse (cdr q)))]
- [else (error "Unrecognized token:" q)]))
-
-(define (parse-cond qs)
- (match qs
- [(list (list 'else q))
- (parse q)]
-
- [(list (list q _))
- (error "Expected 'else' in last branch but found:" q)]
-
- [(cons (list qb qt) qs)
- (if-expr (parse qb) (parse qt) (parse-cond qs))]))
-
-(define (desugar-and es)
- (if (null? es)
- (const true)
- (if-expr (car es) (desugar-and (cdr es)) (const false))))
-
-(define (desugar-or es)
- (if (null? es)
- (const false)
- (if-expr (car es) (const true) (desugar-or (cdr es)))))
-
-(define (desugar-lambda xs e)
- (if (null? xs)
- e
- (lambda-expr (car xs) (desugar-lambda (cdr xs) e))))
-
-(define (desugar-app e es)
- (if (null? es)
- e
- (desugar-app (app-expr e (car es)) (cdr es))))
-
-;; Środowiska
-(struct blackhole ())
-(struct environ (xs))
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (mcons x v) (environ-xs env))))
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs)
- (error "Unknown identifier" x)]
- [(eq? x (mcar (car xs)))
- (let ((v (mcdr (car xs))))
- (if (blackhole? v)
- (error "Jumped into blackhole at" x)
- v))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-(define (env-update! x v env)
- (define (assoc-update xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (mcar (car xs)))
- (set-mcdr! (car xs) v)]
- [else (assoc-update (cdr xs))]))
- (assoc-update (environ-xs env)))
-
-;; Domknięcia
-(struct clo (arg body env))
-
-;; Procedury wbudowane, gdzie
-;; proc — Racketowa procedura którą należy uruchomić
-;; args — lista dotychczas dostarczonych argumentów
-;; pnum — liczba brakujących argumentów (> 0)
-;; W ten sposób pozwalamy na częściową aplikację Racketowych procedur
-;; — zauważmy że zawsze znamy pnum, bo w naszym języku arność
-;; procedury jest ustalona z góry
-(struct builtin (proc args pnum))
-
-;; Pomocnicze konstruktory procedur unarnych i binarnych
-(define (builtin/1 p)
- (builtin p null 1))
-(define (builtin/2 p)
- (builtin p null 2))
-
-;; Procedury
-(define (proc? v)
- (or (and (clo? v)
- (symbol? (clo-arg v))
- (expr? (clo-body v))
- (environ? (clo-env v)))
- (and (builtin? v)
- (procedure? (builtin-proc v))
- (andmap value? (builtin-args v))
- (natural? (builtin-pnum v))
- (> (builtin-pnum v) 0))))
-
-;; Definicja typu wartości
-(define (value? v)
- (or (number? v)
- (boolean? v)
- (null? v)
- (string? v)
- (and (cons? v)
- (value? (car v))
- (value? (cdr v)))
- (proc? v)))
-
-;; Środowisko początkowe (przypisujące procedury wbudowane ich nazwom)
-
-(define start-env
- (foldl (lambda (p env) (env-add (first p) (second p) env))
- env-empty
- `((+ ,(builtin/2 +))
- (- ,(builtin/2 -))
- (* ,(builtin/2 *))
- (/ ,(builtin/2 /))
- (~ ,(builtin/1 -))
- (< ,(builtin/2 <))
- (> ,(builtin/2 >))
- (= ,(builtin/2 =))
- (<= ,(builtin/2 <=))
- (>= ,(builtin/2 >=))
- (not ,(builtin/1 not))
- (cons ,(builtin/2 cons))
- (car ,(builtin/1 car))
- (cdr ,(builtin/1 cdr))
- (pair? ,(builtin/1 cons?))
- (null? ,(builtin/1 null?))
- (boolean? ,(builtin/1 boolean?))
- (number? ,(builtin/1 number?))
- (procedure? ,(builtin/1 (lambda (x) (or (clo? x) (builtin? x)))))
- (string? ,(builtin/1 string?))
- (string-= ,(builtin/2 string=?))
- ;; and so on, and so on
- )))
-
-;; Ewaluator
-(define (eval-env e env)
- (match e
- [(const n)
- n]
-
- [(var-expr x)
- (env-lookup x env)]
-
- [(let-expr x e1 e2)
- (let ((v1 (eval-env e1 env)))
- (eval-env e2 (env-add x v1 env)))]
-
- [(letrec-expr f ef eb)
- (let* ((new-env (env-add f (blackhole) env))
- (vf (eval-env ef new-env)))
- (env-update! f vf new-env)
- (eval-env eb new-env))]
-
- [(if-expr eb et ef)
- (match (eval-env eb env)
- [#t (eval-env et env)]
- [#f (eval-env ef env)]
- [v (error "Not a boolean:" v)])]
-
- [(lambda-expr x e)
- (clo x e env)]
-
- [(app-expr ef ea)
- (let ((vf (eval-env ef env))
- (va (eval-env ea env)))
- (match vf
- [(clo x e env)
- (eval-env e (env-add x va env))]
- [(builtin p args nm)
- (if (= nm 1)
- (apply p (reverse (cons va args)))
- (builtin p (cons va args) (- nm 1)))]
- [_ (error "Not a function:" vf)]))]))
-
-(define (eval e)
- (eval-env e start-env))
-
-
-;; REPL — interpreter interaktywny (read-eval-print loop)
-
-;; dodajemy składnię na wiązanie zmiennych "na poziomie interpretera"
-;; i komendę wyjścia "exit" ...
-(struct letrec-repl (id expr))
-(struct let-repl (id expr))
-(struct exit-repl ())
-
-;; ... a także rozszerzoną procedurę parsującą te dodatkowe komendy i
-;; prostą obsługę błędów
-(define (parse-repl q)
- (with-handlers
- ([exn? (lambda (exn)
- (display "Parse error! ")
- (displayln (exn-message exn)))])
- (cond
- [(eq? q 'exit) (exit-repl)]
- [(and (list? q)
- (= 3 (length q))
- (eq? (first q) 'let))
- (let-repl (second q) (parse (third q)))]
- [(and (list? q)
- (= 3 (length q))
- (eq? (first q) 'letrec))
- (letrec-repl (second q) (parse (third q)))]
- [else (parse q)])))
-
-;; trochę zamieszania w procedurze eval-repl wynika z rudymentarnej
-;; obsługi błędów: nie chcemy żeby błąd w interpretowanym programie
-;; kończył działanie całego interpretera!
-(define (eval-repl c env continue)
- (define (eval-with-err e env)
- (with-handlers
- ([exn? (lambda (exn)
- (display "Error! ")
- (displayln (exn-message exn)))])
- (eval-env e env)))
- (match c
- [(exit-repl)
- (void)]
-
- [(let-repl x e)
- (let ((v (eval-with-err e env)))
- (if (void? v)
- (continue env)
- (continue (env-add x v env))))]
-
- [(letrec-repl f e)
- (let* ((new-env (env-add f (blackhole) env))
- (v (eval-with-err e new-env)))
- (if (void? v)
- (continue env)
- (begin
- (env-update! f v new-env)
- (continue new-env))))]
-
- [_
- (let ((v (eval-with-err c env)))
- (unless (void? v)
- (displayln v))
- (continue env))]))
-
-;; I w końcu interaktywny interpreter
-(define (repl)
- (define (go env)
- (display "FUN > ")
- (let* ((q (read))
- (c (parse-repl q)))
- (if (void? c)
- (go env)
- (eval-repl c env go))))
- (displayln "Welcome to the FUN functional language interpreter!")
- (go start-env))
\ No newline at end of file diff --git a/Semestr 2/racket/l9z16/solution.rkt b/Semestr 2/racket/l9z16/solution.rkt deleted file mode 100644 index 0af169d..0000000 --- a/Semestr 2/racket/l9z16/solution.rkt +++ /dev/null @@ -1,42 +0,0 @@ -#lang racket
-
-(provide lcons lnull lnull? lcar lcdr)
-
-
-(define (lcons x f) (mcons x f))
-
-(define lnull null)
-
-(define lnull? null?)
-
-(define (lcar xs) (mcar xs))
-
-(define (lcdr xs)
- (let ([x (mcdr xs)])
- (cond [(not (mpair? x)) (set-mcdr! xs (x))]))
- (mcdr xs))
-
-(define (from n)
- (lcons n (lambda () (from (+ n 1)))))
-
-(define nats
- (from 0))
-
-(define (lnth n xs)
- (cond [(= n 0) (lcar xs)]
- [else (lnth (- n 1) (lcdr xs))]))
-
-(define (lfilter p xs)
- (cond [(lnull? xs) lnull]
- [(p (lcar xs))
- (lcons (lcar xs) (lambda () (lfilter p (lcdr xs))))]
- [else (lfilter p (lcdr xs))]))
-
-(define (prime? n)
- (define (factors i)
- (cond [(>= i n) (list n)]
- [(= (modulo n i) 0) (cons i (factors (+ i 1)))]
- [else (factors (+ i 1))]))
- (= (length (factors 1)) 2))
-
-(define primes (lfilter prime? (from 2)))
\ No newline at end of file diff --git a/Semestr 2/racket/l9z17/solution.rkt b/Semestr 2/racket/l9z17/solution.rkt deleted file mode 100644 index 5e98036..0000000 --- a/Semestr 2/racket/l9z17/solution.rkt +++ /dev/null @@ -1,266 +0,0 @@ -#lang racket
-
-; Do programming.rkt dodajemy instrukcje
-
-(provide eval-while parse-while env-empty env-lookup)
-
-;;; We współpracy z Kacprem Soleckim
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-
-(struct const (val) #:transparent)
-(struct binop (op l r) #:transparent)
-(struct var-expr (id) #:transparent)
-(struct let-expr (id e1 e2) #:transparent)
-(struct letrec-expr (id e1 e2) #:transparent)
-(struct if-expr (eb et ef) #:transparent)
-(struct cons-expr (e1 e2) #:transparent)
-(struct car-expr (e) #:transparent)
-(struct cdr-expr (e) #:transparent)
-(struct null-expr () #:transparent)
-(struct null?-expr (e) #:transparent)
-(struct app (f e) #:transparent)
-(struct lam (id e) #:transparent)
-
-(define (expr? e)
- (match e
- [(const n) (or (number? n) (boolean? n) (string? n))]
- [(binop op l r) (and (symbol? op) (expr? l) (expr? r))]
- [(var-expr x) (symbol? x)]
- [(let-expr x e1 e2)
- (and (symbol? x) (expr? e1) (expr? e2))]
- [(letrec-expr x e1 e2)
- (and (symbol? x) (expr? e1) (expr? e2))]
- [(if-expr eb et ef)
- (and (expr? eb) (expr? et) (expr? ef))]
- [(cons-expr e1 e2) (and (expr? e1) (expr? e2))]
- [(car-expr e) (expr? e)]
- [(cdr-expr e) (expr? e)]
- [(null-expr) true]
- [(null?-expr e) (expr? e)]
- [(app f e) (and (expr? f) (expr? e))]
- [(lam id e) (and (symbol? id) (expr? e))]
- [_ false]))
-
-(define (parse q)
- (cond
- [(number? q) (const q)]
- [(eq? q 'true) (const true)]
- [(eq? q 'false) (const false)]
- [(eq? q 'null) (null-expr)]
- [(string? q) (const q)]
- [(symbol? q) (var-expr q)]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'null?))
- (null?-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'cons))
- (cons-expr (parse (second q))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'car))
- (car-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 2) (eq? (first q) 'cdr))
- (cdr-expr (parse (second q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let))
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'letrec))
- (letrec-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if))
- (if-expr (parse (second q))
- (parse (third q))
- (parse (fourth q)))]
- [(and (list? q) (eq? (length q) 3) (eq? (first q) 'lambda))
- (parse-lam (second q) (third q))]
- [(and (list? q) (pair? q) (not (op->proc (car q))))
- (parse-app q)]
- [(and (list? q) (eq? (length q) 3) (symbol? (first q)))
- (binop (first q)
- (parse (second q))
- (parse (third q)))]))
-
-(define (parse-app q)
- (define (parse-app-accum q acc)
- (cond [(= 1 (length q)) (app acc (parse (car q)))]
- [else (parse-app-accum (cdr q) (app acc (parse (car q))))]))
- (parse-app-accum (cdr q) (parse (car q))))
-
-(define (parse-lam pat e)
- (cond [(= 1 (length pat))
- (lam (car pat) (parse e))]
- [else
- (lam (car pat) (parse-lam (cdr pat) e))]))
-
-; ---------- ;
-; Srodowiska ;
-; ---------- ;
-
-(struct blackhole () #:transparent)
-(struct environ (xs) #:transparent)
-
-(define env-empty (environ null))
-(define (env-add x v env)
- (environ (cons (mcons x v) (environ-xs env))))
-(define (env-lookup x env)
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (mcar (car xs)))
- (match (mcdr (car xs))
- [(blackhole) (error "Stuck forever in a black hole!")]
- [x x])]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-(define (env-update! x v xs)
- (define (assoc-update! xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (mcar (car xs))) (set-mcdr! (car xs) v)]
- [else (env-update! x v (cdr xs))]))
- (assoc-update! (environ-xs xs)))
-(define (env-update x v xs) ; <---------------------------------- !!!
- (define (assoc-update xs)
- (cond [(null? xs) (list (mcons x v))]
- [(eq? x (mcar (car xs))) (cons (mcons x v) (cdr xs))]
- [else (cons (car xs) (assoc-update (cdr xs)))]))
- (environ (assoc-update (environ-xs xs))))
-
-; --------- ;
-; Ewaluacja ;
-; --------- ;
-
-(struct clo (id e env) #:transparent)
-(struct let-var (v) #:transparent)
-
-(define (value? v)
- (or (number? v)
- (boolean? v)
- (string? v)
- (and (pair? v) (value? (car v)) (value? (cdr v)))
- (null? v)
- (clo? v)
- (blackhole? v)))
-
-(define (op->proc op)
- (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo]
- ['= =] ['> >] ['>= >=] ['< <] ['<= <=]
- ['and (lambda (x y) (and x y))]
- ['or (lambda (x y) (or x y))]
- ['eq? eq?]
- [_ false]))
-
-(define (eval-env e env)
- (match e
- [(const n) n]
- [(binop op l r) ((op->proc op) (eval-env l env)
- (eval-env r env))]
- [(let-expr x e1 e2)
- (eval-env e2 (env-add x (let-var (eval-env e1 env)) env))]
- [(letrec-expr x e1 e2)
- (let* ([new-env (env-add x (blackhole) env)]
- [v (eval-env e1 new-env)])
- (begin
- (env-update! x v new-env)
- (eval-env e2 new-env)))]
- [(var-expr x) (let ((f (env-lookup x env)))
- (if (let-var? f) (let-var-v f) f))]
- [(if-expr eb et ef) (if (eval-env eb env)
- (eval-env et env)
- (eval-env ef env))]
- [(cons-expr e1 e2) (cons (eval-env e1 env)
- (eval-env e2 env))]
- [(car-expr e) (car (eval-env e env))]
- [(cdr-expr e) (cdr (eval-env e env))]
- [(null-expr) null]
- [(null?-expr e) (null? (eval-env e env))]
- [(lam x e) (clo x e env)]
- [(app f e)
- (let ([vf (eval-env f env)]
- [ve (eval-env e env)])
- (match vf [(clo x body fun-env)
- (eval-env body (env-add x ve (merge-let-vars env fun-env)))]))]))
-
-(define (merge-let-vars env1 env2)
- (define (iter xs env)
- (if (null? xs)
- env
- (let ((cur-var (car xs)))
- (if (let-var? (mcdr cur-var))
- (iter (cdr xs) (env-add (mcar cur-var) (mcdr cur-var) env))
- (iter (cdr xs) env)))))
- (iter (reverse (environ-xs env2)) env1))
-
-(define (eval e) (eval-env e env-empty))
-
-; ---------------------------------------------------------------- !!!
-
-(struct skip () #:transparent)
-(struct assign (x e) #:transparent)
-(struct if-cmd (eb ct cf) #:transparent)
-(struct while (eb cb) #:transparent)
-(struct comp (c1 c2) #:transparent)
-
-(define (cmd? c)
- (match c
- [(skip) true]
- [(assign x e) (and (symbol? x) (expr? e))]
- [(if-cmd eb ct cf) (and (expr? eb) (cmd? ct) (cmd? cf))]
- [(while eb ct) (and (expr? eb) (cmd? ct))]
- [else false]))
-
-(define (parse-while q)
- (cond
- [(eq? q 'skip) (skip)]
- [(null? q) (skip)]
- [(and (list? q) (= (length q) 3) (eq? (second q) ':=))
- (assign (first q)
- (parse (third q)))]
- [(and (list? q) (= (length q) 4) (eq? (car q) 'if))
- (if-cmd (parse (second q))
- (parse-while (third q))
- (parse-while (fourth q)))]
- [(and (list? q) (= (length q) 3) (eq? (car q) 'while))
- (while (parse (second q))
- (parse-while (third q)))]
- [(and (list? q) (= (length q) 2))
- (comp (parse-while (first q))
- (parse-while (second q)))]
- [(and (list? q) (> (length q) 2))
- (comp (parse-while (first q))
- (parse-while (cdr q)))]
- [else (error "while parse error")]))
-
-(define (eval-while e env)
- (match e
- [(skip) env]
- [(assign x e)
- (env-update x (eval-env e env) env)]
- [(if-cmd eb ct cf)
- (if (eval-env eb env)
- (eval-while ct env)
- (eval-while cf env))]
- [(while eb cb)
- (if (eval-env eb env)
- (eval-while e (eval-while cb env))
- env)]
- [(comp c1 c2) (eval-while c2 (eval-while c1 env))]))
-
-; zakladamy, ze program startuje z pamiecia w ktorej
-; aktwna jest zmienna t
-(define WHILE_FACT
- '{(i := 1)
- (while (> t 0)
- {(i := (* i t))
- (t := (- t 1))})})
-
-(define (fact n)
- (let* ([init-env (env-add 't n env-empty)]
- [final-env
- (eval-while (parse-while WHILE_FACT) init-env)])
- (env-lookup 'i final-env)))
-
-(define prog1 '{(x := 5)
- (f := (let [x 50] (lambda (y) (+ x y))))
- (x := 10)
- (z := (f 0))})
\ No newline at end of file diff --git a/Semestr 2/racket/leftist.rkt b/Semestr 2/racket/leftist.rkt deleted file mode 100644 index 78319e4..0000000 --- a/Semestr 2/racket/leftist.rkt +++ /dev/null @@ -1,105 +0,0 @@ -#lang racket - -(provide make-elem elem-priority elem-val empty-heap heap-insert heap-merge heap-min heap-pop heap-empty?) - -(define (inc n) - (+ n 1)) - -;;; tagged lists -(define (tagged-list? len-xs tag xs) - (and (list? xs) - (= len-xs (length xs)) - (eq? (first xs) tag))) - -;;; ordered elements -(define (make-elem pri val) - (cons pri val)) - -(define (elem-priority x) - (car x)) - -(define (elem-val x) - (cdr x)) - -;;; leftist heaps (after Okasaki) - -;; data representation -(define leaf 'leaf) - -(define (leaf? h) (eq? 'leaf h)) - -(define (hnode? h) - (and (tagged-list? 5 'hnode h) - (natural? (caddr h)))) - -(define (make-hnode elem heap-a heap-b) - (if (< (rank heap-a) (rank heap-b)) - (list 'hnode elem (+ (rank heap-a) 1) heap-b heap-a) - (list 'hnode elem (+ (rank heap-b) 1) heap-a heap-b))) - -(define (hnode-elem h) - (second h)) - -(define (hnode-left h) - (fourth h)) - -(define (hnode-right h) - (fifth h)) - -(define (hnode-rank h) - (third h)) - -(define (hord? p h) - (or (leaf? h) - (<= p (elem-priority (hnode-elem h))))) - -(define (heap? h) - (or (leaf? h) - (and (hnode? h) - (heap? (hnode-left h)) - (heap? (hnode-right h)) - (<= (rank (hnode-right h)) - (rank (hnode-left h))) - (= (rank h) (inc (rank (hnode-right h)))) - (hord? (elem-priority (hnode-elem h)) - (hnode-left h)) - (hord? (elem-priority (hnode-elem h)) - (hnode-right h))))) - -(define (rank h) - (if (leaf? h) - 0 - (hnode-rank h))) - -;; operations - -(define empty-heap leaf) - -(define (heap-empty? h) - (leaf? h)) - -(define (heap-insert elt heap) - (heap-merge heap (make-hnode elt leaf leaf))) - -(define (heap-min heap) - (hnode-elem heap)) - -(define (heap-pop heap) - (heap-merge (hnode-left heap) (hnode-right heap))) - -(define (heap-merge h1 h2) - (cond - [(leaf? h1) h2] - [(leaf? h2) h1] - [else (let ((h1-min (heap-min h1)) - (h2-min (heap-min h2))) - (if (< (elem-priority h1-min) (elem-priority h2-min)) - (make-hnode h1-min (heap-merge (hnode-left h1) (hnode-right h1)) h2) - (make-hnode h2-min h1 (heap-merge (hnode-left h2) (hnode-right h2)))))])) - -;;; check that a list is sorted (useful for longish lists) -(define (sorted? xs) - (cond [(null? xs) true] - [(null? (cdr xs)) true] - [(<= (car xs) (cadr xs)) (sorted? (cdr xs))] - [else false])) diff --git a/Semestr 2/racket/lista5/compiled/drracket/errortrace/prop_rkt.dep b/Semestr 2/racket/lista5/compiled/drracket/errortrace/prop_rkt.dep deleted file mode 100644 index 6e0cfbb..0000000 --- a/Semestr 2/racket/lista5/compiled/drracket/errortrace/prop_rkt.dep +++ /dev/null @@ -1 +0,0 @@ -("7.6" racket ("f0a57e86828cdab35eaad454d5deb80353172518" . "8314027ed4c1c6fd9c412af77103e94790e59dd2") (collects #"errortrace" #"errortrace-key.rkt") (collects #"racket" #"main.rkt") (collects #"racket" #"runtime-config.rkt")) diff --git a/Semestr 2/racket/lista5/compiled/drracket/errortrace/prop_rkt.zo b/Semestr 2/racket/lista5/compiled/drracket/errortrace/prop_rkt.zo Binary files differdeleted file mode 100644 index 748fec9..0000000 --- a/Semestr 2/racket/lista5/compiled/drracket/errortrace/prop_rkt.zo +++ /dev/null diff --git a/Semestr 2/racket/lista5/compiled/drracket/errortrace/props_rkt.dep b/Semestr 2/racket/lista5/compiled/drracket/errortrace/props_rkt.dep deleted file mode 100644 index 0926afc..0000000 --- a/Semestr 2/racket/lista5/compiled/drracket/errortrace/props_rkt.dep +++ /dev/null @@ -1 +0,0 @@ -("7.6" racket ("e0347fa7e89f59bc97c197db02b440f666222428" . "8314027ed4c1c6fd9c412af77103e94790e59dd2") (collects #"errortrace" #"errortrace-key.rkt") (collects #"racket" #"main.rkt") (collects #"racket" #"runtime-config.rkt")) diff --git a/Semestr 2/racket/lista5/compiled/drracket/errortrace/props_rkt.zo b/Semestr 2/racket/lista5/compiled/drracket/errortrace/props_rkt.zo Binary files differdeleted file mode 100644 index eccc7f7..0000000 --- a/Semestr 2/racket/lista5/compiled/drracket/errortrace/props_rkt.zo +++ /dev/null diff --git a/Semestr 2/racket/lista5/compiled/drracket/errortrace/solution_rkt.dep b/Semestr 2/racket/lista5/compiled/drracket/errortrace/solution_rkt.dep deleted file mode 100644 index 9810b4c..0000000 --- a/Semestr 2/racket/lista5/compiled/drracket/errortrace/solution_rkt.dep +++ /dev/null @@ -1 +0,0 @@ -("7.6" racket ("ae3a6974cdd4582f480927d9968aad2f495b7fc4" . "33b0c09c14dce6a2115d810ac3d0f25a9dce3205") #"C:\\Users\\franc\\Documents\\lista5\\props.rkt" (collects #"errortrace" #"errortrace-key.rkt") (collects #"racket" #"main.rkt") (collects #"racket" #"runtime-config.rkt")) diff --git a/Semestr 2/racket/lista5/compiled/drracket/errortrace/solution_rkt.zo b/Semestr 2/racket/lista5/compiled/drracket/errortrace/solution_rkt.zo Binary files differdeleted file mode 100644 index ca1ab20..0000000 --- a/Semestr 2/racket/lista5/compiled/drracket/errortrace/solution_rkt.zo +++ /dev/null diff --git a/Semestr 2/racket/lista5/julita/compiled/drracket/errortrace/props_rkt.dep b/Semestr 2/racket/lista5/julita/compiled/drracket/errortrace/props_rkt.dep deleted file mode 100644 index 0926afc..0000000 --- a/Semestr 2/racket/lista5/julita/compiled/drracket/errortrace/props_rkt.dep +++ /dev/null @@ -1 +0,0 @@ -("7.6" racket ("e0347fa7e89f59bc97c197db02b440f666222428" . "8314027ed4c1c6fd9c412af77103e94790e59dd2") (collects #"errortrace" #"errortrace-key.rkt") (collects #"racket" #"main.rkt") (collects #"racket" #"runtime-config.rkt")) diff --git a/Semestr 2/racket/lista5/julita/compiled/drracket/errortrace/props_rkt.zo b/Semestr 2/racket/lista5/julita/compiled/drracket/errortrace/props_rkt.zo Binary files differdeleted file mode 100644 index eccc7f7..0000000 --- a/Semestr 2/racket/lista5/julita/compiled/drracket/errortrace/props_rkt.zo +++ /dev/null diff --git a/Semestr 2/racket/lista5/julita/props.rkt b/Semestr 2/racket/lista5/julita/props.rkt deleted file mode 100644 index 204b108..0000000 --- a/Semestr 2/racket/lista5/julita/props.rkt +++ /dev/null @@ -1,52 +0,0 @@ -#lang racket - -(provide conj conj-left conj-right conj? - disj disj-left disj-right disj? - neg neg-subf neg? - var?) - - -(define (conj p q) - (list 'conj p q)) - -(define (conj-left f) - (second f)) - -(define (conj-right f) - (third f)) - -(define (conj? t) - (and (list? t) - (= 3 (length t)) - (eq? 'conj (car t)))) - - -(define (disj p q) - (list 'disj p q)) - -(define (disj-left f) - (second f)) - -(define (disj-right f) - (third f)) - -(define (disj? t) - (and (list? t) - (= 3 (length t)) - (eq? 'disj (car t)))) - - -(define (neg x) - (list 'neg x)) - -(define (neg-subf x) - (second x)) - -(define (neg? t) - (and (list? t) - (= 2 (length t)) - (eq? 'neg (car t)))) - - -(define (var? t) - (symbol? t)) diff --git a/Semestr 2/racket/lista5/julita/solution.bak b/Semestr 2/racket/lista5/julita/solution.bak deleted file mode 100644 index b3dda94..0000000 --- a/Semestr 2/racket/lista5/julita/solution.bak +++ /dev/null @@ -1,164 +0,0 @@ -#lang racket - -;;Praca grupowa: -;;Dawid Holewa -;;Julita Osman -;;Aleksandra Stępniewska - -(require "props.rkt") -(provide falsifiable-cnf?) - -;Ponieważ formuła w cnf to konjunkcja klauzul -;a klauzula to alternatywa literałów -;to formuła w tej postaci jest tautologią -;wtedy i tylko wtedy gdy -;wszystkie klauzule w niej występujace sa zawsze prawdziwe (też są tautologiami) -;w przeciwnym razie, formulę taką da się zanegować; -;zatem nasz pomysł polega na tym, aby -;1)sprawdzic czy formula jest tautologia -;2)jesli tak to zwracamy fałsz -;3)wpp. pierwsza z klauzul, która nie jest tautologia -;(zatem jest mozliwa do zanegowania i jednocześnie neguje cała formułe w cnf) -;"przesuwamy" na początek listy reprezentującej cnf - -;dodatkowo to czy klauzula jest tautologią nie musimy sprawdzać wykonując wartościowanie -;możemy skorzystać z własności alternatywy -;klauzula bedzię zawsze pawdziwa tylko jeśli conajmniej jedna ze zmiennych występuje jednoczesnie ze swoją negacją - -;Falsifiable, która sprawdza każde wartościowania -;sprawdza 2^(ilosc zmiennych w całym wyrażeniu) wartosciowań, -;podczas gdy -;falsifiable, która opiera się na strukturze cnf -;przechodzi po cnf, aż do napotkania pierwszej -;mozliwej do zanegowania klauzuli -;zatem w najroszym przypadku przejdziemy po całym cnf -;ale zawsze wartosciowania negujacego formule szukamy tylko dla jedenej klauzuli -;zauważmy,ze jeśli formuła jest tautologią to oszczędzamy bardzo dużo czasu nie rozpartując wszystkich wartosciowań, tylko wypisujac odrazu falsz - -;Ta druga jest więc efektywniejsza - -(define (lit? f);; a lub ~a - (or (var? f) ;;a - (and (neg? f);;~a - (var? (neg-subf f))))) - -(define (lit-pos v) - v) - -(define (lit-neg v) - (neg v)) - -(define (lit-var l) ;;a-->a ~a-->a - (if (var? l) - l - (neg-subf l))) - -(define (lit-pos? l) - (var? l)) - -(define (to-nnf f) - (cond - [(var? f) (lit-pos f)] - [(neg? f) (to-nnf-neg (neg-subf f))] - [(conj? f) (conj (to-nnf (conj-left f)) - (to-nnf (conj-right f)))] - [(disj? f) (disj (to-nnf (disj-left f)) - (to-nnf (disj-right f)))])) - -(define (to-nnf-neg f) - (cond - [(var? f) (lit-neg f)] - [(neg? f) (to-nnf (neg-subf f))] - [(conj? f) (disj (to-nnf-neg (conj-left f)) - (to-nnf-neg (conj-right f)))] - [(disj? f) (conj (to-nnf-neg (disj-left f)) - (to-nnf-neg (disj-right f)))])) - -(define (mk-cnf xss) - (cons 'cnf xss)) - -(define (clause? f) - (and (list? f) - (andmap lit? f))) - -(define (cnf? f) - (and (pair? f) - (eq? 'cnf (car f)) - (list? (cdr f)) - (andmap clause? (cdr f)))) - -(define (to-cnf f) - (define (join xss yss) - (apply append (map (lambda (xs) (map (lambda (ys) (append xs ys)) yss)) xss))) - - (define (go f) - (cond - [(lit? f) (list (list f))] - [(conj? f) (append (go (conj-left f)) - (go (conj-right f)))] - [(disj? f) (join (go (disj-left f)) - (go (disj-right f)))])) - (mk-cnf (go f))) - - -(define (contain-both-literals? claus) - (define (aux to-check) - (cond [(empty? to-check) #f] - [(neg? (car to-check)) - (if (memq (neg-subf (car to-check)) claus) - #t - (aux (cdr to-check)))] - [else (aux (cdr to-check))])) - (aux claus)) - - -;; sprawdza czy ktorakolwiek z klauzul z listy reprezentujacej cnf -;; zawiera chociaz jedną parę zmiennej i jej negacji -;; zwraca liste pusta jesli cnf jest tautologia -;; zwraca liste z pierwsza klauzule nie bedaca tautologia "przesunieta" na poczatek (possible-to-neg) -(define (has-both big-set) - (define (possible-to-neg big-set x) ;;przesuwa x-ty element listy big-set na poczatek - (define x-ty (list-ref big-set x)) - (append (list x-ty) (remove x-ty big-set))) - (define (aux iter big-set) - (if (= iter (length big-set)) - '() - (if (contain-both-literals? (list-ref big-set iter)) ;;sprawdzamy czy iter klauzula cnf ma wystapienie a i ~a jednoczesnie - (aux (+ iter 1) big-set) - (possible-to-neg big-set iter)))) - (aux 0 (cdr big-set))) ;;(cdr big-set) bo to cnf czyli pierwszy element listy to edykieta 'cnf - - -(define (falsifiable-cnf? t) - (define tt (to-cnf (to-nnf t))) - (define f (has-both tt)) - (if (empty? f) - #f - (find-valuation f))) - - -(define (valuate f sigma) - (define (insigma-proc lista result) - (cond [(null? lista) result] - [(insigma-proc (cdr lista) (append result (list (lit-var(caar lista)))))])) - ;; insigma ---> lista zmiennych z wartosciowania pierwszej klauzuli: - (define insigma (insigma-proc sigma '())) - (define (aux insigma otherclause sigma) - (cond [(null? otherclause) sigma] - [(if (memq (lit-var (car otherclause)) insigma) - (aux insigma (cdr otherclause) sigma) - (if(neg? (car otherclause)) - (aux (append insigma (list(car otherclause))) - (cdr otherclause) - (append sigma (list(list (lit-var(car otherclause)) 1)))) - (aux (append insigma (list(car otherclause))) - (cdr otherclause) - (append sigma (list(list (car otherclause) 0))))))])) - (if (empty? f) - sigma - (valuate (cdr f) - (aux insigma (car f) sigma)))) - -(define (find-valuation f) - (valuate f '())) - diff --git a/Semestr 2/racket/lista5/julita/solution.rkt b/Semestr 2/racket/lista5/julita/solution.rkt deleted file mode 100644 index da87bf9..0000000 --- a/Semestr 2/racket/lista5/julita/solution.rkt +++ /dev/null @@ -1,164 +0,0 @@ -#lang racket - -;;Praca grupowa: -;;Dawid Holewa -;;Julita Osman -;;Aleksandra Stępniewska - -(require "props.rkt") -(provide falsifiable-cnf?) - -;Ponieważ formuła w cnf to konjunkcja klauzul -;a klauzula to alternatywa literałów -;to formuła w tej postaci jest tautologią -;wtedy i tylko wtedy gdy -;wszystkie klauzule w niej występujace sa zawsze prawdziwe (też są tautologiami) -;w przeciwnym razie, formulę taką da się zanegować; -;zatem nasz pomysł polega na tym, aby -;1)sprawdzic czy formula jest tautologia -;2)jesli tak to zwracamy fałsz -;3)wpp. pierwsza z klauzul, która nie jest tautologia -;(zatem jest mozliwa do zanegowania i jednocześnie neguje cała formułe w cnf) -;"przesuwamy" na początek listy reprezentującej cnf - -;dodatkowo to czy klauzula jest tautologią nie musimy sprawdzać wykonując wartościowanie -;możemy skorzystać z własności alternatywy -;klauzula bedzię zawsze pawdziwa tylko jeśli conajmniej jedna ze zmiennych występuje jednoczesnie ze swoją negacją - -;Falsifiable, która sprawdza każde wartościowania -;sprawdza 2^(ilosc zmiennych w całym wyrażeniu) wartosciowań, -;podczas gdy -;falsifiable, która opiera się na strukturze cnf -;przechodzi po cnf, aż do napotkania pierwszej -;mozliwej do zanegowania klauzuli -;zatem w najroszym przypadku przejdziemy po całym cnf -;ale zawsze wartosciowania negujacego formule szukamy tylko dla jedenej klauzuli -;zauważmy,ze jeśli formuła jest tautologią to oszczędzamy bardzo dużo czasu nie rozpartując wszystkich wartosciowań, tylko wypisujac odrazu falsz - -;Ta druga jest więc efektywniejsza - -(define (lit? f);; a lub ~a - (or (var? f) ;;a - (and (neg? f);;~a - (var? (neg-subf f))))) - -(define (lit-pos v) - v) - -(define (lit-neg v) - (neg v)) - -(define (lit-var l) ;;a-->a ~a-->a - (if (var? l) - l - (neg-subf l))) - -(define (lit-pos? l) - (var? l)) - -(define (to-nnf f) - (cond - [(var? f) (lit-pos f)] - [(neg? f) (to-nnf-neg (neg-subf f))] - [(conj? f) (conj (to-nnf (conj-left f)) - (to-nnf (conj-right f)))] - [(disj? f) (disj (to-nnf (disj-left f)) - (to-nnf (disj-right f)))])) - -(define (to-nnf-neg f) - (cond - [(var? f) (lit-neg f)] - [(neg? f) (to-nnf (neg-subf f))] - [(conj? f) (disj (to-nnf-neg (conj-left f)) - (to-nnf-neg (conj-right f)))] - [(disj? f) (conj (to-nnf-neg (disj-left f)) - (to-nnf-neg (disj-right f)))])) - -(define (mk-cnf xss) - (cons 'cnf xss)) - -(define (clause? f) - (and (list? f) - (andmap lit? f))) - -(define (cnf? f) - (and (pair? f) - (eq? 'cnf (car f)) - (list? (cdr f)) - (andmap clause? (cdr f)))) - -(define (to-cnf f) - (define (join xss yss) - (apply append (map (lambda (xs) (map (lambda (ys) (append xs ys)) yss)) xss))) - - (define (go f) - (cond - [(lit? f) (list (list f))] - [(conj? f) (append (go (conj-left f)) - (go (conj-right f)))] - [(disj? f) (join (go (disj-left f)) - (go (disj-right f)))])) - (mk-cnf (go f))) - - -(define (contain-both-literals? claus) - (define (aux to-check) - (cond [(empty? to-check) #f] - [(neg? (car to-check)) - (if (memq (neg-subf (car to-check)) claus) - #t - (aux (cdr to-check)))] - [else (aux (cdr to-check))])) - (aux claus)) - - -;; sprawdza czy ktorakolwiek z klauzul z listy reprezentujacej cnf -;; zawiera chociaz jedną parę zmiennej i jej negacji -;; zwraca liste pusta jesli cnf jest tautologia -;; zwraca liste z pierwsza klauzule nie bedaca tautologia "przesunieta" na poczatek (possible-to-neg) -(define (has-both big-set) - (define (possible-to-neg big-set x) ;;przesuwa x-ty element listy big-set na poczatek - (define x-ty (list-ref big-set x)) - (append (list x-ty) (remove x-ty big-set))) - (define (aux iter big-set) - (if (= iter (length big-set)) - '() - (if (contain-both-literals? (list-ref big-set iter)) ;;sprawdzamy czy iter klauzula cnf ma wystapienie a i ~a jednoczesnie - (aux (+ iter 1) big-set) - (possible-to-neg big-set iter)))) - (aux 0 (cdr big-set))) ;;(cdr big-set) bo to cnf czyli pierwszy element listy to edykieta 'cnf - - -(define (falsifiable-cnf? t) - (define tt (to-cnf (to-nnf t))) - (define f (has-both tt)) - (if (empty? f) - #f - (find-valuation f))) - - -(define (valuate f sigma) - (define (insigma-proc lista result) - (cond [(null? lista) result] - [(insigma-proc (cdr lista) (append result (list (lit-var(caar lista)))))])) - ;; insigma ---> lista zmiennych z wartosciowania pierwszej klauzuli: - (define insigma (insigma-proc sigma '())) - (define (aux insigma otherclause sigma) - (cond [(null? otherclause) sigma] - [(if (memq (lit-var (car otherclause)) insigma) - (aux insigma (cdr otherclause) sigma) - (if(neg? (car otherclause)) - (aux (append insigma (list(car otherclause))) - (cdr otherclause) - (append sigma (list(list (lit-var(car otherclause)) true)))) - (aux (append insigma (list(car otherclause))) - (cdr otherclause) - (append sigma (list(list (car otherclause) false))))))])) - (if (empty? f) - sigma - (valuate (cdr f) - (aux insigma (car f) sigma)))) - -(define (find-valuation f) - (valuate f '())) - diff --git a/Semestr 2/racket/lista5/prop.rkt b/Semestr 2/racket/lista5/prop.rkt deleted file mode 100644 index 6f1f7b4..0000000 --- a/Semestr 2/racket/lista5/prop.rkt +++ /dev/null @@ -1 +0,0 @@ -#lang racket diff --git a/Semestr 2/racket/lista5/props.bak b/Semestr 2/racket/lista5/props.bak deleted file mode 100644 index 1a5659a..0000000 --- a/Semestr 2/racket/lista5/props.bak +++ /dev/null @@ -1,71 +0,0 @@ -#lang racket - -(provide var? - neg? - conj? - disj? - conj - disj - neg - conj-left - conj-right - disj-right - disj-left - neg-subf) -; (require "solution.rkt") - -(define (var? t) (symbol? t)) - -(define (neg? t) - (and (list? t) - (= 2 (length t)) - (eq? 'neg (car t)))) - -(define (conj? t) - (and (list? t) - (= 3 (length t)) - (eq? 'conj (car t)))) - -(define (disj? t) - (and (list? t) - (= 3 (length t)) - (eq? 'disj (car t)))) - -(define (lit? t) - (or (var? t) - (and (neg? t) - (var? (neg-subf t))))) - -(define (conj left right) - (list 'conj left right)) - -(define (disj left right) - (list 'disj left right)) - -(define (neg f) - (list 'neg f)) - -(define (conj-left f) - (if (conj? f) - (cadr f) - (error "Złe dane ze znacznikiem -- CONJ-LEFT" f))) - -(define (conj-right f) - (if (conj? f) - (caddr f) - (error "Złe dane ze znacznikiem -- CONJ-RIGHT" f))) - -(define (disj-left f) - (if (disj? f) - (cadr f) - (error "Złe dane ze znacznikiem -- DISJ-LEFT" f))) - -(define (disj-right f) - (if (disj? f) - (caddr f) - (error "Złe dane ze znacznikiem -- DISJ-RIGHT" f))) - -(define (neg-subf f) - (if (neg? f) - (cadr f) - (error "Złe dane ze znacznikiem -- NEG-FORM" f))) diff --git a/Semestr 2/racket/lista5/props.rkt b/Semestr 2/racket/lista5/props.rkt deleted file mode 100644 index 204b108..0000000 --- a/Semestr 2/racket/lista5/props.rkt +++ /dev/null @@ -1,52 +0,0 @@ -#lang racket - -(provide conj conj-left conj-right conj? - disj disj-left disj-right disj? - neg neg-subf neg? - var?) - - -(define (conj p q) - (list 'conj p q)) - -(define (conj-left f) - (second f)) - -(define (conj-right f) - (third f)) - -(define (conj? t) - (and (list? t) - (= 3 (length t)) - (eq? 'conj (car t)))) - - -(define (disj p q) - (list 'disj p q)) - -(define (disj-left f) - (second f)) - -(define (disj-right f) - (third f)) - -(define (disj? t) - (and (list? t) - (= 3 (length t)) - (eq? 'disj (car t)))) - - -(define (neg x) - (list 'neg x)) - -(define (neg-subf x) - (second x)) - -(define (neg? t) - (and (list? t) - (= 2 (length t)) - (eq? 'neg (car t)))) - - -(define (var? t) - (symbol? t)) diff --git a/Semestr 2/racket/lista5/skrr/solution.bak b/Semestr 2/racket/lista5/skrr/solution.bak deleted file mode 100644 index 72c7f36..0000000 --- a/Semestr 2/racket/lista5/skrr/solution.bak +++ /dev/null @@ -1,135 +0,0 @@ -#lang racket - -(provide falsifiable-cnf?) -(require "props.rkt") - -(define (prop? f) - (or (var? f) - (and (neg? f) - (prop? (neg-subf f))) - (and (disj? f) - (prop? (disj-left f)) - (prop? (disj-right f))) - (and (conj? f) - (prop? (conj-left f)) - (prop? (conj-right f))))) - -(define (lit-var f) - (cond [(var? f) f] - [(neg? f) (neg-subf f)] - [else (error "Złe dane ze znacznikiem -- LIT-VAR" f)])) - -(define (free-vars f) - (cond [(null? f) null] - [(var? f) (list f)] - [(neg? f) (free-vars (neg-subf f))] - [(conj? f) (append (free-vars (conj-left f)) - (free-vars (conj-right f)))] - [(disj? f) (append (free-vars (disj-left f)) - (free-vars (disj-right f)))] - [else (error "Zła formula -- FREE-VARS" f)])) - -(define (gen-vals xs) - (if (null? xs) - (list null) - (let* - ((vss (gen-vals (cdr xs))) - (x (car xs)) - (vst (map (λ (vs) (cons (list x true) vs)) vss)) - (vsf (map (λ (vs) (cons (list x false) vs)) vss))) - (append vst vsf)))) - -(define (eval-formula f evaluation) - (cond [(var? f) - (let ((val (assoc f evaluation))) - (if (not val) - (error "Zmienna wolna nie wystepuje w wartościowaniu -- EVAL-FORMULA" f evaluation) - (cadr val)))] - [(neg? f) (not (eval-formula (neg-subf f) evaluation))] - [(disj? f) (or (eval-formula (disj-left f) evaluation) - (eval-formula (disj-right f) evaluation))] - [(conj? f) (and (eval-formula (conj-left f) evaluation) - (eval-formula (conj-right f) evaluation))] - [else (error "Zła formuła -- EVAL-FORMULA" f evaluation)])) - -(define (falsifiable-eval? f) - (let* ((evaluations (gen-vals (free-vars f))) - (results (map (λ (evaluation) (eval-formula f evaluation)) evaluations))) - (ormap false? results))) - -(define (nff? f) - (cond [(lit? f) true] - [(neg? f) false] - [(conj? f) (and (nff? (conj-left f)) - (nff? (conj-right f)))] - [(disj? f) (and (nff? (disj-left f)) - (nff? (disj-right f)))] - [else (error "Zła formuła -- NFF?" f)])) - -(define (convert-to-nnf f) - (cond [(lit? f) f] - [(neg? f) (convert-negation (neg-subf f))] - [(conj? f) (conj (convert-to-nnf (conj-left f)) - (convert-to-nnf (conj-right f)))] - [(disj? f) (disj (convert-to-nnf (disj-left f)) - (convert-to-nnf (disj-right f)))] - [else (error "Zła formuła -- CONVERT" f)])) - -(define (convert-negation f) - (cond [(lit? f) - (if (var? f) - (neg f) - (neg-subf f))] - [(neg? f) (convert-to-nnf (neg-subf f))] - [(conj? f) (disj (convert-negation (conj-left f)) - (convert-negation (conj-right f)))] - [(disj? f) (conj (convert-negation (disj-left f)) - (convert-negation (disj-right f)))] - [else (error "Zła formuła -- CONVERT-NEGATION" f)])) - -(define (clause? x) - (and (list? x) - (andmap lit? x))) - -(define (clause-empty? x) - (and (clause? x) - (null? x))) - -(define (cnf? x) - (and (list? x) - (andmap clause? x))) - -(define (flatmap proc seq) - (foldl append null (map proc seq))) - -(define (convert-to-cnf f) - (define (convert f) - (cond [(lit? f) (list (list f))] - [(conj? f) (append (convert-to-cnf (conj-left f)) - (convert-to-cnf (conj-right f)))] - [(disj? f) - (let ((clause-left (convert-to-cnf (disj-left f))) - (clause-right (convert-to-cnf (disj-right f)))) - (flatmap (λ (clause) - (map (λ (clause2) - (append clause2 clause)) clause-left)) - clause-right))])) - (convert (convert-to-nnf f))) - -(define (falsifiable-clause? clause) - (cond [(clause-empty? clause) true] - [(lit? (findf (λ (l) (equal? - l - (convert-to-nnf (neg (car clause))))) - clause)) false] - [else (falsifiable-clause? (cdr clause))])) - -(define (falsifiable-cnf? f) - (define (neg-value lit) - (if (var? lit) - (list lit false) - (list (neg-subf lit) true))) - (ormap (λ (clause) (if (falsifiable-clause? clause) - (map neg-value clause) - false)) - (convert-to-cnf f)))
\ No newline at end of file diff --git a/Semestr 2/racket/lista5/skrr/solution.rkt b/Semestr 2/racket/lista5/skrr/solution.rkt deleted file mode 100644 index e8efbc9..0000000 --- a/Semestr 2/racket/lista5/skrr/solution.rkt +++ /dev/null @@ -1,88 +0,0 @@ -#lang racket - -(require "props.rkt") -(provide falsifiable-cnf?) - -(define (lit? f) - (or (var? f) - (and (neg? f) - (var? (neg-subf f))))) - -(define (lit-pos v) - v) - -(define (lit-neg v) - (neg v)) - -(define (lit-var l) - (if (var? l) - l - (neg-subf l))) - -(define (lit-pos? l) - (var? l)) - -(define (to-nnf f) - (cond - [(var? f) (lit-pos f)] - [(neg? f) (to-nnf-neg (neg-subf f))] - [(conj? f) (conj (to-nnf (conj-left f)) - (to-nnf (conj-right f)))] - [(disj? f) (disj (to-nnf (disj-left f)) - (to-nnf (disj-right f)))])) - -(define (to-nnf-neg f) - (cond - [(var? f) (lit-neg f)] - [(neg? f) (to-nnf (neg-subf f))] - [(conj? f) (disj (to-nnf-neg (conj-left f)) - (to-nnf-neg (conj-right f)))] - [(disj? f) (conj (to-nnf-neg (disj-left f)) - (to-nnf-neg (disj-right f)))])) - -(define (mk-cnf xss) - (cons 'cnf xss)) - -(define (clause? f) - (and (list? f) - (andmap lit? f))) - -(define (cnf? f) - (and (pair? f) - (eq? 'cnf (car f)) - (list? (cdr f)) - (andmap clause? (cdr f)))) - -(define (to-cnf f) - (define (join xss yss) - (apply append (map (lambda (xs) (map (lambda (ys) (append xs ys)) yss)) xss))) - (define (go f) - (cond - [(lit? f) (list (list f))] - [(conj? f) (append (go (conj-left f)) - (go (conj-right f)))] - [(disj? f) (join (go (disj-left f)) - (go (disj-right f)))])) - (mk-cnf (go f))) - -(define (clause-empty? x) - (and (clause? x) - (null? x))) - -(define (falsifiable-clause? clause) - (cond [(clause-empty? clause) true] - [(lit? (findf (λ (l) (equal? - l - (to-nnf (neg (car clause))))) - clause)) false] - [else (falsifiable-clause? (cdr clause))])) - -(define (falsifiable-cnf? f) - (define (neg-value lit) - (if (var? lit) - (list lit false) - (list (neg-subf lit) true))) - (ormap (λ (clause) (if (falsifiable-clause? clause) - (map neg-value clause) - false)) - (convert-to-cnf f)))
\ No newline at end of file diff --git a/Semestr 2/racket/lista5/sol2.rkt b/Semestr 2/racket/lista5/sol2.rkt deleted file mode 100644 index d037472..0000000 --- a/Semestr 2/racket/lista5/sol2.rkt +++ /dev/null @@ -1,90 +0,0 @@ -#lang racket -(provide falsifiable-cnf?) (require "props.rkt") - - -(define (falsifiable-cnf? p) - ;literał - (define (lit? p) - (or (var? p) - (and (neg? p) (var? (neg-subf p))) - )) - - (define (lit-pos? p) - (if (lit? p) - (var? p) - (error "not a literal" p) - )) - - (define (lit-var p) - (cond - [(not (lit? p)) (error "not a literal" p)] - [(lit-pos? p) p] - [else (neg-subf p)] - )) - - (define (contr p) - (if (lit? p) - (if (neg? p) (neg-subf p) (neg p)) - (error "not a literal" p) - )) - - ;konwertowanie - (define (convert-to-cnf p) - (define (convert-to-nnf p) - (cond - [(lit? p) p] - [(and (neg? p) (conj? (neg-subf p))) - (let ((A (neg-subf p))) - (disj (convert-to-nnf (neg (conj-left A))) (convert-to-nnf (neg (conj-right A)))))] - [(and (neg? p) (disj? (neg-subf p))) - (let ((A (neg-subf p))) - (conj (convert-to-nnf (neg (disj-left A))) (convert-to-nnf (neg (disj-right A)))))] - [(and (neg? p) (neg? (neg-subf p))) (convert-to-nnf (neg-subf (neg-subf p)))] - [(conj? p) (conj (convert-to-nnf (conj-right p)) (convert-to-nnf (conj-left p)))] - [(disj? p) (disj (convert-to-nnf (disj-right p)) (convert-to-nnf (disj-left p)))] - [else (error "not a proposition" p)])) - - (define (flatmap proc seq) - (foldr append null (map proc seq))) - - (define (merge a b) - (flatmap (lambda (c) (map (lambda (c2) (append c c2)) b)) a)) - - (define (convert p) - (cond - [(lit? p) (list (list p))] - [(conj? p) (append (convert (conj-left p)) (convert (conj-right p)))] - [(disj? p) (let* ((L (convert (disj-left p))) (R (convert (disj-right p)))) - (merge L R))] - [else (error "it should never be here" p)] - )) - - (map (lambda (c) (remove-duplicates c)) (convert (convert-to-nnf p)))) - - ;prawdziwa funkcja - (define cnf (convert-to-cnf p)) - - (define (falsifiable-clause? c) - (cond - [(null? c) #t] - [(eq? #f (member (contr (car c)) c)) (falsifiable-clause? (cdr c))] - [else #f] - )) - - (define (falsified-clause c) - (if (null? c) - null - (cons (list (lit-var (car c)) (not (lit-pos? (car c)))) (falsified-clause (cdr c))) - )) - - (define (falsified-val p) - (cond - [(null? p) false] - [(falsifiable-clause? (car p)) (falsified-clause (car p))] - [else (falsified-val (cdr p))] - ) - ) - (falsified-val cnf)) - - -;złożoność wykładnicza tak jak falsible-eval ale często w praktyce szybsza jak nie ma za dużo alternatyw.
\ No newline at end of file diff --git a/Semestr 2/racket/lista5/solution.bak b/Semestr 2/racket/lista5/solution.bak deleted file mode 100644 index 72c7f36..0000000 --- a/Semestr 2/racket/lista5/solution.bak +++ /dev/null @@ -1,135 +0,0 @@ -#lang racket - -(provide falsifiable-cnf?) -(require "props.rkt") - -(define (prop? f) - (or (var? f) - (and (neg? f) - (prop? (neg-subf f))) - (and (disj? f) - (prop? (disj-left f)) - (prop? (disj-right f))) - (and (conj? f) - (prop? (conj-left f)) - (prop? (conj-right f))))) - -(define (lit-var f) - (cond [(var? f) f] - [(neg? f) (neg-subf f)] - [else (error "Złe dane ze znacznikiem -- LIT-VAR" f)])) - -(define (free-vars f) - (cond [(null? f) null] - [(var? f) (list f)] - [(neg? f) (free-vars (neg-subf f))] - [(conj? f) (append (free-vars (conj-left f)) - (free-vars (conj-right f)))] - [(disj? f) (append (free-vars (disj-left f)) - (free-vars (disj-right f)))] - [else (error "Zła formula -- FREE-VARS" f)])) - -(define (gen-vals xs) - (if (null? xs) - (list null) - (let* - ((vss (gen-vals (cdr xs))) - (x (car xs)) - (vst (map (λ (vs) (cons (list x true) vs)) vss)) - (vsf (map (λ (vs) (cons (list x false) vs)) vss))) - (append vst vsf)))) - -(define (eval-formula f evaluation) - (cond [(var? f) - (let ((val (assoc f evaluation))) - (if (not val) - (error "Zmienna wolna nie wystepuje w wartościowaniu -- EVAL-FORMULA" f evaluation) - (cadr val)))] - [(neg? f) (not (eval-formula (neg-subf f) evaluation))] - [(disj? f) (or (eval-formula (disj-left f) evaluation) - (eval-formula (disj-right f) evaluation))] - [(conj? f) (and (eval-formula (conj-left f) evaluation) - (eval-formula (conj-right f) evaluation))] - [else (error "Zła formuła -- EVAL-FORMULA" f evaluation)])) - -(define (falsifiable-eval? f) - (let* ((evaluations (gen-vals (free-vars f))) - (results (map (λ (evaluation) (eval-formula f evaluation)) evaluations))) - (ormap false? results))) - -(define (nff? f) - (cond [(lit? f) true] - [(neg? f) false] - [(conj? f) (and (nff? (conj-left f)) - (nff? (conj-right f)))] - [(disj? f) (and (nff? (disj-left f)) - (nff? (disj-right f)))] - [else (error "Zła formuła -- NFF?" f)])) - -(define (convert-to-nnf f) - (cond [(lit? f) f] - [(neg? f) (convert-negation (neg-subf f))] - [(conj? f) (conj (convert-to-nnf (conj-left f)) - (convert-to-nnf (conj-right f)))] - [(disj? f) (disj (convert-to-nnf (disj-left f)) - (convert-to-nnf (disj-right f)))] - [else (error "Zła formuła -- CONVERT" f)])) - -(define (convert-negation f) - (cond [(lit? f) - (if (var? f) - (neg f) - (neg-subf f))] - [(neg? f) (convert-to-nnf (neg-subf f))] - [(conj? f) (disj (convert-negation (conj-left f)) - (convert-negation (conj-right f)))] - [(disj? f) (conj (convert-negation (disj-left f)) - (convert-negation (disj-right f)))] - [else (error "Zła formuła -- CONVERT-NEGATION" f)])) - -(define (clause? x) - (and (list? x) - (andmap lit? x))) - -(define (clause-empty? x) - (and (clause? x) - (null? x))) - -(define (cnf? x) - (and (list? x) - (andmap clause? x))) - -(define (flatmap proc seq) - (foldl append null (map proc seq))) - -(define (convert-to-cnf f) - (define (convert f) - (cond [(lit? f) (list (list f))] - [(conj? f) (append (convert-to-cnf (conj-left f)) - (convert-to-cnf (conj-right f)))] - [(disj? f) - (let ((clause-left (convert-to-cnf (disj-left f))) - (clause-right (convert-to-cnf (disj-right f)))) - (flatmap (λ (clause) - (map (λ (clause2) - (append clause2 clause)) clause-left)) - clause-right))])) - (convert (convert-to-nnf f))) - -(define (falsifiable-clause? clause) - (cond [(clause-empty? clause) true] - [(lit? (findf (λ (l) (equal? - l - (convert-to-nnf (neg (car clause))))) - clause)) false] - [else (falsifiable-clause? (cdr clause))])) - -(define (falsifiable-cnf? f) - (define (neg-value lit) - (if (var? lit) - (list lit false) - (list (neg-subf lit) true))) - (ormap (λ (clause) (if (falsifiable-clause? clause) - (map neg-value clause) - false)) - (convert-to-cnf f)))
\ No newline at end of file diff --git a/Semestr 2/racket/lista5/solution.rkt b/Semestr 2/racket/lista5/solution.rkt deleted file mode 100644 index 67964d8..0000000 --- a/Semestr 2/racket/lista5/solution.rkt +++ /dev/null @@ -1,140 +0,0 @@ -#lang racket - -(provide falsifiable-cnf?) -(require "props.rkt") - -(define (prop? f) - (or (var? f) - (and (neg? f) - (prop? (neg-subf f))) - (and (disj? f) - (prop? (disj-left f)) - (prop? (disj-right f))) - (and (conj? f) - (prop? (conj-left f)) - (prop? (conj-right f))))) - -(define (lit? t) - (or (var? t) - (and (neg? t) - (var? (neg-subf t))))) - -(define (lit-var f) - (cond [(var? f) f] - [(neg? f) (neg-subf f)] - [else (error "Złe dane ze znacznikiem -- LIT-VAR" f)])) - -(define (free-vars f) - (cond [(null? f) null] - [(var? f) (list f)] - [(neg? f) (free-vars (neg-subf f))] - [(conj? f) (append (free-vars (conj-left f)) - (free-vars (conj-right f)))] - [(disj? f) (append (free-vars (disj-left f)) - (free-vars (disj-right f)))] - [else (error "Zła formula -- FREE-VARS" f)])) - -(define (gen-vals xs) - (if (null? xs) - (list null) - (let* - ((vss (gen-vals (cdr xs))) - (x (car xs)) - (vst (map (λ (vs) (cons (list x true) vs)) vss)) - (vsf (map (λ (vs) (cons (list x false) vs)) vss))) - (append vst vsf)))) - -(define (eval-formula f evaluation) - (cond [(var? f) - (let ((val (assoc f evaluation))) - (if (not val) - (error "Zmienna wolna nie wystepuje w wartościowaniu -- EVAL-FORMULA" f evaluation) - (cadr val)))] - [(neg? f) (not (eval-formula (neg-subf f) evaluation))] - [(disj? f) (or (eval-formula (disj-left f) evaluation) - (eval-formula (disj-right f) evaluation))] - [(conj? f) (and (eval-formula (conj-left f) evaluation) - (eval-formula (conj-right f) evaluation))] - [else (error "Zła formuła -- EVAL-FORMULA" f evaluation)])) - -(define (falsifiable-eval? f) - (let* ((evaluations (gen-vals (free-vars f))) - (results (map (λ (evaluation) (eval-formula f evaluation)) evaluations))) - (ormap false? results))) - -(define (nff? f) - (cond [(lit? f) true] - [(neg? f) false] - [(conj? f) (and (nff? (conj-left f)) - (nff? (conj-right f)))] - [(disj? f) (and (nff? (disj-left f)) - (nff? (disj-right f)))] - [else (error "Zła formuła -- NFF?" f)])) - -(define (convert-to-nnf f) - (cond [(lit? f) f] - [(neg? f) (convert-negation (neg-subf f))] - [(conj? f) (conj (convert-to-nnf (conj-left f)) - (convert-to-nnf (conj-right f)))] - [(disj? f) (disj (convert-to-nnf (disj-left f)) - (convert-to-nnf (disj-right f)))] - [else (error "Zła formuła -- CONVERT" f)])) - -(define (convert-negation f) - (cond [(lit? f) - (if (var? f) - (neg f) - (neg-subf f))] - [(neg? f) (convert-to-nnf (neg-subf f))] - [(conj? f) (disj (convert-negation (conj-left f)) - (convert-negation (conj-right f)))] - [(disj? f) (conj (convert-negation (disj-left f)) - (convert-negation (disj-right f)))] - [else (error "Zła formuła -- CONVERT-NEGATION" f)])) - -(define (clause? x) - (and (list? x) - (andmap lit? x))) - -(define (clause-empty? x) - (and (clause? x) - (null? x))) - -(define (cnf? x) - (and (list? x) - (andmap clause? x))) - -(define (flatmap proc seq) - (foldl append null (map proc seq))) - -(define (convert-to-cnf f) - (define (convert f) - (cond [(lit? f) (list (list f))] - [(conj? f) (append (convert-to-cnf (conj-left f)) - (convert-to-cnf (conj-right f)))] - [(disj? f) - (let ((clause-left (convert-to-cnf (disj-left f))) - (clause-right (convert-to-cnf (disj-right f)))) - (flatmap (λ (clause) - (map (λ (clause2) - (append clause2 clause)) clause-left)) - clause-right))])) - (map (lambda (clause) (remove-duplicates clause)) (convert (convert-to-nnf f)))) - -(define (falsifiable-clause? clause) - (cond [(clause-empty? clause) true] - [(lit? (findf (λ (l) (equal? - l - (convert-to-nnf (neg (car clause))))) - clause)) false] - [else (falsifiable-clause? (cdr clause))])) - -(define (falsifiable-cnf? f) - (define (neg-value lit) - (if (var? lit) - (list lit false) - (list (neg-subf lit) true))) - (ormap (λ (clause) (if (falsifiable-clause? clause) - (map neg-value clause) - false)) - (convert-to-cnf f)))
\ No newline at end of file diff --git a/Semestr 2/racket/lista5/xd.bak b/Semestr 2/racket/lista5/xd.bak deleted file mode 100644 index d814e10..0000000 --- a/Semestr 2/racket/lista5/xd.bak +++ /dev/null @@ -1,4 +0,0 @@ -#lang racket - -(require "solution.rkt") - diff --git a/Semestr 2/racket/lista5/xd.rkt b/Semestr 2/racket/lista5/xd.rkt deleted file mode 100644 index 64ce78c..0000000 --- a/Semestr 2/racket/lista5/xd.rkt +++ /dev/null @@ -1,4 +0,0 @@ -#lang racket - -(require "solution.rkt") -(require "props.rkt") diff --git a/Semestr 2/racket/lista6/lista8/kappa.py b/Semestr 2/racket/lista6/lista8/kappa.py deleted file mode 100644 index f359d5c..0000000 --- a/Semestr 2/racket/lista6/lista8/kappa.py +++ /dev/null @@ -1,13 +0,0 @@ -import pylab
-
-a = int(input("podaj liczbe: "))
-b = int(input("podaj liczbe: "))
-
-x = range(-10, 11)
-y = []
-for i in x:
- y.append(a * i + b)
-pylab.plot(x, y)
-pylab.title('Wykres f(x) = a*x - b')
-pylab.grid(True)
-pylab.show()
diff --git a/Semestr 2/racket/lista6/lista8/zad1.bak b/Semestr 2/racket/lista6/lista8/zad1.bak deleted file mode 100644 index 0960f21..0000000 --- a/Semestr 2/racket/lista6/lista8/zad1.bak +++ /dev/null @@ -1,98 +0,0 @@ -#lang racket - -; Do let-env.rkt dodajemy wartosci boolowskie -; -; Miejsca, ktore sie zmienily oznaczone sa przez !!! - -; --------- ; -; Wyrazenia ; -; --------- ; - -(struct const (val) #:transparent) -(struct binop (op l r) #:transparent) -(struct var-expr (id) #:transparent) -(struct let-expr (id e1 e2) #:transparent) -(struct if-expr (eb et ef) #:transparent) - -(define (expr? e) - (match e - [(const n) (or (number? n) (boolean? n))] ; <----------------- !!! - [(binop op l r) (and (symbol? op) (expr? l) (expr? r))] - [(var-expr x) (symbol? x)] - [(let-expr x e1 e2) - (and (symbol? x) (expr? e1) (expr? e2))] - [(if-expr eb et ef) ; <--------------------------------------- !!! - (and (expr? eb) (expr? et) (expr? ef))] - [_ false])) - -(define (parse q) - (cond - [(number? q) (const q)] - [(eq? q 'true) (const true)] ; <---------------------------- !!! - [(eq? q 'false) (const false)] ; <---------------------------- !!! - [(symbol? q) (var-expr q)] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let)) - (let-expr (first (second q)) - (parse (second (second q))) - (parse (third q)))] - [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if)) ; <--- !!! - (if-expr (parse (second q)) - (parse (third q)) - (parse (fourth q)))] - [(and (list? q) (eq? (length q) 3) (symbol? (first q))) - (binop (first q) - (parse (second q)) - (parse (third q)))])) - -(define (test-parse) (parse '(let [x (+ 2 2)] (+ x 1)))) - -; ---------- ; -; Srodowiska ; -; ---------- ; - -(struct environ (xs)) - -(define env-empty (environ null)) -(define (env-add x v env) - (environ (cons (cons x v) (environ-xs env)))) -(define (env-lookup x env) - (define (assoc-lookup xs) - (cond [(null? xs) (error "Unknown identifier" x)] - [(eq? x (car (car xs))) (cdr (car xs))] - [else (assoc-lookup (cdr xs))])) - (assoc-lookup (environ-xs env))) - -; --------- ; -; Ewaluacja ; -; --------- ; - -(define (value? v) - (or (number? v) (boolean? v))) - -(define (op->proc op) - (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo] ; <----------- !!! - ['= =] ['> >] ['>= >=] ['< <] ['<= <=] - ['and (lambda (x y) (and x y))] - ['or (lambda (x y) (or x y))])) - -(define (eval-env e env) - (match e - [(const n) n] - [(binop op l r) ((op->proc op) (eval-env l env) - (eval-env r env))] - [(let-expr x e1 e2) - (eval-env e2 (env-add x (eval-env e1 env) env))] - [(var-expr x) (env-lookup x env)] - [(if-expr eb et ef) (if (eval-env eb env) ; <----------------- !!! - (eval-env et env) - (eval-env ef env))])) - -(define (eval e) (eval-env e env-empty)) - -(define program - '(if (or (< (% 123 10) 5) - true) - (+ 2 3) - (/ 2 0))) - -(define (test-eval) (eval (parse program)))
\ No newline at end of file diff --git a/Semestr 2/racket/lista6/lista8/zad1.rkt b/Semestr 2/racket/lista6/lista8/zad1.rkt deleted file mode 100644 index 1cd6b0b..0000000 --- a/Semestr 2/racket/lista6/lista8/zad1.rkt +++ /dev/null @@ -1,104 +0,0 @@ -#lang racket - -; Do let-env.rkt dodajemy wartosci boolowskie -; -; Miejsca, ktore sie zmienily oznaczone sa przez !!! - -; --------- ; -; Wyrazenia ; -; --------- ; - -(struct const (val) #:transparent) -(struct binop (op l r) #:transparent) -(struct var-expr (id) #:transparent) -(struct let-expr (id e1 e2) #:transparent) -(struct if-expr (eb et ef) #:transparent) - -(define (expr? e) - (match e - [(const n) (or (number? n) (boolean? n))] ; <----------------- !!! - [(binop op l r) (and (symbol? op) (expr? l) (expr? r))] - [(var-expr x) (symbol? x)] - [(let-expr x e1 e2) - (and (symbol? x) (expr? e1) (expr? e2))] - [(if-expr eb et ef) ; <--------------------------------------- !!! - (and (expr? eb) (expr? et) (expr? ef))] - [_ false])) - -(define (parse q) - (cond - [(number? q) (const q)] - [(eq? q 'true) (const true)] ; <---------------------------- !!! - [(eq? q 'false) (const false)] ; <---------------------------- !!! - [(symbol? q) (var-expr q)] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let)) - (let-expr (first (second q)) - (parse (second (second q))) - (parse (third q)))] - [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if)) ; <--- !!! - (if-expr (parse (second q)) - (parse (third q)) - (parse (fourth q)))] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'and)) - (if-expr (parse (second q)) - (parse (third q)) - (const false))] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'or)) - (if-expr (parse (second q)) - (const true) - (parse (third q)))] - [(and (list? q) (eq? (length q) 3) (symbol? (first q))) - (binop (first q) - (parse (second q)) - (parse (third q)))])) - -(define (test-parse) (parse '(let [x (+ 2 2)] (+ x 1)))) - -; ---------- ; -; Srodowiska ; -; ---------- ; - -(struct environ (xs)) - -(define env-empty (environ null)) -(define (env-add x v env) - (environ (cons (cons x v) (environ-xs env)))) -(define (env-lookup x env) - (define (assoc-lookup xs) - (cond [(null? xs) (error "Unknown identifier" x)] - [(eq? x (car (car xs))) (cdr (car xs))] - [else (assoc-lookup (cdr xs))])) - (assoc-lookup (environ-xs env))) - -; --------- ; -; Ewaluacja ; -; --------- ; - -(define (value? v) - (or (number? v) (boolean? v))) - -(define (op->proc op) - (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo] ; <----------- !!! - ['= =] ['> >] ['>= >=] ['< <] ['<= <=])) - -(define (eval-env e env) - (match e - [(const n) n] - [(binop op l r) ((op->proc op) (eval-env l env) - (eval-env r env))] - [(let-expr x e1 e2) - (eval-env e2 (env-add x (eval-env e1 env) env))] - [(var-expr x) (env-lookup x env)] - [(if-expr eb et ef) (if (eval-env eb env) ; <----------------- !!! - (eval-env et env) - (eval-env ef env))])) - -(define (eval e) (eval-env e env-empty)) - -(define program - '(if (or (< (% 123 10) 5) - true) - (+ 2 3) - (/ 2 0))) - -(define (test-eval) (eval (parse program)))
\ No newline at end of file diff --git a/Semestr 2/racket/lista6/lista8/zad4.bak b/Semestr 2/racket/lista6/lista8/zad4.bak deleted file mode 100644 index 503099d..0000000 --- a/Semestr 2/racket/lista6/lista8/zad4.bak +++ /dev/null @@ -1,114 +0,0 @@ -#lang racket - -; Do boolean.rkt dodajemy pary -; -; Miejsca, ktore sie zmienily oznaczone sa przez !!! - -; --------- ; -; Wyrazenia ; -; --------- ; - -(struct const (val) #:transparent) -(struct binop (op l r) #:transparent) -(struct var-expr (id) #:transparent) -(struct let-expr (id e1 e2) #:transparent) -(struct if-expr (eb et ef) #:transparent) -(struct cons-expr (e1 e2) #:transparent) ; <------------------- !!! -(struct car-expr (e) #:transparent) ; <------------------- !!! -(struct cdr-expr (e) #:transparent) ; <------------------- !!! - -(define (expr? e) - (match e - [(const n) (or (number? n) (boolean? n))] - [(binop op l r) (and (symbol? op) (expr? l) (expr? r))] - [(var-expr x) (symbol? x)] - [(let-expr x e1 e2) - (and (symbol? x) (expr? e1) (expr? e2))] - [(if-expr eb et ef) - (and (expr? eb) (expr? et) (expr? ef))] - [(cons-expr e1 e2) (and (expr? e1) (expr? e2))] ; <----------- !!! - [(car-expr e) (expr? e)] ; <---------------------------------- !!! - [(cdr-expr e) (expr? e)] ; <---------------------------------- !!! - [_ false])) - -(define (parse q) - (cond - [(number? q) (const q)] - [(eq? q 'true) (const true)] - [(eq? q 'false) (const false)] - [(symbol? q) (var-expr q)] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'cons)) ; <- !!! - (cons-expr (parse (second q)) - (parse (third q)))] - [(and (list? q) (eq? (length q) 2) (eq? (first q) 'car)) ; <-- !!! - (car-expr (parse (second q)))] - [(and (list? q) (eq? (length q) 2) (eq? (first q) 'cdr)) ; <-- !!! - (cdr-expr (parse (second q)))] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let)) - (let-expr (first (second q)) - (parse (second (second q))) - (parse (third q)))] - [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if)) - (if-expr (parse (second q)) - (parse (third q)) - (parse (fourth q)))] - [(and (list? q) (eq? (length q) 3) (symbol? (first q))) - (binop (first q) - (parse (second q)) - (parse (third q)))])) - -(define (test-parse) (parse '(let [x (+ 2 2)] (+ x 1)))) - -; ---------- ; -; Srodowiska ; -; ---------- ; - -(struct environ (xs)) - -(define env-empty (environ null)) -(define (env-add x v env) - (environ (cons (cons x v) (environ-xs env)))) -(define (env-lookup x env) - (define (assoc-lookup xs) - (cond [(null? xs) (error "Unknown identifier" x)] - [(eq? x (car (car xs))) (cdr (car xs))] - [else (assoc-lookup (cdr xs))])) - (assoc-lookup (environ-xs env))) - -; --------- ; -; Ewaluacja ; -; --------- ; - -(define (value? v) - (or (number? v) - (boolean? v) - (and (pair? v) (value? (car v)) (value? (cdr v))))) - -(define (op->proc op) - (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo] - ['= =] ['> >] ['>= >=] ['< <] ['<= <=] - ['and (lambda (x y) (and x y))] - ['or (lambda (x y) (or x y))])) - -(define (eval-env e env) - (match e - [(const n) n] - [(binop op l r) ((op->proc op) (eval-env l env) - (eval-env r env))] - [(let-expr x e1 e2) - (eval-env e2 (env-add x (eval-env e1 env) env))] - [(var-expr x) (env-lookup x env)] - [(if-expr eb et ef) (if (eval-env eb env) - (eval-env et env) - (eval-env ef env))] - [(cons-expr e1 e2) (cons (eval-env e1 env) ; <---------------- !!! - (eval-env e2 env))] - [(car-expr e) (car (eval-env e env))] ; <--------------------- !!! - [(cdr-expr e) (cdr (eval-env e env))])) ; <------------------- !!! - -(define (eval e) (eval-env e env-empty)) - -(define program - '(car (if true (cons 1 2) false))) - -(define (test-eval) (eval (parse program)))
\ No newline at end of file diff --git a/Semestr 2/racket/lista6/lista8/zad4.rkt b/Semestr 2/racket/lista6/lista8/zad4.rkt deleted file mode 100644 index 7934435..0000000 --- a/Semestr 2/racket/lista6/lista8/zad4.rkt +++ /dev/null @@ -1,118 +0,0 @@ -#lang racket - -; Do boolean.rkt dodajemy pary -; -; Miejsca, ktore sie zmienily oznaczone sa przez !!! - -; --------- ; -; Wyrazenia ; -; --------- ; - -(struct const (val) #:transparent) -(struct binop (op l r) #:transparent) -(struct var-expr (id) #:transparent) -(struct let-expr (id e1 e2) #:transparent) -(struct if-expr (eb et ef) #:transparent) -(struct cons-expr (e1 e2) #:transparent) ; <------------------- !!! -(struct car-expr (e) #:transparent) ; <------------------- !!! -(struct cdr-expr (e) #:transparent) ; <------------------- !!! -(struct is-pair (e) #:transparent) - -(define (expr? e) - (match e - [(const n) (or (number? n) (boolean? n))] - [(binop op l r) (and (symbol? op) (expr? l) (expr? r))] - [(var-expr x) (symbol? x)] - [(let-expr x e1 e2) - (and (symbol? x) (expr? e1) (expr? e2))] - [(if-expr eb et ef) - (and (expr? eb) (expr? et) (expr? ef))] - [(cons-expr e1 e2) (and (expr? e1) (expr? e2))] ; <----------- !!! - [(car-expr e) (expr? e)] ; <---------------------------------- !!! - [(cdr-expr e) (expr? e)] ; <---------------------------------- !!! - [(is-pair e) (expr? e)] - [_ false])) - -(define (parse q) - (cond - [(number? q) (const q)] - [(eq? q 'true) (const true)] - [(eq? q 'false) (const false)] - [(symbol? q) (var-expr q)] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'cons)) ; <- !!! - (cons-expr (parse (second q)) - (parse (third q)))] - [(and (list? q) (eq? (length q) 2) (eq? (first q) 'car)) ; <-- !!! - (car-expr (parse (second q)))] - [(and (list? q) (eq? (length q) 2) (eq? (first q) 'cdr)) ; <-- !!! - (cdr-expr (parse (second q)))] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let)) - (let-expr (first (second q)) - (parse (second (second q))) - (parse (third q)))] - [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if)) - (if-expr (parse (second q)) - (parse (third q)) - (parse (fourth q)))] - [(and (list? q) (eq? (length q) 3) (symbol? (first q))) - (binop (first q) - (parse (second q)) - (parse (third q)))] - [(and (list? q) (eq? (length q) 2) (eq? (first q) 'pair?)) - (is-pair (parse (second q)))])) - -(define (test-parse) (parse '(let [x (+ 2 2)] (+ x 1)))) - -; ---------- ; -; Srodowiska ; -; ---------- ; - -(struct environ (xs)) - -(define env-empty (environ null)) -(define (env-add x v env) - (environ (cons (cons x v) (environ-xs env)))) -(define (env-lookup x env) - (define (assoc-lookup xs) - (cond [(null? xs) (error "Unknown identifier" x)] - [(eq? x (car (car xs))) (cdr (car xs))] - [else (assoc-lookup (cdr xs))])) - (assoc-lookup (environ-xs env))) - -; --------- ; -; Ewaluacja ; -; --------- ; - -(define (value? v) - (or (number? v) - (boolean? v) - (and (pair? v) (value? (car v)) (value? (cdr v))))) - -(define (op->proc op) - (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo] - ['= =] ['> >] ['>= >=] ['< <] ['<= <=] - ['and (lambda (x y) (and x y))] - ['or (lambda (x y) (or x y))])) - -(define (eval-env e env) - (match e - [(const n) n] - [(binop op l r) ((op->proc op) (eval-env l env) - (eval-env r env))] - [(let-expr x e1 e2) - (eval-env e2 (env-add x (eval-env e1 env) env))] - [(var-expr x) (env-lookup x env)] - [(if-expr eb et ef) (if (eval-env eb env) - (eval-env et env) - (eval-env ef env))] - [(cons-expr e1 e2) (cons (eval-env e1 env) ; <---------------- !!! - (eval-env e2 env))] - [(car-expr e) (car (eval-env e env))] ; <--------------------- !!! - [(cdr-expr e) (cdr (eval-env e env))] ; <------------------- !!! - [(is-pair e) (cons? (eval-env e env))])) -(define (eval e) (eval-env e env-empty)) - -(define program - '(car (if true (cons 1 2) false))) - -(define (test-eval) (eval (parse program)))
\ No newline at end of file diff --git a/Semestr 2/racket/lista6/lista8/zad5.bak b/Semestr 2/racket/lista6/lista8/zad5.bak deleted file mode 100644 index 6f1f7b4..0000000 --- a/Semestr 2/racket/lista6/lista8/zad5.bak +++ /dev/null @@ -1 +0,0 @@ -#lang racket diff --git a/Semestr 2/racket/lista6/lista8/zad5.rkt b/Semestr 2/racket/lista6/lista8/zad5.rkt deleted file mode 100644 index 721f5bf..0000000 --- a/Semestr 2/racket/lista6/lista8/zad5.rkt +++ /dev/null @@ -1,151 +0,0 @@ -#lang racket - -; Do list.rkt dodajemy procedury -; -; Miejsca, ktore sie zmienily oznaczone sa przez !!! - -; --------- ; -; Wyrazenia ; -; --------- ; - -(struct const (val) #:transparent) -(struct binop (op l r) #:transparent) -(struct unop (op e) #:transparent) -(struct var-expr (id) #:transparent) -(struct let-expr (id e1 e2) #:transparent) -(struct if-expr (eb et ef) #:transparent) -(struct cons-expr (e1 e2) #:transparent) -(struct null-expr () #:transparent) -(struct null?-expr (e) #:transparent) -(struct app (f e) #:transparent) ; <------------------ !!! -(struct lam (id e) #:transparent) ; <------------------ !!! - - -(define (expr? e) - (match e - [(const n) (or (number? n) (boolean? n))] - [(binop op l r) (and (symbol? op) (expr? l) (expr? r))] - [(var-expr x) (symbol? x)] - [(let-expr x e1 e2) - (and (symbol? x) (expr? e1) (expr? e2))] - [(if-expr eb et ef) - (and (expr? eb) (expr? et) (expr? ef))] - [(cons-expr e1 e2) (and (expr? e1) (expr? e2))] - [(null-expr) true] - [(null?-expr e) (expr? e)] - [(app f e) (and (expr? f) (expr? e))] ; <--------------------- !!! - [(lam id e) (and (symbol? id) (expr? e))] ; <----------------- !!! - [_ false])) - -(define (parse q) - (cond - [(number? q) (const q)] - [(eq? q 'true) (const true)] - [(eq? q 'false) (const false)] - [(eq? q 'null) (null-expr)] - [(symbol? q) (var-expr q)] - [(and (list? q) (eq? (length q) 2) (eq? (first q) 'null?)) - (null?-expr (parse (second q)))] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'cons)) - (cons-expr (parse (second q)) - (parse (third q)))] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let)) - (let-expr (first (second q)) - (parse (second (second q))) - (parse (third q)))] - [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if)) - (if-expr (parse (second q)) - (parse (third q)) - (parse (fourth q)))] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'lambda)) ; <!!! - (parse-lam (second q) (third q))] - [(and (list? q) (pair? q) (not (op->proc (car q)))) ; <------- !!! - (parse-app q)] - [(and (list? q) (eq? (length q) 3) (symbol? (first q))) - (binop (first q) - (parse (second q)) - (parse (third q)))] - [(and (list? q) (eq? (length q) 2) (symbol? (first q))) - (unop (first q) (parse (second q)))])) - -(define (parse-app q) ; <----------------------------------------- !!! - (define (parse-app-accum q acc) - (cond [(= 1 (length q)) (app acc (parse (car q)))] - [else (parse-app-accum (cdr q) (app acc (parse (car q))))])) - (parse-app-accum (cdr q) (parse (car q)))) - -(define (parse-lam pat e) ; <------------------------------------- !!! - (cond [(= 1 (length pat)) - (lam (car pat) (parse e))] - [else - (lam (car pat) (parse-lam (cdr pat) e))])) - -; ---------- ; -; Srodowiska ; -; ---------- ; - -(struct environ (xs) #:transparent) - -(define env-empty (environ null)) -(define (env-add x v env) - (environ (cons (cons x v) (environ-xs env)))) -(define (env-lookup x env) - (define (assoc-lookup xs) - (cond [(null? xs) (error "Unknown identifier" x)] - [(eq? x (car (car xs))) (cdr (car xs))] - [else (assoc-lookup (cdr xs))])) - (assoc-lookup (environ-xs env))) - -; --------- ; -; Ewaluacja ; -; --------- ; - -(struct clo (id e env) #:transparent) ; <------------------------- !!! - -(define (value? v) - (or (number? v) - (boolean? v) - (and (pair? v) (value? (car v)) (value? (cdr v))) - (null? v) - (clo? v))) ; <---------------------------------------------- !!! - -(define (op->proc op) - (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo] - ['= =] ['> >] ['>= >=] ['< <] ['<= <=] - ['and (lambda (x y) (and x y))] - ['or (lambda (x y) (or x y))] - ['not not] ['car car] ['cdr cdr] - [_ false])) ; <--------------------------------------- !!! - -(define (eval-env e env) - (match e - [(const n) n] - [(binop op l r) ((op->proc op) (eval-env l env) - (eval-env r env))] - [(unop op e) ((op->proc op) (eval-env e env))] - [(let-expr x e1 e2) - (eval-env e2 (env-add x (eval-env e1 env) env))] - [(var-expr x) (env-lookup x env)] - [(if-expr eb et ef) (if (eval-env eb env) - (eval-env et env) - (eval-env ef env))] - [(cons-expr e1 e2) (cons (eval-env e1 env) - (eval-env e2 env))] - [(null-expr) null] - [(null?-expr e) (null? (eval-env e env))] - [(lam x e) (clo x e env)] ; <--------------------------------- !!! - [(app f e) ; <------------------------------------------------ !!! - (let ([vf (eval-env f env)] - [ve (eval-env e env)]) - (match vf [(clo x body fun-env) - (eval-env body (env-add x ve fun-env))]))])) - -(define (eval e) (eval-env e env-empty)) - -(define program - '(let [twice (lambda (f x) (f (f x)))] - (let [inc (lambda (x) (+ 1 x))] - (twice twice twice twice inc 1)))) - - -(define (test-eval) (eval (parse program)))
\ No newline at end of file diff --git a/Semestr 2/racket/lista6/lista8/zad6.bak b/Semestr 2/racket/lista6/lista8/zad6.bak deleted file mode 100644 index 721f5bf..0000000 --- a/Semestr 2/racket/lista6/lista8/zad6.bak +++ /dev/null @@ -1,151 +0,0 @@ -#lang racket - -; Do list.rkt dodajemy procedury -; -; Miejsca, ktore sie zmienily oznaczone sa przez !!! - -; --------- ; -; Wyrazenia ; -; --------- ; - -(struct const (val) #:transparent) -(struct binop (op l r) #:transparent) -(struct unop (op e) #:transparent) -(struct var-expr (id) #:transparent) -(struct let-expr (id e1 e2) #:transparent) -(struct if-expr (eb et ef) #:transparent) -(struct cons-expr (e1 e2) #:transparent) -(struct null-expr () #:transparent) -(struct null?-expr (e) #:transparent) -(struct app (f e) #:transparent) ; <------------------ !!! -(struct lam (id e) #:transparent) ; <------------------ !!! - - -(define (expr? e) - (match e - [(const n) (or (number? n) (boolean? n))] - [(binop op l r) (and (symbol? op) (expr? l) (expr? r))] - [(var-expr x) (symbol? x)] - [(let-expr x e1 e2) - (and (symbol? x) (expr? e1) (expr? e2))] - [(if-expr eb et ef) - (and (expr? eb) (expr? et) (expr? ef))] - [(cons-expr e1 e2) (and (expr? e1) (expr? e2))] - [(null-expr) true] - [(null?-expr e) (expr? e)] - [(app f e) (and (expr? f) (expr? e))] ; <--------------------- !!! - [(lam id e) (and (symbol? id) (expr? e))] ; <----------------- !!! - [_ false])) - -(define (parse q) - (cond - [(number? q) (const q)] - [(eq? q 'true) (const true)] - [(eq? q 'false) (const false)] - [(eq? q 'null) (null-expr)] - [(symbol? q) (var-expr q)] - [(and (list? q) (eq? (length q) 2) (eq? (first q) 'null?)) - (null?-expr (parse (second q)))] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'cons)) - (cons-expr (parse (second q)) - (parse (third q)))] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let)) - (let-expr (first (second q)) - (parse (second (second q))) - (parse (third q)))] - [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if)) - (if-expr (parse (second q)) - (parse (third q)) - (parse (fourth q)))] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'lambda)) ; <!!! - (parse-lam (second q) (third q))] - [(and (list? q) (pair? q) (not (op->proc (car q)))) ; <------- !!! - (parse-app q)] - [(and (list? q) (eq? (length q) 3) (symbol? (first q))) - (binop (first q) - (parse (second q)) - (parse (third q)))] - [(and (list? q) (eq? (length q) 2) (symbol? (first q))) - (unop (first q) (parse (second q)))])) - -(define (parse-app q) ; <----------------------------------------- !!! - (define (parse-app-accum q acc) - (cond [(= 1 (length q)) (app acc (parse (car q)))] - [else (parse-app-accum (cdr q) (app acc (parse (car q))))])) - (parse-app-accum (cdr q) (parse (car q)))) - -(define (parse-lam pat e) ; <------------------------------------- !!! - (cond [(= 1 (length pat)) - (lam (car pat) (parse e))] - [else - (lam (car pat) (parse-lam (cdr pat) e))])) - -; ---------- ; -; Srodowiska ; -; ---------- ; - -(struct environ (xs) #:transparent) - -(define env-empty (environ null)) -(define (env-add x v env) - (environ (cons (cons x v) (environ-xs env)))) -(define (env-lookup x env) - (define (assoc-lookup xs) - (cond [(null? xs) (error "Unknown identifier" x)] - [(eq? x (car (car xs))) (cdr (car xs))] - [else (assoc-lookup (cdr xs))])) - (assoc-lookup (environ-xs env))) - -; --------- ; -; Ewaluacja ; -; --------- ; - -(struct clo (id e env) #:transparent) ; <------------------------- !!! - -(define (value? v) - (or (number? v) - (boolean? v) - (and (pair? v) (value? (car v)) (value? (cdr v))) - (null? v) - (clo? v))) ; <---------------------------------------------- !!! - -(define (op->proc op) - (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo] - ['= =] ['> >] ['>= >=] ['< <] ['<= <=] - ['and (lambda (x y) (and x y))] - ['or (lambda (x y) (or x y))] - ['not not] ['car car] ['cdr cdr] - [_ false])) ; <--------------------------------------- !!! - -(define (eval-env e env) - (match e - [(const n) n] - [(binop op l r) ((op->proc op) (eval-env l env) - (eval-env r env))] - [(unop op e) ((op->proc op) (eval-env e env))] - [(let-expr x e1 e2) - (eval-env e2 (env-add x (eval-env e1 env) env))] - [(var-expr x) (env-lookup x env)] - [(if-expr eb et ef) (if (eval-env eb env) - (eval-env et env) - (eval-env ef env))] - [(cons-expr e1 e2) (cons (eval-env e1 env) - (eval-env e2 env))] - [(null-expr) null] - [(null?-expr e) (null? (eval-env e env))] - [(lam x e) (clo x e env)] ; <--------------------------------- !!! - [(app f e) ; <------------------------------------------------ !!! - (let ([vf (eval-env f env)] - [ve (eval-env e env)]) - (match vf [(clo x body fun-env) - (eval-env body (env-add x ve fun-env))]))])) - -(define (eval e) (eval-env e env-empty)) - -(define program - '(let [twice (lambda (f x) (f (f x)))] - (let [inc (lambda (x) (+ 1 x))] - (twice twice twice twice inc 1)))) - - -(define (test-eval) (eval (parse program)))
\ No newline at end of file diff --git a/Semestr 2/racket/lista6/lista8/zad6.rkt b/Semestr 2/racket/lista6/lista8/zad6.rkt deleted file mode 100644 index c7ea9f0..0000000 --- a/Semestr 2/racket/lista6/lista8/zad6.rkt +++ /dev/null @@ -1,171 +0,0 @@ -#lang racket - -; Do list.rkt dodajemy procedury -; -; Miejsca, ktore sie zmienily oznaczone sa przez !!! - -; --------- ; -; Wyrazenia ; -; --------- ; - -(struct const (val) #:transparent) -(struct binop (op l r) #:transparent) -(struct unop (op e) #:transparent) -(struct var-expr (id) #:transparent) -(struct let-expr (id e1 e2) #:transparent) -(struct if-expr (eb et ef) #:transparent) -(struct cons-expr (e1 e2) #:transparent) -(struct null-expr () #:transparent) -(struct null?-expr (e) #:transparent) -(struct app (f e) #:transparent) ; <------------------ !!! -(struct lam (id e) #:transparent) ; <------------------ !!! - -(define (expr? e) - (match e - [(const n) (or (number? n) (boolean? n))] - [(unop op e) (and (symbol? op) (expr? e))] - [(binop op l r) (and (symbol? op) (expr? l) (expr? r))] - [(var-expr x) (symbol? x)] - [(let-expr x e1 e2) - (and (symbol? x) (expr? e1) (expr? e2))] - [(if-expr eb et ef) - (and (expr? eb) (expr? et) (expr? ef))] - [(cons-expr e1 e2) (and (expr? e1) (expr? e2))] - [(null-expr) true] - [(null?-expr e) (expr? e)] - [(app f e) (and (expr? f) (expr? e))] ; <--------------------- !!! - [(lam id e) (and (symbol? id) (expr? e))] ; <----------------- !!! - [_ false])) - -(define (cedar? f) - (let ((letters (string->list (symbol->string f)))) - (and (> (length letters) 2) - (eq? (first letters) #\c) - (eq? (first (reverse letters)) #\r) - (andmap (lambda (x) (or (eq? x #\a) (eq? x #\d))) - (cdr letters))))) - -(define (get-cedar letters xs) - (cond [(eq? (car letters) #\r) xs] - [(eq? (car letters) #\a) (unop 'car (get-cedar (cdr letters) xs))] - [(eq? (car letters) #\d) (unop 'cdr (get-cedar (cdr letters) xs))])) - -(define (cedar f xs) - (let ((letters (string->list (symbol->string f)))) - (get-cedar (cdr (reverse letters)) xs))) - -(define (parse q) - (cond - [(number? q) (const q)] - [(eq? q 'true) (const true)] - [(eq? q 'false) (const false)] - [(eq? q 'null) (null-expr)] - [(symbol? q) (var-expr q)] - [(and (list? q) (eq? (length q) 2) (eq? (first q) 'null?)) - (null?-expr (parse (second q)))] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'cons)) - (cons-expr (parse (second q)) - (parse (third q)))] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let)) - (let-expr (first (second q)) - (parse (second (second q))) - (parse (third q)))] - [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if)) - (if-expr (parse (second q)) - (parse (third q)) - (parse (fourth q)))] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'lambda)) ; <!!! - (parse-lam (second q) (third q))] - [(and (list? q) (eq? (length q) 2) (symbol? (first q)) - (cedar? (first q))) - (cedar (first q) (parse (second q)))] - [(and (list? q) (pair? q) (not (op->proc (car q)))) ; <------- !!! - (parse-app q)] - [(and (list? q) (eq? (length q) 3) (symbol? (first q))) - (binop (first q) - (parse (second q)) - (parse (third q)))] - [(and (list? q) (eq? (length q) 2) (symbol? (first q))) - (unop (first q) (parse (second q)))])) - -(define (parse-app q) ; <----------------------------------------- !!! - (define (parse-app-accum q acc) - (cond [(= 1 (length q)) (app acc (parse (car q)))] - [else (parse-app-accum (cdr q) (app acc (parse (car q))))])) - (parse-app-accum (cdr q) (parse (car q)))) - -(define (parse-lam pat e) ; <------------------------------------- !!! - (cond [(= 1 (length pat)) - (lam (car pat) (parse e))] - [else - (lam (car pat) (parse-lam (cdr pat) e))])) - -; ---------- ; -; Srodowiska ; -; ---------- ; - -(struct environ (xs) #:transparent) - -(define env-empty (environ null)) -(define (env-add x v env) - (environ (cons (cons x v) (environ-xs env)))) -(define (env-lookup x env) - (define (assoc-lookup xs) - (cond [(null? xs) (error "Unknown identifier" x)] - [(eq? x (car (car xs))) (cdr (car xs))] - [else (assoc-lookup (cdr xs))])) - (assoc-lookup (environ-xs env))) - -; --------- ; -; Ewaluacja ; -; --------- ; - -(struct clo (id e env) #:transparent) ; <------------------------- !!! - -(define (value? v) - (or (number? v) - (boolean? v) - (and (pair? v) (value? (car v)) (value? (cdr v))) - (null? v) - (clo? v))) ; <---------------------------------------------- !!! - -(define (op->proc op) - (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo] - ['= =] ['> >] ['>= >=] ['< <] ['<= <=] - ['and (lambda (x y) (and x y))] - ['or (lambda (x y) (or x y))] - ['not not] ['car car] ['cdr cdr] - [_ false])) ; <--------------------------------------- !!! - -(define (eval-env e env) - (match e - [(const n) n] - [(binop op l r) ((op->proc op) (eval-env l env) - (eval-env r env))] - [(unop op e) ((op->proc op) (eval-env e env))] - [(let-expr x e1 e2) - (eval-env e2 (env-add x (eval-env e1 env) env))] - [(var-expr x) (env-lookup x env)] - [(if-expr eb et ef) (if (eval-env eb env) - (eval-env et env) - (eval-env ef env))] - [(cons-expr e1 e2) (cons (eval-env e1 env) - (eval-env e2 env))] - [(null-expr) null] - [(null?-expr e) (null? (eval-env e env))] - [(lam x e) (clo x e env)] ; <--------------------------------- !!! - [(app f e) ; <------------------------------------------------ !!! - (let ([vf (eval-env f env)] - [ve (eval-env e env)]) - (match vf [(clo x body fun-env) - (eval-env body (env-add x ve fun-env))]))])) - -(define (eval e) (eval-env e env-empty)) - -(define program - '(let [twice (lambda (f x) (f (f x)))] - (let [inc (lambda (x) (+ 1 x))] - (twice twice twice twice inc 1)))) - - -(define (test-eval) (eval (parse program)))
\ No newline at end of file diff --git a/Semestr 2/racket/lista6/lista8/zadanie.rkt b/Semestr 2/racket/lista6/lista8/zadanie.rkt deleted file mode 100644 index 0960f21..0000000 --- a/Semestr 2/racket/lista6/lista8/zadanie.rkt +++ /dev/null @@ -1,98 +0,0 @@ -#lang racket - -; Do let-env.rkt dodajemy wartosci boolowskie -; -; Miejsca, ktore sie zmienily oznaczone sa przez !!! - -; --------- ; -; Wyrazenia ; -; --------- ; - -(struct const (val) #:transparent) -(struct binop (op l r) #:transparent) -(struct var-expr (id) #:transparent) -(struct let-expr (id e1 e2) #:transparent) -(struct if-expr (eb et ef) #:transparent) - -(define (expr? e) - (match e - [(const n) (or (number? n) (boolean? n))] ; <----------------- !!! - [(binop op l r) (and (symbol? op) (expr? l) (expr? r))] - [(var-expr x) (symbol? x)] - [(let-expr x e1 e2) - (and (symbol? x) (expr? e1) (expr? e2))] - [(if-expr eb et ef) ; <--------------------------------------- !!! - (and (expr? eb) (expr? et) (expr? ef))] - [_ false])) - -(define (parse q) - (cond - [(number? q) (const q)] - [(eq? q 'true) (const true)] ; <---------------------------- !!! - [(eq? q 'false) (const false)] ; <---------------------------- !!! - [(symbol? q) (var-expr q)] - [(and (list? q) (eq? (length q) 3) (eq? (first q) 'let)) - (let-expr (first (second q)) - (parse (second (second q))) - (parse (third q)))] - [(and (list? q) (eq? (length q) 4) (eq? (first q) 'if)) ; <--- !!! - (if-expr (parse (second q)) - (parse (third q)) - (parse (fourth q)))] - [(and (list? q) (eq? (length q) 3) (symbol? (first q))) - (binop (first q) - (parse (second q)) - (parse (third q)))])) - -(define (test-parse) (parse '(let [x (+ 2 2)] (+ x 1)))) - -; ---------- ; -; Srodowiska ; -; ---------- ; - -(struct environ (xs)) - -(define env-empty (environ null)) -(define (env-add x v env) - (environ (cons (cons x v) (environ-xs env)))) -(define (env-lookup x env) - (define (assoc-lookup xs) - (cond [(null? xs) (error "Unknown identifier" x)] - [(eq? x (car (car xs))) (cdr (car xs))] - [else (assoc-lookup (cdr xs))])) - (assoc-lookup (environ-xs env))) - -; --------- ; -; Ewaluacja ; -; --------- ; - -(define (value? v) - (or (number? v) (boolean? v))) - -(define (op->proc op) - (match op ['+ +] ['- -] ['* *] ['/ /] ['% modulo] ; <----------- !!! - ['= =] ['> >] ['>= >=] ['< <] ['<= <=] - ['and (lambda (x y) (and x y))] - ['or (lambda (x y) (or x y))])) - -(define (eval-env e env) - (match e - [(const n) n] - [(binop op l r) ((op->proc op) (eval-env l env) - (eval-env r env))] - [(let-expr x e1 e2) - (eval-env e2 (env-add x (eval-env e1 env) env))] - [(var-expr x) (env-lookup x env)] - [(if-expr eb et ef) (if (eval-env eb env) ; <----------------- !!! - (eval-env et env) - (eval-env ef env))])) - -(define (eval e) (eval-env e env-empty)) - -(define program - '(if (or (< (% 123 10) 5) - true) - (+ 2 3) - (/ 2 0))) - -(define (test-eval) (eval (parse program)))
\ No newline at end of file diff --git a/Semestr 2/racket/lista6/solution.bak b/Semestr 2/racket/lista6/solution.bak deleted file mode 100644 index 0805991..0000000 --- a/Semestr 2/racket/lista6/solution.bak +++ /dev/null @@ -1,27 +0,0 @@ -#lang racket - -(provide (struct-out complex) parse eval) - -(struct complex (re im) #:transparent) - -(define value? - complex?) - -;; Ponizej znajduje sie interpreter zwyklych wyrazen arytmetycznych. -;; Zadanie to zmodyfikowac go tak, by dzialal z liczbami zespolonymi. - -(struct const (val) #:transparent) -(struct binop (op l r) #:transparent) - -(define (op->proc op) - (match op ['+ +] ['- -] ['* *] ['/ /])) - -(define (eval e) - (match e - [(const n) n] - [(binop op l r) ((op->proc op) (eval l) (eval r))])) - -(define (parse q) - (cond [(number? q) (const q)] - [(and (list? q) (eq? (length q) 3) (symbol? (first q))) - (binop (first q) (parse (second q)) (parse (third q)))]))
\ No newline at end of file diff --git a/Semestr 2/racket/lista6/solution.rkt b/Semestr 2/racket/lista6/solution.rkt deleted file mode 100644 index 59bdecd..0000000 --- a/Semestr 2/racket/lista6/solution.rkt +++ /dev/null @@ -1,73 +0,0 @@ -#lang racket - -(provide (struct-out complex) parse eval) - -(struct complex (re im) #:transparent) - -(define value? - complex?) - -(define (comp-plus x y) - (let ((x-re (complex-re x)) - (x-im (complex-im x)) - (y-re (complex-re y)) - (y-im (complex-im y))) - (complex (+ x-re y-re) (+ x-im y-im)))) - -(define (comp-minus x y) - (let ((x-re (complex-re x)) - (x-im (complex-im x)) - (y-re (complex-re y)) - (y-im (complex-im y))) - (complex (- x-re y-re) (- x-im y-im)))) - -(define (comp-mult x y) - (let ((x-re (complex-re x)) - (x-im (complex-im x)) - (y-re (complex-re y)) - (y-im (complex-im y))) - (complex (- (* x-re y-re) (* x-im y-im)) (+ (* x-re y-im) (* x-im y-re))))) - -(define (comp-mod2 x) - (let ((x-re (complex-re x)) - (x-im (complex-im x))) - (complex (+ (* x-re x-re) (* x-im x-im)) 0))) - -(define (comp-mod x) - (let ((mod2 (comp-mod2 x)) - (x-re (complex-re x))) - (complex (sqrt x-re) 0))) - -(define (comp-div x y) - (let* ((mod2 (complex-re (comp-mod2 y))) - (x-re (complex-re x)) - (x-im (complex-im x)) - (y-re (complex-re y)) - (y-im (complex-im y)) - (real (+ (* x-re y-re) (* x-im y-im))) - (imag (- (* x-im y-re) (* x-re y-im)))) - (complex (/ real mod2) (/ imag mod2)))) - - -;; Ponizej znajduje sie interpreter zwyklych wyrazen arytmetycznych. -;; Zadanie to zmodyfikowac go tak, by dzialal z liczbami zespolonymi. - -(struct const (val) #:transparent) -(struct binop (op l r) #:transparent) - -(define (imaginary-unit? c) - (eq? c 'i)) - -(define (op->proc op) - (match op ['+ comp-plus] ['- comp-minus] ['* comp-mult] ['/ comp-div])) - -(define (eval e) - (match e - [(const n) n] - [(binop op l r) ((op->proc op) (eval l) (eval r))])) - -(define (parse q) - (cond [(number? q) (const (complex q 0))] - [(imaginary-unit? q) (const (complex 0 1))] - [(and (list? q) (eq? (length q) 3) (symbol? (first q))) - (binop (first q) (parse (second q)) (parse (third q)))]))
\ No newline at end of file diff --git a/Semestr 2/racket/lista6/zad11/solution.bak b/Semestr 2/racket/lista6/zad11/solution.bak deleted file mode 100644 index f449481..0000000 --- a/Semestr 2/racket/lista6/zad11/solution.bak +++ /dev/null @@ -1,36 +0,0 @@ -#lang racket - -(provide (struct-out const) (struct-out binop) rpn->arith) - -;; ------------------------------- -;; Wyrazenia w odwr. not. polskiej -;; ------------------------------- - -(define (rpn-expr? e) - (and (list? e) - (pair? e) - (andmap (lambda (x) (or (number? x) (member x '(+ - * /)))) - e))) - -;; ---------------------- -;; Wyrazenia arytmetyczne -;; ---------------------- - -(struct const (val) #:transparent) -(struct binop (op l r) #:transparent) - -(define (arith-expr? e) - (match e - [(const n) (number? n)] - [(binop op l r) - (and (symbol? op) (arith-expr? l) (arith-expr? r))] - [_ false])) - -;; ---------- -;; Kompilacja -;; ---------- - -(define (rpn->arith e) - (error "TODO: Uzupelnij tutaj")) - -; Mozesz tez dodac jakies procedury pomocnicze i testy
\ No newline at end of file diff --git a/Semestr 2/racket/lista6/zad11/solution.rkt b/Semestr 2/racket/lista6/zad11/solution.rkt deleted file mode 100644 index a44afe4..0000000 --- a/Semestr 2/racket/lista6/zad11/solution.rkt +++ /dev/null @@ -1,58 +0,0 @@ -#lang racket - -(provide (struct-out const) (struct-out binop) rpn->arith) - -;; ------------------------------- -;; Wyrazenia w odwr. not. polskiej -;; ------------------------------- - -(define (rpn-expr? e) - (and (list? e) - (pair? e) - (andmap (lambda (x) (or (number? x) (member x '(+ - * /)))) - e))) - -;; ---------------------- -;; Wyrazenia arytmetyczne -;; ---------------------- - -(struct const (val) #:transparent) -(struct binop (op l r) #:transparent) - -(define (arith-expr? e) - (match e - [(const n) (number? n)] - [(binop op l r) - (and (symbol? op) (arith-expr? l) (arith-expr? r))] - [_ false])) - -;; ---------- -;; Kompilacja -;; ---------- - -(struct stack (xs)) - -(define empty-stack (stack null)) -(define (empty-stack? s) (null? (stack-xs s))) -(define (top s) (car (stack-xs s))) -(define (push a s) (stack (cons a (stack-xs s)))) -(define (pop s) (stack (cdr (stack-xs s)))) - -(define (op->proc op) - (match op ['+ +] ['- -] ['* *] ['/ /])) - -(define (eval-am e s) - (cond [(null? e) - (top s)] - [(number? (car e)) - (eval-am (cdr e) (push (const (car e)) s))] - [(symbol? (car e)) - (eval-am (cdr e) - (push (binop (car e) (top (pop s)) (top s)) - (pop (pop s))))])) - -(define (rpn->arith e) - (eval-am e empty-stack)) - - -; Mozesz tez dodac jakies procedury pomocnicze i testy
\ No newline at end of file diff --git a/Semestr 2/racket/luk.rkt b/Semestr 2/racket/luk.rkt deleted file mode 100644 index cc319a5..0000000 --- a/Semestr 2/racket/luk.rkt +++ /dev/null @@ -1,137 +0,0 @@ -#lang typed/racket
-
-; Do let-env.rkt dodajemy wartosci boolowskie
-;
-; Miejsca, ktore sie zmienily oznaczone sa przez !!!
-
-; --------- ;
-; Wyrazenia ;
-; --------- ;
-(provide parse typecheck)
-
-(define-type Value (U Boolean Real))
-(define-type Expr (U const binop var-expr let-expr if-expr))
-(define-type ArithSymbol (U '+ '- '* '/))
-(define-type LogicSymbol (U 'and 'or))
-(define-type CompSymbol (U '< '= '> '<= '>=))
-(define-type BinomSymbol (U ArithSymbol LogicSymbol CompSymbol))
-
-(define-type Binop-list (List BinomSymbol Any Any))
-(define-type Let-list (List 'let (List Symbol Any) Any))
-(define-type If-list (List 'if Any Any Any))
-
-(define-predicate Binop-list? Binop-list)
-(define-predicate Let-list? Let-list)
-(define-predicate If-list? If-list)
-
-(struct const ([val : Value]) #:transparent)
-(struct binop ([op : BinomSymbol] [l : Expr] [r : Expr]) #:transparent)
-(struct var-expr ([id : Symbol]) #:transparent)
-(struct let-expr ([id : Symbol] [e1 : Expr] [e2 : Expr]) #:transparent)
-(struct if-expr ([eb : Expr] [et : Expr] [ef : Expr]) #:transparent)
-
-(define-predicate Value? Value)
-(define-predicate Expr? Expr)
-(define-predicate BinomSymbol? BinomSymbol)
-(define-predicate ArithSymbol? ArithSymbol)
-(define-predicate LogicSymbol? LogicSymbol)
-(define-predicate CompSymbol? CompSymbol)
-(define-predicate BinomValue? BinomValue)
-
-
-
-(: parse (-> Any Expr))
-(define (parse q)
- (cond
- [(real? q) (const q)]
- [(eq? q 'true) (const true)] ; <---------------------------- !!!
- [(eq? q 'false) (const false)] ; <---------------------------- !!!
- [(symbol? q) (var-expr q)]
- [(Let-list? q)
- (let-expr (first (second q))
- (parse (second (second q)))
- (parse (third q)))]
- [(If-list? q) ; <--- !!!
- (if-expr (parse (second q))
- (parse (third q))
- (parse (fourth q)))]
- [(Binop-list? q)
- (binop (first q)
- (parse (second q))
- (parse (third q)))]
- [else (error "Blad parsowania" q)]))
-
-
-
-
-(define (test-parse) (parse '(let [x (+ 2 2)] (+ x 1))))
-
-; ---------- ;
-; Srodowiska ;
-; ---------- ;
-(define-type EType ( U 'real 'boolean ) )
-(define-type Env (Listof (Pairof Symbol EType)))
-(define-predicate Env? Env)
-(struct environ ([xs : Env]))
-
-(: env-empty environ)
-(define env-empty (environ null))
-(: env-add (-> Symbol EType environ environ))
-(define (env-add x v env)
- (environ (cons (cons x v) (environ-xs env))))
-(: env-lookup (-> Symbol environ (U EType #f)))
-(define (env-lookup x env)
- (: assoc-lookup (-> Env EType))
- (define (assoc-lookup xs)
- (cond [(null? xs) (error "Unknown identifier" x)]
- [(eq? x (car (car xs))) (cdr (car xs))]
- [else (assoc-lookup (cdr xs))]))
- (assoc-lookup (environ-xs env)))
-
-
-(: typecheck (-> Expr (U EType #f)))
-(define (typecheck q)
- (: give (-> Expr environ (U EType #f)))
- (define (give q envi)
- (cond
- [(const? q) (if (boolean? (const-val q)) 'boolean 'real)]
- [(var-expr? q) (env-lookup (var-expr-id q) envi)]
- [(let-expr? q)
- (let ([p (give (let-expr-e1 q) envi)]) (if (false? p) #f (give (let-expr-e2 q) (env-add (let-expr-id q) p envi))))]
- [(binop? q)
- (cond
- ([ArithSymbol? (binop-op q)] (if (and (eq? 'real (give (binop-l q) envi)) (eq? 'real (give (binop-r q) envi))) 'real #f))
- ([LogicSymbol? (binop-op q)] (if (and (eq? 'boolean (give (binop-l q) envi)) (eq? 'boolean (give (binop-r q) envi))) 'boolean #f))
- ([CompSymbol? (binop-op q)] (if (and (eq? 'real (give (binop-l q) envi)) (eq? 'real (give (binop-r q) envi))) 'boolean #f))
- [else #f])]
- [(if-expr? q)
- (if (and (eq? 'real (if-expr-eb q))
- (eq? (give (if-expr-et q) envi) (give (if-expr-ef q) envi)))
- (give (if-expr-et q) envi)
- #f)]
- [else #f]))
-
-
- (give q env-empty))
-
-
-
-(define program2
- '(if true
- (let [x 5] (+ 5 false))
- (/ 2 2)))
-
-(define program3
- '(let [x (+ 2 3)]
- (let [y (< 2 3)]
- (+ x y))))
-
-(define program4
- '(let [x (and true true)] x))
-
-(define wtf
- '(and true true))
-
-(typecheck (parse program2))
-(typecheck (parse program3))
-(typecheck (parse program4))
diff --git a/Semestr 2/racket/rac.rkt b/Semestr 2/racket/rac.rkt deleted file mode 100644 index 8300208..0000000 --- a/Semestr 2/racket/rac.rkt +++ /dev/null @@ -1,371 +0,0 @@ -#reader(lib"read.ss""wxme")WXME0109 ## -#| - This file uses the GRacket editor format. - Open this file in DrRacket version 7.6 or later to read it. - - Most likely, it was created by saving a program in DrRacket, - and it probably contains a program with non-text elements - (such as images or comment boxes). - - http://racket-lang.org/ -|# - 33 7 #"wxtext\0" -3 1 6 #"wxtab\0" -1 1 8 #"wximage\0" -2 0 8 #"wxmedia\0" -4 1 34 #"(lib \"syntax-browser.ss\" \"mrlib\")\0" -1 0 36 #"(lib \"cache-image-snip.ss\" \"mrlib\")\0" -1 0 68 -(0 - #"((lib \"image-core.ss\" \"mrlib\") (lib \"image-core-wxme.rkt\" \"mr" - #"lib\"))\0" -) 1 0 16 #"drscheme:number\0" -3 0 44 #"(lib \"number-snip.ss\" \"drscheme\" \"private\")\0" -1 0 36 #"(lib \"comment-snip.ss\" \"framework\")\0" -1 0 93 -(1 - #"((lib \"collapsed-snipclass.ss\" \"framework\") (lib \"collapsed-sni" - #"pclass-wxme.ss\" \"framework\"))\0" -) 0 0 43 #"(lib \"collapsed-snipclass.ss\" \"framework\")\0" -0 0 19 #"drscheme:sexp-snip\0" -0 0 29 #"drscheme:bindings-snipclass%\0" -1 0 101 -(2 - #"((lib \"ellipsis-snip.rkt\" \"drracket\" \"private\") (lib \"ellipsi" - #"s-snip-wxme.rkt\" \"drracket\" \"private\"))\0" -) 2 0 88 -(3 - #"((lib \"pict-snip.rkt\" \"drracket\" \"private\") (lib \"pict-snip.r" - #"kt\" \"drracket\" \"private\"))\0" -) 0 0 55 -#"((lib \"snip.rkt\" \"pict\") (lib \"snip-wxme.rkt\" \"pict\"))\0" -1 0 34 #"(lib \"bullet-snip.rkt\" \"browser\")\0" -0 0 25 #"(lib \"matrix.ss\" \"htdp\")\0" -1 0 22 #"drscheme:lambda-snip%\0" -1 0 29 #"drclickable-string-snipclass\0" -0 0 26 #"drracket:spacer-snipclass\0" -0 0 57 -#"(lib \"hrule-snip.rkt\" \"macro-debugger\" \"syntax-browser\")\0" -1 0 26 #"drscheme:pict-value-snip%\0" -0 0 45 #"(lib \"image-snipr.ss\" \"slideshow\" \"private\")\0" -1 0 38 #"(lib \"pict-snipclass.ss\" \"slideshow\")\0" -2 0 55 #"(lib \"vertical-separator-snip.ss\" \"stepper\" \"private\")\0" -1 0 18 #"drscheme:xml-snip\0" -1 0 31 #"(lib \"xml-snipclass.ss\" \"xml\")\0" -1 0 21 #"drscheme:scheme-snip\0" -2 0 34 #"(lib \"scheme-snipclass.ss\" \"xml\")\0" -1 0 10 #"text-box%\0" -1 0 32 #"(lib \"text-snipclass.ss\" \"xml\")\0" -1 0 1 6 #"wxloc\0" - 0 0 64 0 1 #"\0" -0 75 1 #"\0" -0 10 90 -1 90 -1 3 -1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 255 255 255 1 -1 0 9 -#"Standard\0" -0 75 12 #"Courier New\0" -0 26 90 -1 90 -1 3 -1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 255 255 255 1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 -1 -1 2 24 -#"framework:default-color\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 150 0 150 0 0 0 -1 -1 2 15 -#"text:ports out\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 150 0 150 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 93 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 255 0 0 0 0 0 -1 --1 2 15 #"text:ports err\0" -0 -1 1 #"\0" -1 0 -1 -1 93 -1 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 175 0 0 0 -1 -1 2 17 -#"text:ports value\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 175 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 34 139 34 0 0 0 -1 --1 2 27 #"Matching Parenthesis Style\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 34 139 34 0 0 0 -1 --1 2 1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 37 -#"framework:syntax-color:scheme:symbol\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 38 -#"framework:syntax-color:scheme:keyword\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 38 38 128 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 194 116 31 0 0 0 -1 -1 2 -38 #"framework:syntax-color:scheme:comment\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 194 116 31 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 41 128 38 0 0 0 -1 -1 2 37 -#"framework:syntax-color:scheme:string\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 41 128 38 0 0 0 -1 -1 2 35 -#"framework:syntax-color:scheme:text\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 41 128 38 0 0 0 -1 -1 2 39 -#"framework:syntax-color:scheme:constant\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 41 128 38 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 132 60 36 0 0 0 -1 -1 2 49 -#"framework:syntax-color:scheme:hash-colon-keyword\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 132 60 36 0 0 0 -1 -1 2 42 -#"framework:syntax-color:scheme:parenthesis\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 132 60 36 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 36 -#"framework:syntax-color:scheme:error\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 36 -#"framework:syntax-color:scheme:other\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 16 -#"Misspelled Text\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 81 112 203 0 0 0 -1 -1 2 -38 #"drracket:check-syntax:lexically-bound\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 81 112 203 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 178 34 34 0 0 0 -1 -1 2 28 -#"drracket:check-syntax:set!d\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 178 34 34 0 0 0 -1 -1 2 37 -#"drracket:check-syntax:unused-require\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 36 -#"drracket:check-syntax:free-variable\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 255 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 68 0 203 0 0 0 -1 -1 2 31 -#"drracket:check-syntax:imported\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 68 0 203 0 0 0 -1 -1 2 47 -#"drracket:check-syntax:my-obligation-style-pref\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 178 34 34 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 0 116 0 0 0 0 -1 -1 2 50 -#"drracket:check-syntax:their-obligation-style-pref\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 0 116 0 0 0 0 -1 -1 2 48 -#"drracket:check-syntax:unk-obligation-style-pref\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 139 142 28 0 0 0 -1 -1 2 -49 #"drracket:check-syntax:both-obligation-style-pref\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 139 142 28 0 0 0 -1 -1 2 -26 #"plt:htdp:test-coverage-on\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 1 -#"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 1 0 0 0 0 0 0 255 165 0 0 0 0 -1 -1 2 27 -#"plt:htdp:test-coverage-off\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 1 0 0 0 0 0 0 255 165 0 0 0 0 -1 -1 4 1 -#"\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 4 4 #"XML\0" -0 70 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 2 37 #"plt:module-language:test-coverage-on\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 -1 -1 2 38 -#"plt:module-language:test-coverage-off\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 93 -1 -1 0 1 0 0 0 1 0 0 0 0 0 0 255 165 0 0 0 0 -1 -1 0 36 -#"mrlib/syntax-browser:subtitle-color\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 36 36 140 255 255 255 -1 --1 0 42 #"mrlib/syntax-browser:focused-syntax-color\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 34 139 34 255 255 255 -1 --1 4 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 4 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 0 255 0 0 0 -1 --1 4 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 0 255 0 0 0 -1 --1 4 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 100 0 0 0 0 -1 --1 4 1 #"\0" -0 71 1 #"\0" -1.0 0 -1 -1 93 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 255 0 0 0 0 0 -1 --1 2 1 #"\0" -0 70 1 #"\0" -1.0 0 -1 -1 93 -1 -1 -1 0 0 0 0 0 0 0 0 0 1.0 1.0 1.0 148 0 211 0 0 0 -1 --1 2 1 #"\0" -0 -1 1 #"\0" -1.0 0 -1 -1 -1 -1 -1 -1 1 0 0 0 0 0 0 0 0 1.0 1.0 1.0 0 0 255 0 0 0 -1 --1 0 1 #"\0" -0 -1 1 #"\0" -0 12 -1 -1 -1 -1 -1 -1 0 0 1 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 2 1 #"\0" -0 -1 1 #"\0" -0 12 -1 -1 -1 -1 -1 -1 0 0 1 0 0 0 1.0 1.0 1.0 1.0 1.0 1.0 0 0 0 0 0 0 --1 -1 2 1 #"\0" -0 -1 1 #"\0" -1 0 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 1 1 1 200 0 0 0 0 0 -1 -1 4 1 -#"\0" -0 -1 1 #"\0" -1.0 0 92 -1 -1 -1 -1 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 255 255 0 -1 -1 - 0 122 0 28 3 12 #"#lang racket" -0 0 24 29 1 #"\n" -0 0 24 29 1 #"\n" -0 0 24 29 1 #"\n" -0 0 24 3 1 #"(" -0 0 15 3 6 #"define" -0 0 24 3 2 #" (" -0 0 14 3 6 #"fringe" -0 0 24 3 1 #" " -0 0 14 3 4 #"tree" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 3 3 #" (" -0 0 15 3 4 #"cond" -0 0 24 3 3 #" ((" -0 0 14 3 5 #"null?" -0 0 24 3 1 #" " -0 0 14 3 4 #"tree" -0 0 24 3 2 #") " -0 0 14 3 4 #"null" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 3 10 #" ((" -0 0 14 3 3 #"not" -0 0 24 3 2 #" (" -0 0 14 3 5 #"pair?" -0 0 24 3 1 #" " -0 0 14 3 4 #"tree" -0 0 24 3 4 #")) (" -0 0 14 3 4 #"list" -0 0 24 3 1 #" " -0 0 14 3 4 #"tree" -0 0 24 3 2 #"))" -0 0 24 29 1 #"\n" -0 0 24 3 9 #" (" -0 0 14 3 4 #"else" -0 0 24 3 2 #" (" -0 0 14 3 6 #"append" -0 0 24 3 2 #" (" -0 0 14 3 6 #"fringe" -0 0 24 3 2 #" (" -0 0 14 3 3 #"car" -0 0 24 3 1 #" " -0 0 14 3 4 #"tree" -0 0 24 3 2 #"))" -0 0 24 29 1 #"\n" -0 0 24 3 23 #" (" -0 0 14 3 6 #"fringe" -0 0 24 3 2 #" (" -0 0 14 3 3 #"cdr" -0 0 24 3 1 #" " -0 0 14 3 4 #"tree" -0 0 24 3 6 #"))))))" -0 0 24 29 1 #"\n" -0 0 24 29 1 #"\n" -0 0 24 3 1 #"(" -0 0 15 3 6 #"define" -0 0 24 3 2 #" (" -0 0 14 3 7 #"subsets" -0 0 24 3 1 #" " -0 0 14 3 1 #"s" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 3 3 #" (" -0 0 14 3 2 #"if" -0 0 24 3 2 #" (" -0 0 14 3 5 #"null?" -0 0 24 3 1 #" " -0 0 14 3 1 #"s" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 3 7 #" (" -0 0 14 3 4 #"list" -0 0 24 3 1 #" " -0 0 14 3 4 #"null" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 3 7 #" (" -0 0 15 3 3 #"let" -0 0 24 3 3 #" ((" -0 0 14 3 4 #"rest" -0 0 24 3 2 #" (" -0 0 14 3 7 #"subsets" -0 0 24 3 2 #" (" -0 0 14 3 3 #"cdr" -0 0 24 3 1 #" " -0 0 14 3 1 #"s" -0 0 24 3 4 #"))))" -0 0 24 29 1 #"\n" -0 0 24 3 9 #" (" -0 0 14 3 7 #"display" -0 0 24 3 1 #" " -0 0 14 3 1 #"s" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 3 9 #" (" -0 0 14 3 7 #"newline" -0 0 24 3 1 #")" -0 0 24 29 1 #"\n" -0 0 24 3 9 #" (" -0 0 14 3 6 #"append" -0 0 24 3 1 #" " -0 0 14 3 4 #"rest" -0 0 24 3 2 #" (" -0 0 14 3 3 #"map" -0 0 24 3 2 #" (" -0 0 15 3 6 #"lambda" -0 0 24 3 2 #" (" -0 0 14 3 1 #"x" -0 0 24 3 3 #") (" -0 0 14 3 4 #"cons" -0 0 24 3 2 #" (" -0 0 14 3 3 #"car" -0 0 24 3 1 #" " -0 0 14 3 1 #"s" -0 0 24 3 2 #") " -0 0 14 3 1 #"x" -0 0 24 3 3 #")) " -0 0 14 3 4 #"rest" -0 0 24 3 5 #")))))" -0 0 24 29 1 #"\n" -0 0 24 3 2 #" " -0 0 diff --git a/Semestr 2/racket/solution.rkt b/Semestr 2/racket/solution.rkt deleted file mode 100644 index 3643668..0000000 --- a/Semestr 2/racket/solution.rkt +++ /dev/null @@ -1,14 +0,0 @@ -#lang racket - -(provide heapsort) (require "leftist.rkt") - -(define (heapsort xs) - (define (create-heap xs res) - (if (null? xs) - res - (create-heap (cdr xs) (heap-insert (cons (car xs) (car xs)) res)))) - (define (heap-to-list h) - (if (heap-empty? h) - null - (cons (elem-val (heap-min h)) (heap-to-list (heap-pop h))))) - (heap-to-list (create-heap xs empty-heap)))
\ No newline at end of file diff --git a/Semestr 2/topo/106185944_268984110829847_6553948354204680381_n.jpg b/Semestr 2/topo/106185944_268984110829847_6553948354204680381_n.jpg Binary files differdeleted file mode 100644 index 3e15629..0000000 --- a/Semestr 2/topo/106185944_268984110829847_6553948354204680381_n.jpg +++ /dev/null diff --git a/Semestr 2/topo/106656932_2682289525419459_8890828706710255563_n.jpg b/Semestr 2/topo/106656932_2682289525419459_8890828706710255563_n.jpg Binary files differdeleted file mode 100644 index cf85459..0000000 --- a/Semestr 2/topo/106656932_2682289525419459_8890828706710255563_n.jpg +++ /dev/null diff --git a/Semestr 2/topo/106703086_728253774716175_2262465163427979269_n.jpg b/Semestr 2/topo/106703086_728253774716175_2262465163427979269_n.jpg Binary files differdeleted file mode 100644 index d650007..0000000 --- a/Semestr 2/topo/106703086_728253774716175_2262465163427979269_n.jpg +++ /dev/null diff --git a/Semestr 2/topo/106792000_316914386368237_6535047497894014786_n.jpg b/Semestr 2/topo/106792000_316914386368237_6535047497894014786_n.jpg Binary files differdeleted file mode 100644 index 824dacf..0000000 --- a/Semestr 2/topo/106792000_316914386368237_6535047497894014786_n.jpg +++ /dev/null diff --git a/Semestr 2/topo/107093323_1187351634957579_7077220020141497805_n.jpg b/Semestr 2/topo/107093323_1187351634957579_7077220020141497805_n.jpg Binary files differdeleted file mode 100644 index 8ce9801..0000000 --- a/Semestr 2/topo/107093323_1187351634957579_7077220020141497805_n.jpg +++ /dev/null diff --git a/Semestr 2/topo/ACFrOgA9nUCrq9uSc6NvJxX3WRdWzjzunaans9KaKhMQKJdrLr6UW8LvP9BJrKFCP9iw4sZnygGqHO3idi_74KDTN2R91USZQTZz8tzhNReeRj8mm31ZqZfiYsDVgiI=.pdf b/Semestr 2/topo/ACFrOgA9nUCrq9uSc6NvJxX3WRdWzjzunaans9KaKhMQKJdrLr6UW8LvP9BJrKFCP9iw4sZnygGqHO3idi_74KDTN2R91USZQTZz8tzhNReeRj8mm31ZqZfiYsDVgiI=.pdf deleted file mode 100644 index 468dd99..0000000 --- a/Semestr 2/topo/ACFrOgA9nUCrq9uSc6NvJxX3WRdWzjzunaans9KaKhMQKJdrLr6UW8LvP9BJrKFCP9iw4sZnygGqHO3idi_74KDTN2R91USZQTZz8tzhNReeRj8mm31ZqZfiYsDVgiI=.pdf +++ /dev/null @@ -1,3629 +0,0 @@ -%PDF-1.7 -% -1 0 obj -<< -/AcroForm 2 0 R -/Lang (pl-PL) -/MarkInfo << -/Marked true ->> -/Metadata 3 0 R -/Pages 4 0 R -/StructTreeRoot 5 0 R -/Type /Catalog -/ViewerPreferences 6 0 R -/OpenAction 7 0 R ->> -endobj -8 0 obj -<< -/Author (Kkudalla) -/CreationDate (D:20200706133743+02'00') -/Creator <4D6963726F736F6674AE20576F726420646C61204D6963726F736F667420333635> -/ModDate (D:20200706133807+02'00') -/Producer <4D6963726F736F6674AE20576F726420646C61204D6963726F736F667420333635> ->> -endobj -2 0 obj -<< -/DA (/Helv 0 Tf 0 g ) -/DR << -/Encoding << -/PDFDocEncoding 9 0 R ->> -/Font << -/Helv 10 0 R -/MyriadPro-Regular 11 0 R -/ZaDb 12 0 R ->> ->> -/Fields [13 0 R] -/SigFlags 3 ->> -endobj -3 0 obj -<< -/Length 3324 -/Subtype /XML -/Type /Metadata ->> -stream
-<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> -<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c017 91.164374, 2020/03/05-20:41:30 "> - <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> - <rdf:Description rdf:about="" - xmlns:pdf="http://ns.adobe.com/pdf/1.3/" - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:xmp="http://ns.adobe.com/xap/1.0/" - xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"> - <pdf:Producer>Microsoft® Word dla Microsoft 365</pdf:Producer> - <dc:format>application/pdf</dc:format> - <dc:creator> - <rdf:Seq> - <rdf:li>Kkudalla</rdf:li> - </rdf:Seq> - </dc:creator> - <xmp:CreatorTool>Microsoft® Word dla Microsoft 365</xmp:CreatorTool> - <xmp:CreateDate>2020-07-06T13:37:43+02:00</xmp:CreateDate> - <xmp:ModifyDate>2020-07-06T13:38:07+02:00</xmp:ModifyDate> - <xmp:MetadataDate>2020-07-06T13:38:07+02:00</xmp:MetadataDate> - <xmpMM:DocumentID>uuid:AF6C3520-A81E-46E5-BE7E-22ACA2CA4797</xmpMM:DocumentID> - <xmpMM:InstanceID>uuid:39ce6e44-37dc-4684-94d5-a1c3cb352be5</xmpMM:InstanceID> - </rdf:Description> - </rdf:RDF> -</x:xmpmeta> - - - - - - - - - - - - - - - - - - - - - -<?xpacket end="w"?>
-endstream -endobj -4 0 obj -<< -/Count 2 -/Kids [14 0 R 15 0 R] -/Type /Pages ->> -endobj -5 0 obj -<< -/IDTree 16 0 R -/K [17 0 R] -/ParentTree 18 0 R -/ParentTreeNextKey 2 -/RoleMap 19 0 R -/Type /StructTreeRoot ->> -endobj -6 0 obj -<< -/DisplayDocTitle true ->> -endobj -7 0 obj -<< -/Type /Action -/S /JavaScript -/JS (this.print\({bUI:true,bSilent:false,bShrinkToFit:true}\);) ->> -endobj -9 0 obj -<< -/Differences [24 /breve /caron /circumflex /dotaccent /hungarumlaut /ogonek /ring /tilde 39 -/quotesingle 96 /grave 128 /bullet /dagger /daggerdbl /ellipsis /emdash /endash -/florin /fraction /guilsinglleft /guilsinglright /minus /perthousand /quotedblbase /quotedblleft /quotedblright /quoteleft -/quoteright /quotesinglbase /trademark /fi /fl /Lslash /OE /Scaron /Ydieresis /Zcaron -/dotlessi /lslash /oe /scaron /zcaron 160 /Euro 164 /currency 166 -/brokenbar 168 /dieresis /copyright /ordfeminine 172 /logicalnot /.notdef /registered /macron -/degree /plusminus /twosuperior /threesuperior /acute /mu 183 /periodcentered /cedilla /onesuperior -/ordmasculine 188 /onequarter /onehalf /threequarters 192 /Agrave /Aacute /Acircumflex /Atilde -/Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute -/Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply -/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute -/acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis -/igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde -/odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] -/Type /Encoding ->> -endobj -10 0 obj -<< -/BaseFont /Helvetica -/Encoding 9 0 R -/Name /Helv -/Subtype /Type1 -/Type /Font ->> -endobj -11 0 obj -<< -/BaseFont /MyriadPro-Regular -/Encoding /WinAnsiEncoding -/FirstChar 0 -/FontDescriptor 20 0 R -/LastChar 255 -/Subtype /Type1 -/Type /Font -/Widths [500 500 500 500 500 500 500 500 500 500 -500 500 500 500 500 500 500 500 500 500 -500 500 500 500 500 500 500 500 500 500 -500 500 212 230 337 497 513 792 605 188 -284 284 415 596 207 307 207 343 513 513 -513 513 513 513 513 513 513 513 207 207 -596 596 596 406 737 612 542 580 666 492 -487 646 652 239 370 542 472 804 658 689 -532 689 538 493 497 647 558 846 571 541 -553 284 341 284 596 500 300 482 569 448 -564 501 292 559 555 234 243 469 236 834 -555 549 569 563 327 396 331 551 481 736 -463 471 428 284 239 284 596 282 513 282 -207 513 356 1000 500 500 300 1156 493 255 -894 282 553 282 282 207 207 354 354 282 -500 1000 300 619 396 255 863 282 428 541 -212 230 513 513 513 513 239 519 300 677 -346 419 596 307 419 300 318 596 311 305 -300 553 512 207 300 244 355 419 759 759 -759 406 612 612 612 612 612 612 788 580 -492 492 492 492 239 239 239 239 671 658 -689 689 689 689 689 596 689 647 647 647 -647 541 531 548 482 482 482 482 482 482 -773 448 501 501 501 501 234 234 234 234 -541 555 549 549 549 549 549 596 549 551 -551 551 551 471 569 471] ->> -endobj -12 0 obj -<< -/BaseFont /ZapfDingbats -/Name /ZaDb -/Subtype /Type1 -/Type /Font ->> -endobj -13 0 obj -<< -/AP << -/N 21 0 R ->> -/DA (/MyriadPro-Regular 0 Tf 0 Tz 0 g) -/F 132 -/FT /Sig -/MK << ->> -/P 15 0 R -/Rect [415.34 499.989 518.347 549.339] -/Subtype /Widget -/T (Signature2) -/Type /Annot -/V 22 0 R ->> -endobj -14 0 obj -<< -/Contents [23 0 R 24 0 R 25 0 R 26 0 R 27 0 R 28 0 R 29 0 R 30 0 R] -/CropBox [0 0 595.2 841.8] -/Group << -/CS /DeviceRGB -/S /Transparency -/Type /Group ->> -/MediaBox [0 0 595.2 841.8] -/Parent 4 0 R -/Resources << -/ExtGState << -/GS10 31 0 R -/GS11 32 0 R ->> -/Font << -/F1 33 0 R -/F2 34 0 R -/F3 35 0 R -/F4 36 0 R -/F5 37 0 R -/F6 38 0 R -/F7 39 0 R ->> -/ProcSet [/PDF /Text /ImageB /ImageC /ImageI] ->> -/Rotate 0 -/StructParents 0 -/Tabs /S -/Type /Page ->> -endobj -15 0 obj -<< -/Annots [13 0 R] -/Contents 40 0 R -/CropBox [0 0 595.2 841.8] -/Group << -/CS /DeviceRGB -/S /Transparency -/Type /Group ->> -/MediaBox [0 0 595.2 841.8] -/Parent 4 0 R -/Resources << -/ExtGState << -/GS10 31 0 R -/GS11 32 0 R ->> -/Font << -/F1 33 0 R -/F2 34 0 R -/F3 35 0 R -/F4 36 0 R -/F5 37 0 R -/F7 39 0 R ->> -/ProcSet [/PDF /Text /ImageB /ImageC /ImageI] ->> -/Rotate 0 -/StructParents 1 -/Tabs /S -/Type /Page ->> -endobj -16 0 obj -<< -/Names [(Note 1) 41 0 R] ->> -endobj -17 0 obj -<< -/K [42 0 R 43 0 R 44 0 R 45 0 R 46 0 R 47 0 R 48 0 R 49 0 R 50 0 R 51 0 R -52 0 R 53 0 R 54 0 R 55 0 R 56 0 R 57 0 R 58 0 R 59 0 R 60 0 R 61 0 R -62 0 R 63 0 R 64 0 R 65 0 R 66 0 R 67 0 R 41 0 R 68 0 R 69 0 R 70 0 R -71 0 R 72 0 R 73 0 R 74 0 R 75 0 R 76 0 R 77 0 R 78 0 R 79 0 R 80 0 R -81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R 87 0 R 88 0 R 89 0 R 90 0 R -91 0 R 92 0 R 93 0 R 94 0 R 95 0 R 96 0 R 97 0 R 98 0 R 99 0 R] -/P 5 0 R -/S /Document -/Type /StructElem ->> -endobj -18 0 obj -<< -/Nums [0 [100 0 R 101 0 R 102 0 R 103 0 R 45 0 R 46 0 R 47 0 R 48 0 R 49 0 R 50 0 R -51 0 R 52 0 R 53 0 R 104 0 R 105 0 R 55 0 R 56 0 R 57 0 R 58 0 R 59 0 R -60 0 R 61 0 R 62 0 R 63 0 R 64 0 R 65 0 R 66 0 R 106 0 R 107 0 R 108 0 R -109 0 R 110 0 R 111 0 R 112 0 R 113 0 R 114 0 R 115 0 R 116 0 R 117 0 R 118 0 R -119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 68 0 R 69 0 R 70 0 R -71 0 R 126 0 R 127 0 R 73 0 R 74 0 R 75 0 R 128 0 R 76 0 R 129 0 R 77 0 R -130 0 R 131 0 R 132 0 R 133 0 R 134 0 R 135 0 R] - 1 [136 0 R 137 0 R 78 0 R 79 0 R 80 0 R 138 0 R 139 0 R 140 0 R 82 0 R 83 0 R -84 0 R 85 0 R 86 0 R 87 0 R 88 0 R 141 0 R 142 0 R 90 0 R 91 0 R 92 0 R -93 0 R 94 0 R 95 0 R 96 0 R 97 0 R 98 0 R 99 0 R] -] ->> -endobj -19 0 obj -<< -/Annotation /Sect -/Artifact /Sect -/Chart /Sect -/Chartsheet /Part -/Diagram /Figure -/Dialogsheet /Part -/Endnote /Note -/Footer /Sect -/Footnote /Note -/Header /Sect -/InlineShape /Sect -/Macrosheet /Part -/Slide /Part -/Textbox /Sect -/Workbook /Document -/Worksheet /Part ->> -endobj -20 0 obj -<< -/Ascent 952 -/CapHeight 674 -/CharSet (/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis) -/Descent -250 -/Flags 32 -/FontBBox [-157 -250 1126 952] -/FontFamily (Myriad Pro) -/FontFile3 143 0 R -/FontName /MyriadPro-Regular -/FontStretch /Normal -/FontWeight 400 -/ItalicAngle 0 -/StemV 88 -/Type /FontDescriptor -/XHeight 484 ->> -endobj -21 0 obj -<< -/Length 7 -/BBox [0.0 0.0 103.007 49.3506] -/Resources << -/XObject << -/FRM 144 0 R ->> ->> -/Subtype /Form -/Type /XObject ->> -stream
-/FRM Do
-endstream -endobj -22 0 obj -<< -/ByteRange [0 148276 206888 135679] -/Contents <30826F0406092A864886F70D010702A0826EF530826EF1020101310F300D06096086480165030402010500300B06092A864886F70D010701A0820DAD308206943082047CA00302010202141A5734B0D472D251E1D37CFE3D796AC117102490300D06092A864886F70D01010D0500306F310B300906035504061302504C311D301B060355040A0C144E61726F646F77792042616E6B20506F6C736B693126302406035504030C1D4E61726F646F77652043656E7472756D20436572747966696B61636A693119301706035504610C10564154504C2D35323530303038313938301E170D3137303231343132323631395A170D3238303231343233353935395A306F3119301706035504610C10564154504C2D39353132333532333739310B300906035504061302504C311C301A060355040A0C134575726F436572742053702E207A206F2E6F2E3127302506035504030C1E43656E7472756D204B77616C6966696B6F77616E65204575726F4365727430820222300D06092A864886F70D01010105000382020F003082020A0282020100D0F7EAC0E3C610864FF50A76823A98316BAB7F62BAE9ACC87C6BCACBD45CDE6539990F480FC14CBC2578762236229D8C7A0A96BB19DE7DD6B24C4AF83F7CD22A8DDD67C61FA595D711B92C33089C6274AF15CBF99AAFF628C3035CF3381BF9D343B7AB54861E812D6D0BD606AAB494FF3213B35D0E3DDF25B8282D301B0B19748548DDC4CA00B597D89E606FB6AA46386CC4F6574D77F26B5A93C4024905415D30D89AF4FD45C3E577C0E3A09BC89CE95FB350AD44BBF156053F2269BA4958230AA8C7E3A3F83C1A1F5691941371F28AD0539B621A2AD239E8BB744275CDA956D6519D726091782F58A91081DE53CC8ABAEC72B0DA8F4ADAE0D1047883EE0D831016C709319A76A8D4E6FE6F088E5D9E5C42413D79F7C9392F2C6D19EEFC054D6685CE8089D2E1C5CCD2EBD47F0966CB6701CF05E012C84EAD6D00FA7F797956E2A55BBF8019EF1CFE1C0401979ED852ACB789B26453DE8BA56416A2E2836231457C0A002302979BA7F73D322C5B71B5444315D0323D0F50AD0AEC5F47F6F88B14FCFA6A6EB5841D42130B5B6112B380F45B8DD7B0C9FF6EBA0DE17CC4F17F560A39D120A6DB06A731E88E45013C14210A841300C096D3A647050341A252933360AEC26EB6DE2E419791B74B4EA1FF1A0280B30EB904BB427E92ACCC6C36F19960C87557A0AC2DE74EBD682816EB38A1FDA4C6EB7B9D0C66E28028C58D9A761B0203010001A382012630820122300F0603551D130101FF040530030101FF3081AC0603551D230481A43081A1801429B3C8C4DFA387F866051258FD462AB8980D7987A173A471306F310B300906035504061302504C311D301B060355040A0C144E61726F646F77792042616E6B20506F6C736B693126302406035504030C1D4E61726F646F77652043656E7472756D20436572747966696B61636A693119301706035504610C10564154504C2D35323530303038313938821440F8F78AB0E364105691C8D9E02CF8C1C6400A4630310603551D200101FF0427302530230604551D2000301B301906082B06010505070201160D7777772E6E63636572742E706C300E0603551D0F0101FF040403020106301D0603551D0E0416041474627099FF1B603BC464B5841FA3150C5CCB5FBD300D06092A864886F70D01010D050003820201007FA1A8393E66C6D57B7A372DB71A7CB0335A77A5C394660F6C3D33931E42A25FA7ACD09F5751276C6840A5FD787468A795B68A8C44F2D195FAA3BFFE48AEB100495DB87AEC76F87B0AE5F8992B217C31C8E3C4EAF9CCEF41AFF0F5B214CEBD22F2ED9FB94C77E947F58D22F9063D3B2A8B8E55B478AA4DAEED3571C70AC31836A3EBECB2F5B5C6590817F1FB629FAF0699FE4CC1312FB01D50EE8D1A8F352582AB69AAA14FDE77C824D51BC722A092BFDB94737A001E3F4521F7268611ABEE5F6F423B8788AAD3496660809564452C174583AFAE84297E460EB56FDE4A47534D946255A3DA43862BEE8EC265013C0260ED039D76A7EF0EB35411EB997A47BB5C7BB1763B458CAD98B5CC3457150576231263EE3D6EACC2DF24C888DF9CC135088BE1B25E51CB031F739A5542815658BABC4DD3EE120A8DC77837E43ED3CA03382916363D5939FBDADD13AB04B20EFB1A956604CBD53EE66461442CA65D55B52A05D50E9BE575F9BB6E96EB9B21A33254E6A87ED5248670BFC11DD7ABEE4F38555C9FE3D8896A49D201768F031ED506589A5DE3B4205B58BDB96A5E68AE3CAE57A3181AC697B9C4F0FE654BBE8D5C9B453BE021F38A3E524C2321EE7D1B908791472F8E7E12803D1BC08CBCE5843FA69CABE0B2137CFDC6FB00E1FBED8B6274CA377D851F41EF3655DB229F778C004DB027A5F805DF844C7B0CB09F21FAC5E1D130820711308204F9A003020102020B51434130335F0200040400300D06092A864886F70D01010B0500306F3119301706035504610C10564154504C2D39353132333532333739310B300906035504061302504C311C301A060355040A0C134575726F436572742053702E207A206F2E6F2E3127302506035504030C1E43656E7472756D204B77616C6966696B6F77616E65204575726F43657274301E170D3139303831393039323932375A170D3231303831383039323932375A30733122302006035504030C1941445249414E41204557454C494E41204D454459C583534B41311A301806035504050C11504E4F504C2D38303037313130383036353112301006035504040C094D454459C583534B413110300E060355042A0C0741445249414E41310B300906035504060C02504C308201A2300D06092A864886F70D01010105000382018F003082018A028201810097B18BD986A1CC9EF8163917F6ECC60D9D3EAC7266A4562EC61011591BE7118EB1BA94D3A86100BF05D410876698C1AD52F382358A28EF00F26F3E6AF26F86F78EF4EE24B96F4395DC408E6E18FAADA9F09EC5F3C47B007709FBB22783818C084C34B6E05F2C3EFBF3E5131F43F6FFEDC31750D911F753D7A9AD3AD4C6B3C0C1C379B7F5B93908D7EE5691C1E0D0C0E334943C65B47AFEA66EE5CB81A86461BBA4BB92363266A35B1D6B903F7BD342EB1B5463E90D6FEDED6E9B6F7382945FB0B88F8D8AB7AD4852CD4406CD2FD9FC9CBE99449BEBE608EC05A363BB0FF9147B066157E045C7A965852F379F2F7A36674F1894D57ACA5417074E0DAAA27D008477C0778C38CA88DAD6A6DEE9FE110F5CC5004D40274DB3CE8F084324E8E371518349339E19DE449A97AEE4517ADF5A4BD44F0595D1660575A1619EBFC77E9FA3261CCFEE30B0E508E1470719F93C148DE5A0821074AE7468E40B1E04B7320F4D2A60787B5D7BA679666E44AB7580111579FB17DE2E6948CB88C5C38C0695E4EB0203010001A382022830820224301F0603551D2304183016801474627099FF1B603BC464B5841FA3150C5CCB5FBD301D0603551D0E041604149B410D4D610FB58C12AF87E64658A00A50F02DBB300F0603551D130101FF04053003010100300E0603551D0F0101FF0404030206403081D70603551D200101FF0481CC3081C93081B1060A2A84680186F87F0102023081A2303006082B060105050702011624687474703A2F2F7777772E6575726F636572742E706C2F7265706F7A79746F7269756D2F306E06082B0601050507020230620C60436572747966696B617420777973746177696F6E79207A676F646E6965207A207A61736164616D69206F706973616E796D69207720646F6B756D656E63696520506F6C6974796B6120436572747966696B61636A6920776572736A6120322E303009060704008BEC4001023008060604008F7A010230310603551D1F042A30283026A024A0228620687474703A2F2F63726C2E6575726F636572742E706C2F71636130332E63726C307B06082B06010505070101046F306D302806082B06010505073001861C687474703A2F2F63726C2E6575726F636572742E706C2F4F4353502F304106082B06010505073002863568747470733A2F2F6575726F636572742E706C2F7075622F507261776F2F51434130335F4575726F636572745F323031372E646572303706082B06010505070103042B30293008060604008E4601013008060604008E4601043013060604008E4601063009060704008E46010601300D06092A864886F70D01010B05000382020100A383702A04DD1450F0B2B864D20CC314D405F80400F730A8D5B2E655AF12E656EFE76CAD4FA528E7CDE08C8688FFC33149132B18C10801EAF095C221EDB494CEF54643EAA0474FEBDCE4F4AE8ECCA634D162E0C0584C58357CF643FA00CF6A8318A3CCE94AFB26B79DB3D8FDA6AF6A5954376CB888789A2C681E430510B09F526A05C437B742D2986490E867BBB630260CB38ACFEDB1914E4148B29F40BA937171B2526D8E3BCE3E8F0F2475E22D45B45A3213E69A23DB126B0CE635D63D86145807B17C14F37500B147B3FFE26A5C6BBCEB8976083285F3D0C1982E3A162CD7E8702D172DADD4204BC94D131F8C2CDDF152361F15CE73E33177996BEE537AB9ED4B6B46F8C3509BC309468BC1012CA68D7C8BDA8870C5855440FF01318B5F955BA513B1454C80F4651C2A329836FEF680106EF47DF0CC70EE8A101B061BC50A9CDDD5C936FC5CC119137E89B17BD9A7DB936E74B9E8CDBBB728953B7831A2DD954EF92148C3BCA8C22006D1CBA79D383F9A5C915B6C721D46134C307BE59026F779D90DD2F69DC8D4F6E1E072855FF2368D611627F3925C3706D491D58C35E1809866D1A8C6D89D887D381D8828BEBBE16A39310387EDC94D6B6AD2150DE7134036FB7A4BA34761ABE66A2EC42D86F53ACA59A277ACA40C5C292E6919DCB55B6B04D87D60BE1436EC62F57FBE3DC941F2FB5ACE402D5203AE60F97B004EB7933182611B30826117020101307E306F3119301706035504610C10564154504C2D39353132333532333739310B300906035504061302504C311C301A060355040A0C134575726F436572742053702E207A206F2E6F2E3127302506035504030C1E43656E7472756D204B77616C6966696B6F77616E65204575726F43657274020B51434130335F0200040400300D06096086480165030402010500A0825EEE301806092A864886F70D010903310B06092A864886F70D010701302F06092A864886F70D010904312204202185C186075BD6983C93408D3816E6C8D99987A15F2BEB7666EA73EC13645AFB30825E9F06092A864886F72F01010831825E9030825E8CA0825E8830825E8430825E8030825C68020101300D06092A864886F70D01010B0500306F3119301706035504610C10564154504C2D39353132333532333739310B300906035504061302504C311C301A060355040A0C134575726F436572742053702E207A206F2E6F2E3127302506035504030C1E43656E7472756D204B77616C6966696B6F77616E65204575726F43657274170D3230303730363035303030315A170D3230303730373035303030315A30825B91302402023634170D3138303230313130313333395A300F300D0603551D1501010004030A0105302402023633170D3138303230313130313335325A300F300D0603551D1501010004030A0105302402023639170D3138303230323132303031375A300F300D0603551D1501010004030A010130250203313132170D3138303532323134303633335A300F300D0603551D1501010004030A010530250203313936170D3138303730333130323735375A300F300D0603551D1501010004030A010130250203333239170D3138303730393134323634375A300F300D0603551D1501010004030A01053026020431313332170D3138303732353037343532345A300F300D0603551D1501010004030A01053026020431313238170D3138303732353037343634315A300F300D0603551D1501010004030A010530250203353436170D3138303930333038343531395A300F300D0603551D1501010004030A01033026020431383237170D3138303930353134333731355A300F300D0603551D1501010004030A01003026020431383236170D3138303930363037313634355A300F300D0603551D1501010004030A01043026020431383235170D3138303930363037313734355A300F300D0603551D1501010004030A01043026020431343437170D3138303931323131343733345A300F300D0603551D1501010004030A010430250203343739170D3138303931333035343032305A300F300D0603551D1501010004030A01053026020432343935170D3138303931393035313935385A300F300D0603551D1501010004030A01043026020433373330170D3138313032393132333432375A300F300D0603551D1501010004030A01043026020432373439170D3138313130353038313334305A300F300D0603551D1501010004030A01053026020433383134170D3138313130383132323533335A300F300D0603551D1501010004030A01043026020431303633170D3138313130383132323534305A300F300D0603551D1501010004030A01043026020436353436170D3139303131313132333931355A300F300D0603551D1501010004030A01043026020434363939170D3139303131353138313632325A300F300D0603551D1501010004030A01013026020433333232170D3139303131363133343735325A300F300D0603551D1501010004030A0105302402023833170D3139303133303133343033355A300F300D0603551D1501010004030A010530250203353139170D3139303230373130353331355A300F300D0603551D1501010004030A01013026020433343632170D3139303230383130343235315A300F300D0603551D1501010004030A01013026020437383832170D3139303232323038343332395A300F300D0603551D1501010004030A01013026020439363937170D3139303232373133343833315A300F300D0603551D1501010004030A01013026020435373232170D3139303331353039313030355A300F300D0603551D1501010004030A01043026020435373234170D3139303331353039313034305A300F300D0603551D1501010004030A0104302702053130313839170D3139303331353039313132355A300F300D0603551D1501010004030A0104302702053130363835170D3139303331353039313235305A300F300D0603551D1501010004030A01053026020439303233170D3139303331353039313435335A300F300D0603551D1501010004030A010530250203333832170D3139303332373039333133395A300F300D0603551D1501010004030A0101302D020B51434130335F0104070205170D3139303431353038303431395A300F300D0603551D1501010004030A01043026020435393133170D3139303431353038303534345A300F300D0603551D1501010004030A0104302D020B51434130335F0101050908170D3139303431363131333035345A300F300D0603551D1501010004030A0105302D020B51434130335F0105000409170D3139303432393039333635335A300F300D0603551D1501010004030A0101302D020B51434130335F0104060106170D3139303530373037303833335A300F300D0603551D1501010004030A0101302D020B51434130335F0104050800170D3139303530383131353634375A300F300D0603551D1501010004030A0104302D020B51434130335F0105050803170D3139303530383131353734315A300F300D0603551D1501010004030A0101302D020B51434130335F0105040801170D3139303530383131353830345A300F300D0603551D1501010004030A0101302D020B51434130335F0104070907170D3139303530383131353832325A300F300D0603551D1501010004030A0101302D020B51434130335F0104060806170D3139303530383131353930385A300F300D0603551D1501010004030A0101302D020B51434130335F0104020407170D3139303530383131353935345A300F300D0603551D1501010004030A0101302D020B51434130335F0104020103170D3139303530383132303032355A300F300D0603551D1501010004030A0105302D020B51434130335F0104020606170D3139303530383132303034375A300F300D0603551D1501010004030A01013026020431373734170D3139303530383132303131335A300F300D0603551D1501010004030A01013026020431373736170D3139303530383132303133315A300F300D0603551D1501010004030A01013026020433383434170D3139303530383133303235325A300F300D0603551D1501010004030A01013026020435333432170D3139303530393038343934395A300F300D0603551D1501010004030A01013026020432343631170D3139303531333131333432355A300F300D0603551D1501010004030A0101302702053130373836170D3139303532393039323435325A300F300D0603551D1501010004030A01043026020436323332170D3139303630373038323032305A300F300D0603551D1501010004030A01013026020431343332170D3139303631383039303333315A300F300D0603551D1501010004030A0101302D020B51434130335F0108010704170D3139303731353038323834305A300F300D0603551D1501010004030A0105302D020B51434130335F0108010505170D3139303731353038323834395A300F300D0603551D1501010004030A0105302D020B51434130335F0108060605170D3139303830313132343132335A300F300D0603551D1501010004030A0104302D020B51434130335F0106010108170D3139303830313132343432365A300F300D0603551D1501010004030A0101302D020B51434130335F0109070406170D3139303830313132343533375A300F300D0603551D1501010004030A0104302D020B51434130335F0109070302170D3139303830313132343630315A300F300D0603551D1501010004030A0104302D020B51434130335F0102010609170D3139303830313132343633345A300F300D0603551D1501010004030A0105302702053130343036170D3139303830313132343835375A300F300D0603551D1501010004030A0104302D020B51434130335F0105080608170D3139303830323131313635315A300F300D0603551D1501010004030A0104302D020B51434130335F0101060503170D3139303830353132313632385A300F300D0603551D1501010004030A0105302D020B51434130335F0108010707170D3139303830363037313835325A300F300D0603551D1501010004030A0101302D020B51434130335F0107090503170D3139303832393130333335375A300F300D0603551D1501010004030A0101302D020B51434130335F0103020407170D3139303833303133313435365A300F300D0603551D1501010004030A0104302D020B51434130335F0101090500170D3139303932343037323532375A300F300D0603551D1501010004030A0101302D020B51434130335F0201070703170D3139303932373039303835345A300F300D0603551D1501010004030A0101302D020B51434130335F0103040508170D3139313030383039323735325A300F300D0603551D1501010004030A01053026020439343537170D3139313032333039303430345A300F300D0603551D1501010004030A0105302D020B51434130335F0202040602170D3139313032333039303735305A300F300D0603551D1501010004030A0105302D020B51434130335F0106000304170D3139313032333039313033355A300F300D0603551D1501010004030A0101302D020B51434130335F0202000105170D3139313032333039313430395A300F300D0603551D1501010004030A0104302D020B51434130335F0107020008170D3139313130383037353532385A300F300D0603551D1501010004030A0105302D020B51434130335F0202070308170D3139313130383037353535385A300F300D0603551D1501010004030A0101302D020B51434130335F0108040708170D3139313130383037353632355A300F300D0603551D1501010004030A01033026020431383437170D3139313131353131313835375A300F300D0603551D1501010004030A01043026020431323233170D3139313131353131313930355A300F300D0603551D1501010004030A01043026020433353234170D3139313131353131323330315A300F300D0603551D1501010004030A01053026020433353531170D3139313131353131323331305A300F300D0603551D1501010004030A0105302D020B51434130335F0105060807170D3139313132303131303531375A300F300D0603551D1501010004030A0101302D020B51434130335F0103000405170D3139313132353134343532345A300F300D0603551D1501010004030A01013026020437353436170D3139313132383039303834305A300F300D0603551D1501010004030A0105302D020B51434130335F0107020606170D3139313231323133303635345A300F300D0603551D1501010004030A0101302D020B51434130335F0203040609170D3139313231333039333933335A300F300D0603551D1501010004030A0105302D020B51434130335F0200030900170D3139313231373134333234315A300F300D0603551D1501010004030A0105302D020B51434130335F0201020704170D3139313231373134333332365A300F300D0603551D1501010004030A0105302D020B51434130335F0201060100170D3139313231383131323634355A300F300D0603551D1501010004030A0105302D020B51434130335F0201070309170D3139313233303130303732375A300F300D0603551D1501010004030A0101302D020B51434130335F0201070306170D3139313233303130303831395A300F300D0603551D1501010004030A01013026020433333233170D3139313233303130303931385A300F300D0603551D1501010004030A0105302D020B51434130335F0103070606170D3139313233303130303935375A300F300D0603551D1501010004030A0101302D020B51434130335F0203030509170D3139313233303130313132355A300F300D0603551D1501010004030A0104302D020B51434130335F0203090705170D3230303130333131303234315A300F300D0603551D1501010004030A0105302D020B51434130335F0204010605170D3230303130333131303330315A300F300D0603551D1501010004030A0103302D020B51434130335F0200090606170D3230303131303130313132315A300F300D0603551D1501010004030A0104302D020B51434130335F0105080501170D3230303131343132303733305A300F300D0603551D1501010004030A0101302702053131343630170D3230303131343132323832395A300F300D0603551D1501010004030A01013026020437383430170D3230303131373039333633385A300F300D0603551D1501010004030A0101302D020B51434130335F0108040302170D3230303132303037313333375A300F300D0603551D1501010004030A01013026020436303130170D3230303132303133353433345A300F300D0603551D1501010004030A0101302D020B51434130335F0203020404170D3230303132303231343730395A300F300D0603551D1501010004030A0101302D020B51434130335F0203020500170D3230303132303231343731305A300F300D0603551D1501010004030A0101302D020B51434130335F0203020501170D3230303132303231343731305A300F300D0603551D1501010004030A0101302D020B51434130335F0203020508170D3230303132303231343731305A300F300D0603551D1501010004030A0101302D020B51434130335F0203020605170D3230303132303231343731315A300F300D0603551D1501010004030A0101302D020B51434130335F0203020800170D3230303132303231343731315A300F300D0603551D1501010004030A0101302D020B51434130335F0203020805170D3230303132303231343731315A300F300D0603551D1501010004030A0101302D020B51434130335F0203020807170D3230303132303231343731325A300F300D0603551D1501010004030A0101302D020B51434130335F0203020809170D3230303132303231343731325A300F300D0603551D1501010004030A0101302D020B51434130335F0203020900170D3230303132303231343731325A300F300D0603551D1501010004030A0101302D020B51434130335F0203020901170D3230303132303231343731335A300F300D0603551D1501010004030A0101302D020B51434130335F0203020902170D3230303132303231343731335A300F300D0603551D1501010004030A0101302D020B51434130335F0203030002170D3230303132303231343731335A300F300D0603551D1501010004030A0101302D020B51434130335F0203030005170D3230303132303231343731345A300F300D0603551D1501010004030A0101302D020B51434130335F0203030103170D3230303132303231343731345A300F300D0603551D1501010004030A0101302D020B51434130335F0203030107170D3230303132303231343731345A300F300D0603551D1501010004030A0101302D020B51434130335F0203030200170D3230303132303231343731355A300F300D0603551D1501010004030A0101302D020B51434130335F0203030205170D3230303132303231343731355A300F300D0603551D1501010004030A0101302D020B51434130335F0203030206170D3230303132303231343731355A300F300D0603551D1501010004030A0101302D020B51434130335F0203030302170D3230303132303231343731365A300F300D0603551D1501010004030A0101302D020B51434130335F0203030504170D3230303132303231343731365A300F300D0603551D1501010004030A0101302D020B51434130335F0203030608170D3230303132303231343731375A300F300D0603551D1501010004030A0101302D020B51434130335F0203030609170D3230303132303231343731375A300F300D0603551D1501010004030A0101302D020B51434130335F0203030700170D3230303132303231343731375A300F300D0603551D1501010004030A0101302D020B51434130335F0203030802170D3230303132303231343731385A300F300D0603551D1501010004030A0101302D020B51434130335F0203030808170D3230303132303231343731385A300F300D0603551D1501010004030A0101302D020B51434130335F0203030909170D3230303132303231343731385A300F300D0603551D1501010004030A0101302D020B51434130335F0203040002170D3230303132303231343731395A300F300D0603551D1501010004030A0101302D020B51434130335F0203040004170D3230303132303231343731395A300F300D0603551D1501010004030A0101302D020B51434130335F0203040101170D3230303132303231343731395A300F300D0603551D1501010004030A0101302D020B51434130335F0203040200170D3230303132303231343732305A300F300D0603551D1501010004030A0101302D020B51434130335F0203040206170D3230303132303231343732305A300F300D0603551D1501010004030A0101302D020B51434130335F0203040208170D3230303132303231343732305A300F300D0603551D1501010004030A0101302D020B51434130335F0203040306170D3230303132303231343732315A300F300D0603551D1501010004030A0101302D020B51434130335F0203040309170D3230303132303231343732315A300F300D0603551D1501010004030A0101302D020B51434130335F0203040400170D3230303132303231343732315A300F300D0603551D1501010004030A0101302D020B51434130335F0203040401170D3230303132303231343732325A300F300D0603551D1501010004030A0101302D020B51434130335F0203040403170D3230303132303231343732325A300F300D0603551D1501010004030A0101302D020B51434130335F0203040404170D3230303132303231343732325A300F300D0603551D1501010004030A0101302D020B51434130335F0203040405170D3230303132303231343732335A300F300D0603551D1501010004030A0101302D020B51434130335F0203040407170D3230303132303231343732335A300F300D0603551D1501010004030A0101302D020B51434130335F0203040409170D3230303132303231343732345A300F300D0603551D1501010004030A0101302D020B51434130335F0203040509170D3230303132303231343732345A300F300D0603551D1501010004030A0101302D020B51434130335F0203040602170D3230303132303231343732345A300F300D0603551D1501010004030A0101302D020B51434130335F0203040607170D3230303132303231343732355A300F300D0603551D1501010004030A0101302D020B51434130335F0203040608170D3230303132303231343732355A300F300D0603551D1501010004030A0101302D020B51434130335F0203040700170D3230303132303231343732355A300F300D0603551D1501010004030A0101302D020B51434130335F0203040702170D3230303132303231343732365A300F300D0603551D1501010004030A0101302D020B51434130335F0203040708170D3230303132303231343732365A300F300D0603551D1501010004030A0101302D020B51434130335F0203040709170D3230303132303231343732365A300F300D0603551D1501010004030A0101302D020B51434130335F0203040803170D3230303132303231343732375A300F300D0603551D1501010004030A0101302D020B51434130335F0203040900170D3230303132303231343732375A300F300D0603551D1501010004030A0101302D020B51434130335F0203040902170D3230303132303231343732375A300F300D0603551D1501010004030A0101302D020B51434130335F0203040905170D3230303132303231343732385A300F300D0603551D1501010004030A0101302D020B51434130335F0203050004170D3230303132303231343732385A300F300D0603551D1501010004030A0101302D020B51434130335F0203050108170D3230303132303231343732385A300F300D0603551D1501010004030A0101302D020B51434130335F0203050203170D3230303132303231343732395A300F300D0603551D1501010004030A0101302D020B51434130335F0203050207170D3230303132303231343732395A300F300D0603551D1501010004030A0101302D020B51434130335F0203050300170D3230303132303231343733305A300F300D0603551D1501010004030A0101302D020B51434130335F0203050401170D3230303132303231343733305A300F300D0603551D1501010004030A0101302D020B51434130335F0203050404170D3230303132303231343733305A300F300D0603551D1501010004030A0101302D020B51434130335F0203050405170D3230303132303231343733315A300F300D0603551D1501010004030A0101302D020B51434130335F0203050503170D3230303132303231343733315A300F300D0603551D1501010004030A0101302D020B51434130335F0203050509170D3230303132303231343733315A300F300D0603551D1501010004030A0101302D020B51434130335F0203050600170D3230303132303231343733325A300F300D0603551D1501010004030A0101302D020B51434130335F0203050605170D3230303132303231343733325A300F300D0603551D1501010004030A0101302D020B51434130335F0203050607170D3230303132303231343733325A300F300D0603551D1501010004030A0101302D020B51434130335F0203050706170D3230303132303231343733335A300F300D0603551D1501010004030A0101302D020B51434130335F0203050707170D3230303132303231343733335A300F300D0603551D1501010004030A0101302D020B51434130335F0203050708170D3230303132303231343733335A300F300D0603551D1501010004030A0101302D020B51434130335F0203050800170D3230303132303231343733345A300F300D0603551D1501010004030A0101302D020B51434130335F0203050801170D3230303132303231343733345A300F300D0603551D1501010004030A0101302D020B51434130335F0203050807170D3230303132303231343733345A300F300D0603551D1501010004030A0101302D020B51434130335F0203050808170D3230303132303231343733355A300F300D0603551D1501010004030A0101302D020B51434130335F0203050900170D3230303132303231343733355A300F300D0603551D1501010004030A0101302D020B51434130335F0203050901170D3230303132303231343733355A300F300D0603551D1501010004030A0101302D020B51434130335F0203050905170D3230303132303231343733365A300F300D0603551D1501010004030A0101302D020B51434130335F0203050907170D3230303132303231343733365A300F300D0603551D1501010004030A0101302D020B51434130335F0203050908170D3230303132303231343733375A300F300D0603551D1501010004030A0101302D020B51434130335F0203050909170D3230303132303231343733375A300F300D0603551D1501010004030A0101302D020B51434130335F0203060000170D3230303132303231343733375A300F300D0603551D1501010004030A0101302D020B51434130335F0203060003170D3230303132303231343733385A300F300D0603551D1501010004030A0101302D020B51434130335F0203060007170D3230303132303231343733385A300F300D0603551D1501010004030A0101302D020B51434130335F0203060009170D3230303132303231343733385A300F300D0603551D1501010004030A0101302D020B51434130335F0203060102170D3230303132303231343733395A300F300D0603551D1501010004030A0101302D020B51434130335F0203060103170D3230303132303231343733395A300F300D0603551D1501010004030A0101302D020B51434130335F0203060200170D3230303132303231343733395A300F300D0603551D1501010004030A0101302D020B51434130335F0203060301170D3230303132303231343734305A300F300D0603551D1501010004030A0101302D020B51434130335F0203060306170D3230303132303231343734305A300F300D0603551D1501010004030A0101302D020B51434130335F0203060401170D3230303132303231343734305A300F300D0603551D1501010004030A0101302D020B51434130335F0203060403170D3230303132303231343734315A300F300D0603551D1501010004030A0101302D020B51434130335F0203060405170D3230303132303231343734315A300F300D0603551D1501010004030A0101302D020B51434130335F0203060406170D3230303132303231343734325A300F300D0603551D1501010004030A0101302D020B51434130335F0203060601170D3230303132303231343734325A300F300D0603551D1501010004030A0101302D020B51434130335F0203060604170D3230303132303231343734325A300F300D0603551D1501010004030A0101302D020B51434130335F0203060605170D3230303132303231343734335A300F300D0603551D1501010004030A0101302D020B51434130335F0203060608170D3230303132303231343734335A300F300D0603551D1501010004030A0101302D020B51434130335F0203060609170D3230303132303231343734335A300F300D0603551D1501010004030A0101302D020B51434130335F0203060700170D3230303132303231343734345A300F300D0603551D1501010004030A0101302D020B51434130335F0203060705170D3230303132303231343734345A300F300D0603551D1501010004030A0101302D020B51434130335F0203060806170D3230303132303231343734345A300F300D0603551D1501010004030A0101302D020B51434130335F0203060807170D3230303132303231343734355A300F300D0603551D1501010004030A0101302D020B51434130335F0203060808170D3230303132303231343734355A300F300D0603551D1501010004030A0101302D020B51434130335F0203060900170D3230303132303231343734355A300F300D0603551D1501010004030A0101302D020B51434130335F0203060908170D3230303132303231343734365A300F300D0603551D1501010004030A0101302D020B51434130335F0203070003170D3230303132303231343734365A300F300D0603551D1501010004030A0101302D020B51434130335F0203070005170D3230303132303231343734375A300F300D0603551D1501010004030A0101302D020B51434130335F0203070007170D3230303132303231343734375A300F300D0603551D1501010004030A0101302D020B51434130335F0203070009170D3230303132303231343734375A300F300D0603551D1501010004030A0101302D020B51434130335F0203070102170D3230303132303231343734385A300F300D0603551D1501010004030A0101302D020B51434130335F0203070107170D3230303132303231343734385A300F300D0603551D1501010004030A0101302D020B51434130335F0203070200170D3230303132303231343734385A300F300D0603551D1501010004030A0101302D020B51434130335F0203070201170D3230303132303231343734395A300F300D0603551D1501010004030A0101302D020B51434130335F0203070206170D3230303132303231343734395A300F300D0603551D1501010004030A0101302D020B51434130335F0203070306170D3230303132303231343734395A300F300D0603551D1501010004030A0101302D020B51434130335F0203070308170D3230303132303231343735305A300F300D0603551D1501010004030A0101302D020B51434130335F0203070400170D3230303132303231343735305A300F300D0603551D1501010004030A0101302D020B51434130335F0203070403170D3230303132303231343735315A300F300D0603551D1501010004030A0101302D020B51434130335F0203070508170D3230303132303231343735315A300F300D0603551D1501010004030A0101302D020B51434130335F0203070601170D3230303132303231343735315A300F300D0603551D1501010004030A0101302D020B51434130335F0203070605170D3230303132303231343735325A300F300D0603551D1501010004030A0101302D020B51434130335F0203070701170D3230303132303231343735325A300F300D0603551D1501010004030A0101302D020B51434130335F0203070705170D3230303132303231343735325A300F300D0603551D1501010004030A0101302D020B51434130335F0203070706170D3230303132303231343735335A300F300D0603551D1501010004030A0101302D020B51434130335F0203070709170D3230303132303231343735335A300F300D0603551D1501010004030A0101302D020B51434130335F0203070800170D3230303132303231343735335A300F300D0603551D1501010004030A0101302D020B51434130335F0203070802170D3230303132303231343735345A300F300D0603551D1501010004030A0101302D020B51434130335F0203070803170D3230303132303231343735345A300F300D0603551D1501010004030A0101302D020B51434130335F0203070806170D3230303132303231343735355A300F300D0603551D1501010004030A0101302D020B51434130335F0203070808170D3230303132303231343735355A300F300D0603551D1501010004030A0101302D020B51434130335F0203070901170D3230303132303231343735355A300F300D0603551D1501010004030A0101302D020B51434130335F0203070904170D3230303132303231343735365A300F300D0603551D1501010004030A0101302D020B51434130335F0203080000170D3230303132303231343735365A300F300D0603551D1501010004030A0101302D020B51434130335F0203080002170D3230303132303231343735365A300F300D0603551D1501010004030A0101302D020B51434130335F0203080009170D3230303132303231343735375A300F300D0603551D1501010004030A0101302D020B51434130335F0203080100170D3230303132303231343735375A300F300D0603551D1501010004030A0101302D020B51434130335F0203080103170D3230303132303231343735375A300F300D0603551D1501010004030A0101302D020B51434130335F0203080104170D3230303132303231343735385A300F300D0603551D1501010004030A0101302D020B51434130335F0203080108170D3230303132303231343735385A300F300D0603551D1501010004030A0101302D020B51434130335F0203080200170D3230303132303231343735395A300F300D0603551D1501010004030A0101302D020B51434130335F0203080203170D3230303132303231343735395A300F300D0603551D1501010004030A0101302D020B51434130335F0203080205170D3230303132303231343735395A300F300D0603551D1501010004030A0101302D020B51434130335F0203080206170D3230303132303231343830305A300F300D0603551D1501010004030A0101302D020B51434130335F0203080207170D3230303132303231343830305A300F300D0603551D1501010004030A0101302D020B51434130335F0203080208170D3230303132303231343830305A300F300D0603551D1501010004030A0101302D020B51434130335F0203080304170D3230303132303231343830315A300F300D0603551D1501010004030A0101302D020B51434130335F0203080308170D3230303132303231343830315A300F300D0603551D1501010004030A0101302D020B51434130335F0203080400170D3230303132303231343830315A300F300D0603551D1501010004030A0101302D020B51434130335F0203080402170D3230303132303231343830325A300F300D0603551D1501010004030A0101302D020B51434130335F0203080505170D3230303132303231343830325A300F300D0603551D1501010004030A0101302D020B51434130335F0203080507170D3230303132303231343830335A300F300D0603551D1501010004030A0101302D020B51434130335F0203080602170D3230303132303231343830335A300F300D0603551D1501010004030A0101302D020B51434130335F0203080604170D3230303132303231343830335A300F300D0603551D1501010004030A0101302D020B51434130335F0203080608170D3230303132303231343830345A300F300D0603551D1501010004030A0101302D020B51434130335F0203080701170D3230303132303231343830345A300F300D0603551D1501010004030A0101302D020B51434130335F0203080704170D3230303132303231343830345A300F300D0603551D1501010004030A0101302D020B51434130335F0203080706170D3230303132303231343830355A300F300D0603551D1501010004030A0101302D020B51434130335F0203080902170D3230303132303231343830355A300F300D0603551D1501010004030A0101302D020B51434130335F0203080904170D3230303132303231343830355A300F300D0603551D1501010004030A0101302D020B51434130335F0203080906170D3230303132303231343830365A300F300D0603551D1501010004030A0101302D020B51434130335F0203090005170D3230303132303231343830365A300F300D0603551D1501010004030A0101302D020B51434130335F0203090101170D3230303132303231343830375A300F300D0603551D1501010004030A0101302D020B51434130335F0203090106170D3230303132303231343830375A300F300D0603551D1501010004030A0101302D020B51434130335F0203090107170D3230303132303231343830375A300F300D0603551D1501010004030A0101302D020B51434130335F0203090204170D3230303132303231343830385A300F300D0603551D1501010004030A0101302D020B51434130335F0203090206170D3230303132303231343830385A300F300D0603551D1501010004030A0101302D020B51434130335F0203090207170D3230303132303231343830385A300F300D0603551D1501010004030A0101302D020B51434130335F0203090301170D3230303132303231343830395A300F300D0603551D1501010004030A0101302D020B51434130335F0203090303170D3230303132303231343830395A300F300D0603551D1501010004030A0101302D020B51434130335F0203090400170D3230303132303231343831305A300F300D0603551D1501010004030A0101302D020B51434130335F0203090404170D3230303132303231343831305A300F300D0603551D1501010004030A0101302D020B51434130335F0203090407170D3230303132303231343831305A300F300D0603551D1501010004030A0101302D020B51434130335F0203090509170D3230303132303231343831315A300F300D0603551D1501010004030A0101302D020B51434130335F0203090600170D3230303132303231343831315A300F300D0603551D1501010004030A0101302D020B51434130335F0203090702170D3230303132303231343831315A300F300D0603551D1501010004030A0101302D020B51434130335F0203090704170D3230303132303231343831325A300F300D0603551D1501010004030A0101302D020B51434130335F0203090800170D3230303132303231343831325A300F300D0603551D1501010004030A0101302D020B51434130335F0203090805170D3230303132303231343831325A300F300D0603551D1501010004030A0101302D020B51434130335F0203090902170D3230303132303231343831335A300F300D0603551D1501010004030A0101302D020B51434130335F0203090903170D3230303132303231343831335A300F300D0603551D1501010004030A0101302D020B51434130335F0203090905170D3230303132303231343831345A300F300D0603551D1501010004030A0101302D020B51434130335F0203090906170D3230303132303231343831345A300F300D0603551D1501010004030A0101302D020B51434130335F0203090909170D3230303132303231343831345A300F300D0603551D1501010004030A0101302D020B51434130335F0204000003170D3230303132303231343831355A300F300D0603551D1501010004030A0101302D020B51434130335F0204000103170D3230303132303231343831355A300F300D0603551D1501010004030A0101302D020B51434130335F0204000104170D3230303132303231343831355A300F300D0603551D1501010004030A0101302D020B51434130335F0204000106170D3230303132303231343831365A300F300D0603551D1501010004030A0101302D020B51434130335F0204000109170D3230303132303231343831365A300F300D0603551D1501010004030A0101302D020B51434130335F0204000200170D3230303132303231343831375A300F300D0603551D1501010004030A0101302D020B51434130335F0204000207170D3230303132303231343831375A300F300D0603551D1501010004030A0101302D020B51434130335F0204000304170D3230303132303231343831375A300F300D0603551D1501010004030A0101302D020B51434130335F0204000305170D3230303132303231343831385A300F300D0603551D1501010004030A0101302D020B51434130335F0204000306170D3230303132303231343831385A300F300D0603551D1501010004030A0101302D020B51434130335F0204000307170D3230303132303231343831385A300F300D0603551D1501010004030A0101302D020B51434130335F0204000308170D3230303132303231343831395A300F300D0603551D1501010004030A0101302D020B51434130335F0204000401170D3230303132303231343831395A300F300D0603551D1501010004030A0101302D020B51434130335F0204000403170D3230303132303231343832305A300F300D0603551D1501010004030A0101302D020B51434130335F0204000404170D3230303132303231343832305A300F300D0603551D1501010004030A0101302D020B51434130335F0204000406170D3230303132303231343832305A300F300D0603551D1501010004030A0101302D020B51434130335F0204000409170D3230303132303231343832315A300F300D0603551D1501010004030A0101302D020B51434130335F0204000500170D3230303132303231343832315A300F300D0603551D1501010004030A0101302D020B51434130335F0204000501170D3230303132303231343832315A300F300D0603551D1501010004030A0101302D020B51434130335F0204000505170D3230303132303231343832325A300F300D0603551D1501010004030A0101302D020B51434130335F0204000507170D3230303132303231343832325A300F300D0603551D1501010004030A0101302D020B51434130335F0204000606170D3230303132303231343832335A300F300D0603551D1501010004030A0101302D020B51434130335F0204000608170D3230303132303231343832335A300F300D0603551D1501010004030A0101302D020B51434130335F0204000609170D3230303132303231343832335A300F300D0603551D1501010004030A0101302D020B51434130335F0204000702170D3230303132303231343832345A300F300D0603551D1501010004030A0101302D020B51434130335F0204000705170D3230303132303231343832345A300F300D0603551D1501010004030A0101302D020B51434130335F0204000708170D3230303132303231343832345A300F300D0603551D1501010004030A0101302D020B51434130335F0204000806170D3230303132303231343832355A300F300D0603551D1501010004030A0101302D020B51434130335F0204000809170D3230303132303231343832355A300F300D0603551D1501010004030A0101302D020B51434130335F0204000900170D3230303132303231343832365A300F300D0603551D1501010004030A0101302D020B51434130335F0204000901170D3230303132303231343832365A300F300D0603551D1501010004030A0101302D020B51434130335F0204000907170D3230303132303231343832365A300F300D0603551D1501010004030A0101302D020B51434130335F0204000908170D3230303132303231343832375A300F300D0603551D1501010004030A0101302D020B51434130335F0204000909170D3230303132303231343832375A300F300D0603551D1501010004030A0101302D020B51434130335F0204010003170D3230303132303231343832375A300F300D0603551D1501010004030A0101302D020B51434130335F0204010004170D3230303132303231343832385A300F300D0603551D1501010004030A0101302D020B51434130335F0204010006170D3230303132303231343832385A300F300D0603551D1501010004030A0101302D020B51434130335F0204010100170D3230303132303231343832395A300F300D0603551D1501010004030A0101302D020B51434130335F0204010203170D3230303132303231343832395A300F300D0603551D1501010004030A0101302D020B51434130335F0204010206170D3230303132303231343832395A300F300D0603551D1501010004030A0101302D020B51434130335F0204010209170D3230303132303231343833305A300F300D0603551D1501010004030A0101302D020B51434130335F0204010300170D3230303132303231343833305A300F300D0603551D1501010004030A0101302D020B51434130335F0204010303170D3230303132303231343833305A300F300D0603551D1501010004030A0101302D020B51434130335F0204010305170D3230303132303231343833315A300F300D0603551D1501010004030A0101302D020B51434130335F0204010308170D3230303132303231343833315A300F300D0603551D1501010004030A0101302D020B51434130335F0204010406170D3230303132303231343833325A300F300D0603551D1501010004030A0101302D020B51434130335F0204010500170D3230303132303231343833325A300F300D0603551D1501010004030A0101302D020B51434130335F0204010503170D3230303132303231343833325A300F300D0603551D1501010004030A0101302D020B51434130335F0204010505170D3230303132303231343833335A300F300D0603551D1501010004030A0101302D020B51434130335F0204010601170D3230303132303231343833335A300F300D0603551D1501010004030A0101302D020B51434130335F0204010602170D3230303132303231343833335A300F300D0603551D1501010004030A0101302D020B51434130335F0204010604170D3230303132303231343833345A300F300D0603551D1501010004030A0101302D020B51434130335F0204010608170D3230303132303231343833345A300F300D0603551D1501010004030A0101302D020B51434130335F0204010700170D3230303132303231343833355A300F300D0603551D1501010004030A0101302D020B51434130335F0204010801170D3230303132303231343833355A300F300D0603551D1501010004030A0101302D020B51434130335F0204010805170D3230303132303231343833355A300F300D0603551D1501010004030A0101302D020B51434130335F0204010900170D3230303132303231343833365A300F300D0603551D1501010004030A0101302D020B51434130335F0204010905170D3230303132303231343833365A300F300D0603551D1501010004030A0101302D020B51434130335F0204010908170D3230303132303231343833365A300F300D0603551D1501010004030A0101302D020B51434130335F0204020007170D3230303132303231343833375A300F300D0603551D1501010004030A0101302D020B51434130335F0204020100170D3230303132303231343833375A300F300D0603551D1501010004030A0101302D020B51434130335F0204020102170D3230303132303231343833385A300F300D0603551D1501010004030A0101302D020B51434130335F0204020105170D3230303132303231343833385A300F300D0603551D1501010004030A0101302D020B51434130335F0204020106170D3230303132303231343833385A300F300D0603551D1501010004030A0101302D020B51434130335F0204020207170D3230303132303231343833395A300F300D0603551D1501010004030A0101302D020B51434130335F0204020209170D3230303132303231343833395A300F300D0603551D1501010004030A0101302D020B51434130335F0204020302170D3230303132303231343834305A300F300D0603551D1501010004030A0101302D020B51434130335F0204020304170D3230303132303231343834305A300F300D0603551D1501010004030A0101302D020B51434130335F0204020308170D3230303132303231343834305A300F300D0603551D1501010004030A0101302D020B51434130335F0204020309170D3230303132303231343834315A300F300D0603551D1501010004030A0101302D020B51434130335F0204020401170D3230303132303231343834315A300F300D0603551D1501010004030A0101302D020B51434130335F0204020406170D3230303132303231343834315A300F300D0603551D1501010004030A0101302D020B51434130335F0204020501170D3230303132303231343834325A300F300D0603551D1501010004030A0101302D020B51434130335F0204020503170D3230303132303231343834325A300F300D0603551D1501010004030A0101302D020B51434130335F0204020504170D3230303132303231343834335A300F300D0603551D1501010004030A0101302D020B51434130335F0204020602170D3230303132303231343834335A300F300D0603551D1501010004030A0101302D020B51434130335F0204020603170D3230303132303231343834335A300F300D0603551D1501010004030A0101302D020B51434130335F0204020605170D3230303132303231343834345A300F300D0603551D1501010004030A0101302D020B51434130335F0204020607170D3230303132303231343834345A300F300D0603551D1501010004030A0101302D020B51434130335F0204020609170D3230303132303231343834345A300F300D0603551D1501010004030A0101302D020B51434130335F0204020701170D3230303132303231343834355A300F300D0603551D1501010004030A0101302D020B51434130335F0204020702170D3230303132303231343834355A300F300D0603551D1501010004030A0101302D020B51434130335F0204020704170D3230303132303231343834365A300F300D0603551D1501010004030A0101302D020B51434130335F0204020706170D3230303132303231343834365A300F300D0603551D1501010004030A0101302D020B51434130335F0204020709170D3230303132303231343834365A300F300D0603551D1501010004030A0101302D020B51434130335F0204020805170D3230303132303231343834375A300F300D0603551D1501010004030A0101302D020B51434130335F0204020807170D3230303132303231343834375A300F300D0603551D1501010004030A0101302D020B51434130335F0204020902170D3230303132303231343834385A300F300D0603551D1501010004030A0101302D020B51434130335F0204030001170D3230303132303231343834385A300F300D0603551D1501010004030A0101302D020B51434130335F0204030002170D3230303132303231343834385A300F300D0603551D1501010004030A0101302D020B51434130335F0204030003170D3230303132303231343834395A300F300D0603551D1501010004030A0101302D020B51434130335F0204030005170D3230303132303231343834395A300F300D0603551D1501010004030A0101302D020B51434130335F0204030006170D3230303132303231343834395A300F300D0603551D1501010004030A0101302D020B51434130335F0204030102170D3230303132303231343835305A300F300D0603551D1501010004030A0101302D020B51434130335F0204030106170D3230303132303231343835305A300F300D0603551D1501010004030A0101302D020B51434130335F0204030200170D3230303132303231343835315A300F300D0603551D1501010004030A0101302D020B51434130335F0204030202170D3230303132303231343835315A300F300D0603551D1501010004030A0101302D020B51434130335F0204030205170D3230303132303231343835315A300F300D0603551D1501010004030A0101302D020B51434130335F0204030207170D3230303132303231343835325A300F300D0603551D1501010004030A0101302D020B51434130335F0204030208170D3230303132303231343835325A300F300D0603551D1501010004030A0101302D020B51434130335F0204030301170D3230303132303231343835335A300F300D0603551D1501010004030A0101302D020B51434130335F0204030303170D3230303132303231343835335A300F300D0603551D1501010004030A0101302D020B51434130335F0204030402170D3230303132303231343835335A300F300D0603551D1501010004030A0101302D020B51434130335F0204030403170D3230303132303231343835345A300F300D0603551D1501010004030A0101302D020B51434130335F0204030409170D3230303132303231343835345A300F300D0603551D1501010004030A0101302D020B51434130335F0204030500170D3230303132303231343835355A300F300D0603551D1501010004030A0101302D020B51434130335F0204030503170D3230303132303231343835355A300F300D0603551D1501010004030A0101302D020B51434130335F0204030505170D3230303132303231343835355A300F300D0603551D1501010004030A0101302D020B51434130335F0204030506170D3230303132303231343835365A300F300D0603551D1501010004030A0101302D020B51434130335F0204030602170D3230303132303231343835365A300F300D0603551D1501010004030A0101302D020B51434130335F0204030604170D3230303132303231343835365A300F300D0603551D1501010004030A0101302D020B51434130335F0204030700170D3230303132303231343835375A300F300D0603551D1501010004030A0101302D020B51434130335F0204030702170D3230303132303231343835375A300F300D0603551D1501010004030A0101302D020B51434130335F0204030704170D3230303132303231343835385A300F300D0603551D1501010004030A0101302D020B51434130335F0204030708170D3230303132303231343835385A300F300D0603551D1501010004030A0101302D020B51434130335F0204030802170D3230303132303231343835385A300F300D0603551D1501010004030A0101302D020B51434130335F0204030908170D3230303132303231343835395A300F300D0603551D1501010004030A0101302D020B51434130335F0204040001170D3230303132303231343835395A300F300D0603551D1501010004030A0101302D020B51434130335F0204040003170D3230303132303231343930305A300F300D0603551D1501010004030A0101302D020B51434130335F0204040005170D3230303132303231343930305A300F300D0603551D1501010004030A0101302D020B51434130335F0204040006170D3230303132303231343930305A300F300D0603551D1501010004030A0101302D020B51434130335F0204040008170D3230303132303231343930315A300F300D0603551D1501010004030A0101302D020B51434130335F0204040009170D3230303132303231343930315A300F300D0603551D1501010004030A0101302D020B51434130335F0204040100170D3230303132303231343930325A300F300D0603551D1501010004030A0101302D020B51434130335F0204040103170D3230303132303231343930325A300F300D0603551D1501010004030A0101302D020B51434130335F0204040106170D3230303132303231343930325A300F300D0603551D1501010004030A0101302D020B51434130335F0204040206170D3230303132303231343930335A300F300D0603551D1501010004030A0101302D020B51434130335F0204040301170D3230303132303231343930335A300F300D0603551D1501010004030A0101302D020B51434130335F0204040302170D3230303132303231343930335A300F300D0603551D1501010004030A0101302D020B51434130335F0204040305170D3230303132303231343930345A300F300D0603551D1501010004030A0101302D020B51434130335F0204040306170D3230303132303231343930345A300F300D0603551D1501010004030A0101302D020B51434130335F0204040404170D3230303132303231343930355A300F300D0603551D1501010004030A0101302D020B51434130335F0204040407170D3230303132303231343930355A300F300D0603551D1501010004030A0101302D020B51434130335F0204040501170D3230303132303231343930355A300F300D0603551D1501010004030A0101302D020B51434130335F0204040504170D3230303132303231343930365A300F300D0603551D1501010004030A0101302D020B51434130335F0204040602170D3230303132303231343930365A300F300D0603551D1501010004030A0101302D020B51434130335F0204040604170D3230303132303231343930375A300F300D0603551D1501010004030A0101302D020B51434130335F0204040605170D3230303132303231343930375A300F300D0603551D1501010004030A0101302D020B51434130335F0204040606170D3230303132303231343930375A300F300D0603551D1501010004030A0101302D020B51434130335F0204040700170D3230303132303231343930385A300F300D0603551D1501010004030A0101302D020B51434130335F0204040705170D3230303132303231343930385A300F300D0603551D1501010004030A0101302D020B51434130335F0204040803170D3230303132303231343930395A300F300D0603551D1501010004030A0101302D020B51434130335F0204040909170D3230303132303231343930395A300F300D0603551D1501010004030A0101302D020B51434130335F0204050001170D3230303132303231343930395A300F300D0603551D1501010004030A0101302D020B51434130335F0204050006170D3230303132303231343931305A300F300D0603551D1501010004030A0101302D020B51434130335F0204050102170D3230303132303231343931305A300F300D0603551D1501010004030A0101302D020B51434130335F0204050104170D3230303132303231343931305A300F300D0603551D1501010004030A0101302D020B51434130335F0204050109170D3230303132303231343931315A300F300D0603551D1501010004030A0101302D020B51434130335F0204050200170D3230303132303231343931315A300F300D0603551D1501010004030A0101302D020B51434130335F0204050508170D3230303132303231343931325A300F300D0603551D1501010004030A0101302D020B51434130335F0204050609170D3230303132303231353031325A300F300D0603551D1501010004030A0101302702053130313437170D3230303133313039313331335A300F300D0603551D1501010004030A0101302D020B51434130335F0204080005170D3230303231303131343733375A300F300D0603551D1501010004030A0104302D020B51434130335F0106000309170D3230303231303133343535315A300F300D0603551D1501010004030A0101302D020B51434130335F0105080600170D3230303231343038323133355A300F300D0603551D1501010004030A01043026020439383139170D3230303231373039333332385A300F300D0603551D1501010004030A0101302D020B51434130335F0206080005170D3230303231383131323031335A300F300D0603551D1501010004030A01013026020437303233170D3230303231383131323133375A300F300D0603551D1501010004030A0101302D020B51434130335F0102020100170D3230303231383135313534375A300F300D0603551D1501010004030A0104302D020B51434130335F0109070001170D3230303231393230333135345A300F300D0603551D1501010004030A0105302D020B51434130335F0207070501170D3230303232313039323832365A300F300D0603551D1501010004030A0101302D020B51434130335F0206020709170D3230303330323132313533375A300F300D0603551D1501010004030A0104302D020B51434130335F0103020900170D3230303330323132313634385A300F300D0603551D1501010004030A0104302D020B51434130335F0206070000170D3230303330323132313830315A300F300D0603551D1501010004030A01053026020436323036170D3230303330353130323932375A300F300D0603551D1501010004030A01013026020433333235170D3230303330353130323933385A300F300D0603551D1501010004030A01013026020431323035170D3230303330353130323934395A300F300D0603551D1501010004030A01013026020431323732170D3230303330353130333030325A300F300D0603551D1501010004030A0101302702053130323039170D3230303330353130333031385A300F300D0603551D1501010004030A0101302D020B51434130335F0203020704170D3230303330353130333033385A300F300D0603551D1501010004030A0101302D020B51434130335F0204080705170D3230303330353130333035395A300F300D0603551D1501010004030A01013026020431323833170D3230303330353130343634335A300F300D0603551D1501010004030A01013026020431333333170D3230303330353130343635345A300F300D0603551D1501010004030A01013026020431323939170D3230303330353130343730345A300F300D0603551D1501010004030A0101302D020B51434130335F0105020401170D3230303330353130343731335A300F300D0603551D1501010004030A0101302D020B51434130335F0105090800170D3230303330353130343733325A300F300D0603551D1501010004030A0101302D020B51434130335F0106040907170D3230303330353130343734335A300F300D0603551D1501010004030A0101302D020B51434130335F0200060802170D3230303330353130343735345A300F300D0603551D1501010004030A0101302D020B51434130335F0200070807170D3230303330353130343830345A300F300D0603551D1501010004030A0101302D020B51434130335F0105080905170D3230303330353131333834315A300F300D0603551D1501010004030A01053026020436393333170D3230303330353131343034355A300F300D0603551D1501010004030A0105302D020B51434130335F0207050607170D3230303330363133343135375A300F300D0603551D1501010004030A0104302D020B51434130335F0103070504170D3230303330393039303030315A300F300D0603551D1501010004030A0101302D020B51434130335F0208070608170D3230303331363135323330305A300F300D0603551D1501010004030A01043026020432343134170D3230303331393038353132305A300F300D0603551D1501010004030A0101302D020B51434130335F0105030106170D3230303331393038353132375A300F300D0603551D1501010004030A0101302D020B51434130335F0209070202170D3230303430373131313031305A300F300D0603551D1501010004030A0105302D020B51434130335F0209080109170D3230303430383030333430335A300F300D0603551D1501010004030A0104302702053131303333170D3230303431323131313931315A300F300D0603551D1501010004030A0105302D020B51434130335F0208060309170D3230303431323131333335305A300F300D0603551D1501010004030A0101302D020B51434130335F0106090001170D3230303431323131333535355A300F300D0603551D1501010004030A0101302702053131313538170D3230303431323131333730315A300F300D0603551D1501010004030A0101302D020B51434130335F0105020707170D3230303431323131333732305A300F300D0603551D1501010004030A0101302D020B51434130335F0200030708170D3230303431353133333330365A300F300D0603551D1501010004030A0105302D020B51434130335F0108010702170D3230303432303039353232335A300F300D0603551D1501010004030A0104302702053131333736170D3230303432323132343231325A300F300D0603551D1501010004030A0101302D020B51434130335F0203060707170D3230303432383133313330315A300F300D0603551D1501010004030A0101302D020B51434130335F0205010707170D3230303530383039343634305A300F300D0603551D1501010004030A01013026020437303835170D3230303531393037333931395A300F300D0603551D1501010004030A01053026020437303932170D3230303531393037333932375A300F300D0603551D1501010004030A0105302D020B51434130335F0105050604170D3230303532383037323033365A300F300D0603551D1501010004030A0105302D020B51434130335F0104040300170D3230303532393131343635315A300F300D0603551D1501010004030A0101302D020B51434130335F0105010403170D3230303532393132343230385A300F300D0603551D1501010004030A0101302D020B51434130335F0302020006170D3230303630313132353830385A300F300D0603551D1501010004030A01013026020433313837170D3230303630313133313231335A300F300D0603551D1501010004030A0101302D020B51434130335F0103050403170D3230303630313133313433315A300F300D0603551D1501010004030A0101302D020B51434130335F0209030900170D3230303630323039333530315A300F300D0603551D1501010004030A0101302D020B51434130335F0109000401170D3230303630383038353930395A300F300D0603551D1501010004030A0105302D020B51434130335F0207070604170D3230303630383039303130335A300F300D0603551D1501010004030A0105302D020B51434130335F0203080803170D3230303630383039353435355A300F300D0603551D1501010004030A0105302D020B51434130335F0200000909170D3230303631363133313333355A300F300D0603551D1501010004030A0104302D020B51434130335F0202060504170D3230303631363133323231365A300F300D0603551D1501010004030A0101302D020B51434130335F0302070509170D3230303631393038313130355A300F300D0603551D1501010004030A01013026020437343930170D3230303631393132313034335A300F300D0603551D1501010004030A0101302D020B51434130335F0103030104170D3230303632353037353830355A300F300D0603551D1501010004030A0101302D020B51434130335F0105060003170D3230303632363039303433355A300F300D0603551D1501010004030A0101302D020B51434130335F0204090804170D3230303632363133313435315A300F300D0603551D1501010004030A0105302D020B51434130335F0202040901170D3230303633303039313234345A300F300D0603551D1501010004030A0101302D020B51434130335F0107010409170D3230303730313131323230345A300F300D0603551D1501010004030A0101302D020B51434130335F0107010408170D3230303730313131323233325A300F300D0603551D1501010004030A0101302702053130393830170D3230303730323039353032345A300F300D0603551D1501010004030A0101302D020B51434130335F0208090202170D3230303730323039353131305A300F300D0603551D1501010004030A0101302D020B51434130335F0301010703170D3230303730323039353132305A300F300D0603551D1501010004030A0101302D020B51434130335F0302070008170D3230303730323131303333305A300F300D0603551D1501010004030A01013026020432373035170D3230303730323134343234395A300F300D0603551D1501010004030A0101A030302E301F0603551D2304183016801474627099FF1B603BC464B5841FA3150C5CCB5FBD300B0603551D140404020209E2300D06092A864886F70D01010B050003820201009ACB2F9ED10767FEEF30E615A6B24AD45AE5F648B45F9D3B15C3CEB331585B3C6077CD116CC689CDD3DC3812A6E4E1C5395FB8C2F5CE97F3AD24D090FA3E3B5841C7C5610F72625D609B91DB193F5ED1931637DD819454E911501E15DDC4F4E1C4D9E08EC760191A9A8DFE823758D02ED8C98D0B66D0FA28E79CCA5B1C9A931CF5F93B411B2468090C0C84E6129A86938E09CBF02B750602E2E397CCB6365C2585F7A0FBB575C101A938B2C52A009D0F2F3BFEC05F891132159667D359EF5117F51B6458C7D68DECFEBF7E04683002F0797B444E02A50EC2A8ACFADF5A3A743CCEF17214F2657439A02DFEA66F5EF8CA4C576C8F7FF8EC4CA08F9FC3A46A0C10343CDF28B092CE03905E87BFC19B23C49F655AA99198CF58F80D0E3AB1800494D21CB610CE155230987A673F8E3580012E363F9A8103ADFA5EB6A0DD5575E78EC93A626585877FA2A91A39AC32BF3AD7E3D82824ADF1157B2E8B79285B08C5800FA6FF97AAE6194B1BB9A92E27D57BF7F439AC2D32612BA7B6775E6EE05389DEA2976896BA57EC4577EBC27B2CAE7716391EA73B9E1E2F8C158DED624383533129691AFB9C8CEEF16F29988DED179886060FCFE5C1A843D94555EE4A9B1F24C7D4D4B0581621E75E6A963334B37C57EB369D3DC27B348B8CD8686E1D2059BBDCD61D9C6E0FED2BFAA32847F33E84FEA3056381199B7766DDF123FD148942C8C0300D06092A864886F70D01010B0500048201802ACBFB8158F5D6D5D44714C61B26A8CF619A9243B4E7A40FAEA7A8988994F67E17056D4D58BFD8BF3B56B4D88F4A86658F2B0CBC83376E1B25975DC2928353C3D0B8C1C5F6A3304AF60D8A64D552E2D48A5EED88C0FA9FC5E97D255DF8730A2EA207EA58033D00387916359EC6049E8577C0009467F4F801A8B4D0A3289282D11B8B4E237F5F3F104DFBF18B1C00145073CD9E0113646C73C347E8F121D33530A3D80C3E965E523EA368C6A9D9DA71FE1B3A5A0DEA901733356B4099F0F9859D567EFC3B27B8D09030D441067A7F68898AF59D0998CC57B8D9D4BE12477B86E3B5EF5628F0255F377F4F0E15F849EB683123A89AD04836D111715C051DA54FE396B1565B09DBE0FECC33E41373CDB186A97509FD92FE22DAFF2F43240D2B9F57D29C8958585AC60B68A686F457945388DA9983DFB48EF0D2179115424B509977B68722F0576C989ADA21B6563D30A6B104427C355281B0EE6FE88E65A3063B09527F8A93A07D2A4323BCD492DC598DA4FB460868F198BC25FB36B1432FFE053D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000> -/Filter /Adobe.PPKLite -/M (D:20200706133807+02'00') -/Name <FEFF00410044005200490041004E00410020004500570045004C0049004E00410020004D00450044005901430053004B0041> -/Prop_Build << -/App << -/Name /Adobe#20Acrobat#20Reader#20DC -/OS [/Win] -/R 1313024 -/REx (2020.009.20067) -/TrustedMode true ->> -/Filter << -/Date (May 4 2020 00:13:06) -/Name /Adobe.PPKLite -/R 131104 -/V 2 ->> -/PubSec << -/Date (May 4 2020 00:13:06) -/NonEFontNoWarn true -/R 131105 ->> ->> -/SubFilter /adbe.pkcs7.detached -/Type /Sig ->> -endobj -23 0 obj -<< -/Length 2094 -/Filter /FlateDecode ->> -stream
-HWKo7{MFh@j7#q#w#o_*cDаf+v]__X11na_^.{`&.={xsyػˋˋ=0˃e?]^ -99PiS2fX -fOqf
YӮ[3w1
:u1efNcB~Ɍ"+nUa%|-,Uuf<F9 -\0c!!) -P*#C'NkO:7:zeQLGuܔtmX<oTHXd!b}
:bHF HYr?:JnȒ8~ X&`JaG6##Gd)y/6tMl' -v1,( - -4n\ьm˺T&Q
heLI\܅DV!6Lk`´ah->Dƃ -LbBUaJQUDA*l*_pRI2SEL"q5l{BJ#Psp4YLќ]+FH4F(GZF"q\HT`3U+8 >:kbcf^j`ӟyJNH-ŒA(jȖ$*$Z<rJ.k/JmGA9+C7`nAr_%n-LܠEM@&*j$>>qyQ7Mb~ -i NҶ,'qgsLG]oP3jݏY -־8k<N{0v]__Xa3[gvcU\o|6wyS -endstream -endobj -24 0 obj -<< -/Length 1924 -/Filter /FlateDecode ->> -stream
-HW[o6~7GiX)ı
+aPH$] h~9$m6fڠIQhl)f ,Xa\v~u4hXhooGPh/@z#yn/f~bG2 -Z=pDLyj7Ubsƞd^=c;=RVM(k<}Aۆ{İC-viRZiMIZr;A~1C֒#n>otAS. cCx_۾vin\d4;liFh&O)⽹'z[9EHfMEQ:ɯfJzYxQYJUN_50ޔ{Rj/ߴo/[\6˶s-\_;xÇwemgⵏBѭd:.icR&ٱ(K8 -tB?vpUDn$h=JWS澮;)EwT)
Mm)5(h(p.( -d⋙+[ٺڼ4ڰk( `אElI -Tab)IQjqT__3rI5bI$Am +mvm4^GO7ZYw856Ix]Pʥk-|ǀcO6
n3,Dj'G-W7FA,L% Ӭ+ -I5gL5{FV⚪Bmrmf+5*(6ZDA䭖[] -}a뀴u#+or\WÌG[_U5~a~&/v?\Ӱ4lU%{LQ$We_b\WI)$T?DI)4%^yJ̨|Ʊ:@x -F}NW
rSzVR -RhATq@b -:7].+cKzō.1?mE2ﱾ?_L9tj~njyv/Of.Бfu< !,D[M"$3aS<BH4d2eOFd|?pNy Dx2,j[ILOG -endstream -endobj -25 0 obj -<< -/Length 1762 -/Filter /FlateDecode ->> -stream
-HWKo6/AUe"X d::wҒ^g87srqr\\\PBi-ECeፑr\Ca8駧Du傁(mX`a\b_Y5wZꈝ[q(a c;ƚ4`cV\ki<q@%P܁gͺ_|6k=xN(w)߬vNLwS-mtփ6JĪ6TNƹόh}[-sOni]q:;Hq}ɾx^oTJRk]gQ?!D䨳imX>F!zwc0c_T~Lv` N:Spnq NfJ7$LfB;jsM0ZWOrw~T톍\mӥ=$%cD]k -FeNVz훯X}F{WqKƞW8d(18NOOeu\>FE.~Fk -n6kP -Jsnr,%z&M+9ہʦ{R֦"@um) Ĩb>m3c9M9E*/irrnGn&]$ ϐ$-̈́H9|;LnQq=>uo7ޢE4Om={vo6q8919\T9@:~('`0i{G.$du~~e:#%<8Avo2M6^~-w2mh>(܇{3w̡rkAe,RP9S%vR-IA5ѥ
|&QI,˵b6iY0z0.ḷU:<. -}Ji\rLA+VIƕڥdJ`lҼFȾ]iU֝9DQ1oH^~0Y Cc>'92֯'0D -endstream -endobj -26 0 obj -<< -/Length 1859 -/Filter /FlateDecode ->> -stream
-HW[k7~_ǙQt3`@<y8'MSL뫣*%k6a3ڣs9tvsqLeAJ̐jynΜC -[._n7ԉD+&XStީCIKݘ퇛WFV^ϗ|'<'1%r!]
1N-GzBJXKֲedі<o+R]NI/G/ZAԝG\`K6.!wnIHXwnFwz{AekK+ "˖ 51$O{q/4N(=mg=mA/ӄ6Nl=9\-OCl"Z1qeNj)y {/Hʱ0D+I*eEZM\+qn%#SR4~,R|'.w=
<zrh[tvޡ1aaj> V -tiҨƒd5.Vn`ܼQ}{foE7Vn4Q3 -~unaהUo~e7Lp[0w{`{
o#<£y&9߃GaVT*a"k+Ҿj통)W҇>Bȱ\sge\ޥDaͷѕk7!gh=t]r#b39Y5lOa 3]"Qĕ,I#Iܱ$ml<m?O#2~p2AҩpNfed],4OOB(~ٔjݾo]prEj:jUic:?BB /GZPkOG:*%&hitU~G.<S3^R.M=%N%~=PbOnVN[RTa+_J
2NF33Zޒ-iK$T;lG*7ch6v,Z݂8c-t+itd,]XrDOBPLep*бhlxA#^o@c{!Glj.sC<6,Q](\ ~8<L -Nq< -x5eEWݜ+Ρnv}F'luӄ.x&r?
QzMTvRXAH3JyT:0& /Ϝ'P%ͮ%#1ϗ{qe3N\&@3:p߾.īczG6 R;2+f -endstream -endobj -27 0 obj -<< -/Length 1950 -/Filter /FlateDecode ->> -stream
-HWmk9nGzY9zh!>J[wzF/+i%Ǎ7)4w%hgm:ܮWo֫61#
QCXBWW%v~\,m#RЖD%8a^lOw ->Ilx^e[u}Kl - --.j& -o<ׅ>xlNa,9g cwcb3 -@F^ΐ#܈Mp(J0)#qQWjTk5cGᾩo"(SRܟ3L;UIlB~16yΕTn|!A^Ny+XIeuEߣB*mh+J#k< -s)*VA>!@kryyq3ړ{rȹnI-mdmZz*TPevg)[Hvg6}݊Nn_chV=9*LR>xya}At
0ˆׇd>PQUVFEm%?08BOGˢ4Lu0u-/qј*a5c_m }ڪ͇-JJn>ov6ߡڽ[Ĵ+8 -+Au->=N2~le:]vZY:tIM0-dyOFM9采k>Nt -SFеi<(ZE[ -vg{۟ٲnZqT_\A}Zg-x -lygIT%SThbjcp\
Jzh=egH{kH&1f\ʊ#
e'%^˩ħ-(=l6SFH09Q0G='d=rS/D)[)(4f?<(݆yo9^`07JFŚyxb є젰bʝ!aFW2sS
"΄ %VlY$ 菖0HZx^ZP-3Gnv"Ȑ&+PqA'\@3$AF?B}O)U$B8],2@ɱOCm,F|6J }>.Y[ -bGc>~8(:ł~Cp~HSbƌފYΥ'fr=FX*_)% D"ܐT,As#ێ''"5]N -endstream -endobj -28 0 obj -<< -/Length 1978 -/Filter /FlateDecode ->> -stream
-HW[O7~_Ǚc|[B#V)R&4&=xC`\;: !vPJ᳗#~uLç2Q_.χ/GˣͯG5&GkeAH̐khtw9[6 -]y XPĹ&uԮaלӪswDn8(e>ܜ=|q>[8:vKǪ=n83XTeu.^F''ǯƟϑÀGt1$pkCݣ뷍<r XÚV$X;y< -Tm[]kkZ؈C\hzyklmO@ -8O/tU^
wٺN"> -<tWv X;"9#3~KhN5$X ,E
0jS\nWpp0B!r1\]312㺌u%9BF_WHa@g#:\0<yvԁa{tyQɒJV*egoX{j+;=CIFTOr%9+GЭ'=Ѝn]JD_̮@'6֊LDgtyJ9QqZ BDzTWd5Ɉ»L䱚ĝ't.ݙBvGJj.YxeܟphiN6S=lv{bxo3U32'Y4&ºB{G.*8^;Mx>($EUN ހip,m595}!P@7A1S
ra+R*z p/
ų!ɪt3(ާ(%GPZeg -6kJ%tvKX T*q*qzY<y2AZ'A\fߟ.@,EKȳ+O_&/r -ӧ.GU9B䜽2QbQtŔᎧ#CY)G
CUaH6w~jQ.mDd٬@OUhSF -OLqq>%j`> ;a/xkjXy -M a)kts{dЊ~hI@3pk^s13YŔ«醹[U"M}))m{ξd3OCköƭ"F_`?B|XZ -꽟YA -endstream -endobj -29 0 obj -<< -/Length 2000 -/Filter /FlateDecode ->> -stream
-HWnF}G -٢FgV
5iC|+:nICjhzNp{kRsjr5k~C7?-V`gA7?" l20)Gk,П⮬T|/kɊJKUˊeR+hЃ}>ٔŻRTiTVמrw8IuʋNڪrB:!\-J(TP_ZjZFWWAW-:&0lx&b`3=.fkV
=/nYMfGA̚ -rV#lIT`-1 jy9Mh$Vz⍥?>> -K2=^?! 3j0ln`ƆL1-U!+A~x= xxѾP%ϹY})pljH@9 C`H\"['î.*"" #YM7I,';"FuK} ^n0OenRT-˥*o -wlxV[~B3ޛX̻RMc#v7x^GLpVbt}sP=QNU锲)l)<-x`1MXqO#]H7NZ@0xn,hsVZUAW-: #*im7JsUfEMV.].IW=JW{2-}`t0ؗۮ1:v܂}"oJ_JJVJG)ҙRvgC85K$;rU{8o쀗jDID:PEd-dHc.3Jok9/ hU5+b2ʯ,AaٿByitdz'oy_(؞7nIC ݓmCB\=r餿>,v</
Q) -J2ҍ!5rf4{nw<3HpI7cf I2, -endstream -endobj -30 0 obj -<< -/Length 1872 -/Filter /FlateDecode ->> -stream
-HW[k7~_0;#2
{[bHЇqBnH
8rsVo_W|,](u]- -Z4}Cx!kFdq^GYѲa(Nb:ډB-.ޮWӂ!u -NK6{U3rXS{x6(Z>5Uë̅7ߚ*;U=D+6;e^w4hus
Ypu*{V1'o -Fi U@AܲYr_MDĐ*[A_MDM#QU6*i0\']&H&FWZTfqlZ Ű ^aRX%J043~Tsמ8m褭k#zF$Zrr H5Q8rgbғr6@a|]@&h75w:Y#ŋz"aKW -\vcb?㨉ȺEK6LYZSݺ((UMѥjcάy&B5 ߪ)v'59Tsc<֢'5gC<pHjT*ǗgEˇ8=ykR4#Hh2M1FGAbqfH_H=Ĉ,Ɂ@8X# -sn٤ZǯޗpO:xijŌ+8*YD/fUqU'L=l20~ࢉ0 -$BSzaI\ClRv-=r[Gx@dZ|'@6kX6QڡFw.{"Hܹފ
Cw4XOΚpNGN=zKN4r$8FԎc`mgp -c
6ʣsha#CuCP35iLENXU95mЗgB䵉0N5%L锇|%*L'P.6%L()/qxF9<oSN(`,3z~4dHgs*k|'w^,wiOǕ)\&~6^, $ciǀyd55H2GX,;MM'R\蠮+:VgQ/
fȼu01tzIlTwKN5yzh~}8#٨23bJ<5״#AlD֤~;0|Ak 3"\Vrs ,0(
Rn-z7cYw|k_?<pC^VL|/PFKå~s G-^R*?gq{ǘ:=yuԌ?qѩ$z])d>~餆4 -endstream -endobj -31 0 obj -<< -/BM /Normal -/Type /ExtGState -/ca 1 ->> -endobj -32 0 obj -<< -/BM /Normal -/CA 1 -/Type /ExtGState ->> -endobj -33 0 obj -<< -/BaseFont /BCDEEE+Calibri-Bold -/DescendantFonts [145 0 R] -/Encoding /Identity-H -/Subtype /Type0 -/ToUnicode 146 0 R -/Type /Font ->> -endobj -34 0 obj -<< -/BaseFont /BCDFEE+Calibri-Bold -/Encoding /WinAnsiEncoding -/FirstChar 32 -/FontDescriptor 147 0 R -/LastChar 122 -/Name /F2 -/Subtype /TrueType -/Type /Font -/Widths [226 0 0 0 0 0 0 0 0 0 -0 0 258 306 267 0 507 507 507 507 -507 507 507 507 507 0 276 0 0 0 -0 0 0 606 0 529 0 488 459 637 -0 0 0 547 423 874 659 676 532 0 -0 473 495 0 0 906 0 520 0 0 -0 0 0 0 0 494 0 418 537 503 -0 474 0 246 255 480 246 813 537 538 -0 537 355 399 347 537 0 745 0 474 -397] ->> -endobj -35 0 obj -<< -/BaseFont /BCDGEE+Calibri -/Encoding /WinAnsiEncoding -/FirstChar 32 -/FontDescriptor 148 0 R -/LastChar 122 -/Name /F3 -/Subtype /TrueType -/Type /Font -/Widths [226 0 0 0 0 0 0 0 303 303 -0 0 250 306 252 0 507 507 507 507 -507 507 507 507 507 507 268 268 0 0 -0 0 0 0 0 0 0 488 0 631 -0 252 0 0 0 0 646 662 517 0 -543 459 487 0 0 890 0 0 0 0 -0 0 0 0 0 479 525 423 525 498 -305 471 525 230 239 455 230 799 525 527 -525 0 349 391 335 525 0 715 0 453 -395] ->> -endobj -36 0 obj -<< -/BaseFont /BCDHEE+Calibri -/DescendantFonts [149 0 R] -/Encoding /Identity-H -/Subtype /Type0 -/ToUnicode 150 0 R -/Type /Font ->> -endobj -37 0 obj -<< -/BaseFont /ArialMT -/Encoding /WinAnsiEncoding -/FirstChar 32 -/FontDescriptor 151 0 R -/LastChar 32 -/Name /F5 -/Subtype /TrueType -/Type /Font -/Widths [278] ->> -endobj -38 0 obj -<< -/BaseFont /BCDIEE+Wingdings-Regular -/DescendantFonts [152 0 R] -/Encoding /Identity-H -/Subtype /Type0 -/ToUnicode 153 0 R -/Type /Font ->> -endobj -39 0 obj -<< -/BaseFont /TimesNewRomanPSMT -/Encoding /WinAnsiEncoding -/FirstChar 32 -/FontDescriptor 154 0 R -/LastChar 32 -/Name /F7 -/Subtype /TrueType -/Type /Font -/Widths [250] ->> -endobj -40 0 obj -<< -/Length 4181 -/Filter /FlateDecode ->> -stream
-x]o.@~+ orQA|m4EEu__]@rwp2L_|ӄWO鿷7a'<Y :iN>yۛ/lhOd3rRl4[6w_~y{3Z|we79D8XX߭3h%-Z(po /l1Lp7㧇;{53ω4<dC\Lcbս}yPAl[ r;q
:0/m6ϘP~.^*75 F[KF082D`tk9z%+(4h9ԛU[/UvY3t6{r0T2H]L~,A$lh
-VDS$yCHj{Ò]`
3w\F@Bʀijxzr8z͡JK3]{T0uGhN",DYmj4}OZ) -'&0HHY-.8FCĎTKVa* -Z"'07InM]Jaƃ^CW @lHR -w"v%`ux[]"C}%.7ƌAVYNI ;stSgZ}0N)a-Wd5=.frlPDD̯%ڝ>Xi}-V_?]!kOehF"h<$
˱<-sEE]"J,lۄ-1Zh8eX< c}<4EWXcx\YP HhqThqs)_ֺ!,]h~TŝBUYR5pMYWsXuXm'z`݇A&&>cdpXt͓ج☉bS0Eu>h*@f"FxqCy`3ko|ke B#d8mw*RfiCoNP@x"Kf${d_HWwԏCʮ$-tvrʠ{[i^[F2Upjk";ƪ41y!}W^=y:JfC}XH@ -\!L99WJȧk"hWseChj\ WLPgKS4t98@eKCb} R5@ftD\ZX+s[;T(`$$k.K%#ǩN!
L]\-*A˴աVX]h5iyJ~6^$}EFRtjiEgq2x1Y"BWS瑘I]ݮ
j8BKcY+gb=dE2k7JYuuٟBֵ3AnGl -Z]:KJf`AiџhVMUlJDC5p95fѪٝ7fj{uK|(yG#Po%]=ߋfF u@*8wk ->v^bP$N3[PfNɒY:].d&G4ƦY/1#Vf3N? -lıT6
Si#EmX[n 4k`hqQ̸Cl|2qeVӃо]Ah&桐h>`NjPba;tw,n -嚉o~+c=%Y}~xc~dǥ28/?$iX{pv9<rTӵ{Xu`UkNnF[zm"ŢӪ<,:VY*kW`ǑaޘŝIlx(VI٤C?%;G$&BIG'&8%'xqR,Ȟ>"뷠WG86gԝ[JaȢJ?!M&Aqf
_>UgXcXdzkgvMOT]X;?σL5vVz: -mb{G|f{IRx&!+loҽXV0Y -W٘
͆0gNpA;A0ће-jk>zܹIg -$NM C -
-endstream -endobj -41 0 obj -<< -/ID (Note 1) -/K [131 0 R 132 0 R 133 0 R 134 0 R 135 0 R] -/P 17 0 R -/Pg 14 0 R -/S /Footnote -/Type /StructElem ->> -endobj -42 0 obj -<< -/K [100 0 R 101 0 R] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -43 0 obj -<< -/K [102 0 R] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -44 0 obj -<< -/K [103 0 R] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -45 0 obj -<< -/K [4] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -46 0 obj -<< -/K [5] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -47 0 obj -<< -/K [6] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -48 0 obj -<< -/K [7] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -49 0 obj -<< -/K [8] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -50 0 obj -<< -/K [9] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -51 0 obj -<< -/K [10] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -52 0 obj -<< -/K [11] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -53 0 obj -<< -/K [12] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -54 0 obj -<< -/K [104 0 R 105 0 R] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -55 0 obj -<< -/K [15] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -56 0 obj -<< -/K [16] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -57 0 obj -<< -/K [17] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -58 0 obj -<< -/K [18] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -59 0 obj -<< -/K [19] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -60 0 obj -<< -/K [20] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -61 0 obj -<< -/K [21] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -62 0 obj -<< -/K [22] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -63 0 obj -<< -/K [23] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -64 0 obj -<< -/K [24] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -65 0 obj -<< -/K [25] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -66 0 obj -<< -/K [26] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -67 0 obj -<< -/A 155 0 R -/K [156 0 R 157 0 R 158 0 R 159 0 R 160 0 R 161 0 R 162 0 R 163 0 R 164 0 R 165 0 R -166 0 R 167 0 R 168 0 R 169 0 R 170 0 R 171 0 R 172 0 R] -/P 17 0 R -/Pg 14 0 R -/S /L -/Type /StructElem ->> -endobj -68 0 obj -<< -/K [47] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -69 0 obj -<< -/K [48] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -70 0 obj -<< -/K [49] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -71 0 obj -<< -/K [50] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -72 0 obj -<< -/A 173 0 R -/K [174 0 R 175 0 R] -/P 17 0 R -/Pg 14 0 R -/S /L -/Type /StructElem ->> -endobj -73 0 obj -<< -/K [53] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -74 0 obj -<< -/K [54] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -75 0 obj -<< -/K [55] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -76 0 obj -<< -/K [57] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -77 0 obj -<< -/K [59] -/P 17 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -78 0 obj -<< -/K [2] -/P 17 0 R -/Pg 15 0 R -/S /P -/Type /StructElem ->> -endobj -79 0 obj -<< -/K [3] -/P 17 0 R -/Pg 15 0 R -/S /P -/Type /StructElem ->> -endobj -80 0 obj -<< -/K [4] -/P 17 0 R -/Pg 15 0 R -/S /P -/Type /StructElem ->> -endobj -81 0 obj -<< -/A 176 0 R -/K [177 0 R 178 0 R 179 0 R] -/P 17 0 R -/Pg 15 0 R -/S /L -/Type /StructElem ->> -endobj -82 0 obj -<< -/K [8] -/P 17 0 R -/Pg 15 0 R -/S /P -/Type /StructElem ->> -endobj -83 0 obj -<< -/K [9] -/P 17 0 R -/Pg 15 0 R -/S /P -/Type /StructElem ->> -endobj -84 0 obj -<< -/K [10] -/P 17 0 R -/Pg 15 0 R -/S /P -/Type /StructElem ->> -endobj -85 0 obj -<< -/K [11] -/P 17 0 R -/Pg 15 0 R -/S /P -/Type /StructElem ->> -endobj -86 0 obj -<< -/K [12] -/P 17 0 R -/Pg 15 0 R -/S /P -/Type /StructElem ->> -endobj -87 0 obj -<< -/K [13] -/P 17 0 R -/Pg 15 0 R -/S /P -/Type /StructElem ->> -endobj -88 0 obj -<< -/K [14] -/P 17 0 R -/Pg 15 0 R -/S /P -/Type /StructElem ->> -endobj -89 0 obj -<< -/A 180 0 R -/K [181 0 R 182 0 R] -/P 17 0 R -/Pg 15 0 R -/S /L -/Type /StructElem ->> -endobj -90 0 obj -<< -/K [17] -/P 17 0 R -/Pg 15 0 R -/S /P -/Type /StructElem ->> -endobj -91 0 obj -<< -/K [18] -/P 17 0 R -/Pg 15 0 R -/S /P -/Type /StructElem ->> -endobj -92 0 obj -<< -/K [19] -/P 17 0 R -/Pg 15 0 R -/S /P -/Type /StructElem ->> -endobj -93 0 obj -<< -/K [20] -/P 17 0 R -/Pg 15 0 R -/S /P -/Type /StructElem ->> -endobj -94 0 obj -<< -/K [21] -/P 17 0 R -/Pg 15 0 R -/S /P -/Type /StructElem ->> -endobj -95 0 obj -<< -/K [22] -/P 17 0 R -/Pg 15 0 R -/S /P -/Type /StructElem ->> -endobj -96 0 obj -<< -/K [23] -/P 17 0 R -/Pg 15 0 R -/S /P -/Type /StructElem ->> -endobj -97 0 obj -<< -/K [24] -/P 17 0 R -/Pg 15 0 R -/S /P -/Type /StructElem ->> -endobj -98 0 obj -<< -/K [25] -/P 17 0 R -/Pg 15 0 R -/S /P -/Type /StructElem ->> -endobj -99 0 obj -<< -/K [26] -/P 17 0 R -/Pg 15 0 R -/S /P -/Type /StructElem ->> -endobj -100 0 obj -<< -/K 0 -/P 42 0 R -/Pg 14 0 R -/S /Span -/Type /StructElem ->> -endobj -101 0 obj -<< -/ActualText ( ) -/K [1] -/P 42 0 R -/Pg 14 0 R -/S /Span -/Type /StructElem ->> -endobj -102 0 obj -<< -/ActualText ( ) -/K [2] -/P 43 0 R -/Pg 14 0 R -/S /Span -/Type /StructElem ->> -endobj -103 0 obj -<< -/ActualText ( ) -/K [3] -/P 44 0 R -/Pg 14 0 R -/S /Span -/Type /StructElem ->> -endobj -104 0 obj -<< -/K 13 -/P 54 0 R -/Pg 14 0 R -/S /Span -/Type /StructElem ->> -endobj -105 0 obj -<< -/ActualText ( ) -/K [14] -/P 54 0 R -/Pg 14 0 R -/S /Span -/Type /StructElem ->> -endobj -106 0 obj -<< -/K [27] -/P 156 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -107 0 obj -<< -/K [28] -/P 157 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -108 0 obj -<< -/K [29] -/P 158 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -109 0 obj -<< -/K [30] -/P 159 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -110 0 obj -<< -/K [31] -/P 160 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -111 0 obj -<< -/K [32] -/P 161 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -112 0 obj -<< -/K [33] -/P 162 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -113 0 obj -<< -/K 34 -/P 183 0 R -/Pg 14 0 R -/S /Span -/Type /StructElem ->> -endobj -114 0 obj -<< -/K [35] -/P 184 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -115 0 obj -<< -/K [36] -/P 185 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -116 0 obj -<< -/K [37] -/P 186 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -117 0 obj -<< -/K [38] -/P 164 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -118 0 obj -<< -/K [39] -/P 165 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -119 0 obj -<< -/K [40] -/P 166 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -120 0 obj -<< -/K [41] -/P 167 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -121 0 obj -<< -/K [42] -/P 168 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -122 0 obj -<< -/K [43] -/P 169 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -123 0 obj -<< -/K [44] -/P 170 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -124 0 obj -<< -/K [45] -/P 171 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -125 0 obj -<< -/K [46] -/P 172 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -126 0 obj -<< -/K [51] -/P 174 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -127 0 obj -<< -/K 52 -/P 187 0 R -/Pg 14 0 R -/S /Span -/Type /StructElem ->> -endobj -128 0 obj -<< -/K 56 -/P 188 0 R -/Pg 14 0 R -/S /Span -/Type /StructElem ->> -endobj -129 0 obj -<< -/K 58 -/P 189 0 R -/Pg 14 0 R -/S /Span -/Type /StructElem ->> -endobj -130 0 obj -<< -/K 60 -/P 190 0 R -/Pg 14 0 R -/S /Span -/Type /StructElem ->> -endobj -131 0 obj -<< -/K [61] -/P 41 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -132 0 obj -<< -/K [62] -/P 41 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -133 0 obj -<< -/K [63] -/P 41 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -134 0 obj -<< -/K [64] -/P 41 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -135 0 obj -<< -/K [65] -/P 41 0 R -/Pg 14 0 R -/S /P -/Type /StructElem ->> -endobj -136 0 obj -<< -/K [0] -/P 191 0 R -/Pg 15 0 R -/S /LBody -/Type /StructElem ->> -endobj -137 0 obj -<< -/K [1] -/P 192 0 R -/Pg 15 0 R -/S /LBody -/Type /StructElem ->> -endobj -138 0 obj -<< -/K [5] -/P 177 0 R -/Pg 15 0 R -/S /LBody -/Type /StructElem ->> -endobj -139 0 obj -<< -/K [6] -/P 178 0 R -/Pg 15 0 R -/S /LBody -/Type /StructElem ->> -endobj -140 0 obj -<< -/K [7] -/P 179 0 R -/Pg 15 0 R -/S /LBody -/Type /StructElem ->> -endobj -141 0 obj -<< -/K [15] -/P 181 0 R -/Pg 15 0 R -/S /LBody -/Type /StructElem ->> -endobj -142 0 obj -<< -/K [16] -/P 182 0 R -/Pg 15 0 R -/S /LBody -/Type /StructElem ->> -endobj -143 0 obj -<< -/Length 55207 -/Filter /FlateDecode -/Subtype /Type1C ->> -stream
-H\Vt_wvb)j!$<HB18M'̈́ٙdv$DkQQz*
RSBAJ)(H"E<jyH)̝YIf̢H( -j
E1r"J_<NGn`Af¶tN!>E0DX Cad$RLEJH5R#" iFd$t iEC
N/Q4r P[hzZA2ځ>cY/-m;ww]Iyڿοٿf - LM-p/8kՠ/(`O/JpKpOp!4Bq}PWКжо{ X!6Ucc ۀbاE5I6|8> -/Yxށw=c*x?߅GgWB!NB<b! B#SDKb=-#q8B'+u%q%#d9YBN%+r.9mdI|#_&_'7oȷCQy<G~N^#oP(ER5HMSUTu%QF^j%<OP;=A0u:E.S7уBN8m^z2^Oo;?{}}0!}>EB/We(f3Ōg1̴1bQf9$yyg^a~żlb2ۙf/9aN2+ -~aU! -'3?/ -`q8R-+N9bCQU1%.{ŕ/u-O~xTxA"~)/ -3pIpk3dxMx{)ȑ"/D6GG>\DQ:*FFGGESYhKԈvGWD<fY%f6K<?)cK␗D-NWbԮLCooMwyyUuKSפؗ6B`ҶT61)UJV
PK2&j<evnlvxE-zeI.RrD\$+VEi.1Y%D-i
gD4pLhN;a 6f%hp'b{,gB8ppT2<:oU=)u'x9tY6RJ"uJ['L6mqcIAC\`n}"DŽ,d]ӓIEoܤmLv[ߛ\vɰWry\Ekqfc[CY\7rȑEPndf#72rݤ-72r:<Z/u-8bB9dkv-:j:]u(#ŎrfҶve犹)#?.kzRѲxB<m'<C@G<8㉇q\_Klg<8㍷έqD9&&ɸF]1UJNFrR7aY/0)z@]Պ:Jײ
)&g7Bnb&-sb ~ɆI;Ғj%ckwPMi}MR-+V!VySԸbmc!YqIMc˪)%ԮHٰҤdJu.Vubŗ#NrWb0UW8pU8*\DqIITԸlb3s˪*wUSʩZTRupp">*QdqcKjak$\8~BXך1IUJuN:چ[ks!倊#O-).m==
pFX1W1XFJI5ZḊ1dܷu.(+`y`46k/gv6wǻcw}5Z"&*DIS -ITIQi+RJmRTU+4j@Q:s?{wJ0̹={h4-"F#,Q1d$&ܘɤ&3+垏W<:( 1D:k '&xR'gsp
lB:x-Xt:ӳ9)Xg5+BF,˺M<!u2?2YξBw2ǝ.Œ倈=9q1KQUܻ t?Mԝhu,XV:ct)*xJcNX= =#ց1EtZv3zl/qK[iKl
-N]ݩ3stSE@4s0\Ɛ3٘[K&=A$D%b~~ L[Lf)[ -M6r3 -gzvAEQvfEvBd̝On龍iQ9/_|."v)pPs6',6XA㥑i|4 -&@LBiQi4&,CC /A^y %K /A^!#G<y>|#G<y>|)))))))))))))))) 'O ?A~ 'O? AVN5Ԭ+#y%^v2o4'Wo4 -MFхQSSSSSSSӨӨӨӨӨӨӨӨQ.D]u!BԅөөөөөөөөS LAxh44A&DO@JJJJJJJFFFFFFFF]u!BԅQ.DNNNNNNNN]0a -A=]V۸mCva(w|X.SAlFx.'s2D>2CX𪳪ȝfTQM><)Lzf?^_qU棟I2Z7wHc4;sn'hy#,v,7cv='{;1qJnvȂ.\ӾQS1L8M;_&CSpD'SV,\^qmd#L{2|sdN)#cFDB)Ғsp0S'dZ,%`98I9g1#5*HAIVRrrII˽v[fZ2&'-(;̤,37)js1ytn`@'(*Ŝ0w;^QTc(!AQ\zQu⻘g`ދ`(Y'Q&`Aǂ>7h^9X۰/cQZ.Q',iXrqKXKkKϠeQ$~Pve(߉(GXփeOa<,?`EVXq+`e -Pщ?XkbX;)*O-ۅuX*W`/AC6njQ
T@4{~kPmTjZPӅQ|
5PV6ZAU~xGl -b(6}Ӹ||[4PE.ԟB4.4@MSyx -d7[8|A9
*_C @!pͧ|-}hy0bQl;ma -|y3z+у+߃2w,,~I,cK7,sbTgsxVسb"+βҁ[Xi6 +UXuCXI!`6'xZ+ֺv ko#PO`$̺1+'hA۲>\ʆlxleL,&濳ًWbÖil` -9?pK.bK^RH]Hj!iCG.R<]˥\q'Wΐ#}yd##̿U-Wݹj KETJv'"'G\kVJ]ɝIn9\wF'gEy#!
7sc?(\Ma87fnS$:sk2 -c=)؉Ps<wSҏԊ@J([@Y e{q(_Ey]Tb*QTQL|*7PYŃq<8ăTj<UG)<<#Q=x'x2'x -^F]~$>55f:5!ԤQS3O?/yW*u0-
ovv8o
<xw e%~KΝ4} -ʨq,>S'䉸fl4{,J\QG>.cĢX<ar(H+%oic&mmki{TMv5bW։UhƋ&GY/*0[:/ytrNyb*yW.(DKtwk/6b)b{IlŮ
;w*ݮ}{vZNڋP-QQ#q8qrLqT-=HXFzႱ4mhnsR+!tiRMT귙mbe!)F25&zsK[1]ouYiTWz*㵻>^]>*iQNxgci -6U$ź!pS*M:D4pj[\LP2w4l)ڽV2٘B1ĆeT7ruFɣow[C箲oMVۭ_~*ҳݳUj(hk_G\**=Ir⏘gs}WF45#~wdQ3K?[djha8'6}h*͛8%ʌTEJLjt27*@XX+W\zjFo긱`di<Mcֵ.hjԈ>^ǎ}o-;|N3\'ѪE宮2~otjrvlt:499}MΟd*mpZϝNiu|]_fyf{_8\ -cEWJuddXA,R
^uZT<1`'1BwmLAЎfMLh-`R1SP'6 !P -A`8:Iyo;5WcMsb8H?C (O2 '1Xe($Q#m*Z&D%Ÿ$?Y$W@\ -^ [wQ? DVkE cHikE `qo/8H"`5Z:>t/`
l)(x֔:2;g ~乑K:pCB.\?$+ /D:s;LdVާ_yElWnrIwV2aQrV>aE诣l|MG3KdѸWrhmqc]D@ -5맖o@J
ⱐ[`юR1M"ebTk -"2rsܜ,JT -)Jf;<36v`|MRLyg%Lha@Բv]6PVXz܊:`67vs۶ͤf_P(عIѽFQgqD<M"wٲ@S%~s˄<ˠpA7L4 -').O $1gaS -FA *j`jHs85r65_ûix0+æe<J.۔I33P3V=p|)Uvٕ7ڥ.?Ndf\*Ty@ȰLQo",ȱb>I؟k -,x´Y+xޅ%?Y7W?'fSQ;OhmX>hap4q -T3{' -bq)"|("$C;{Cc~!"<Ϟbp|;\hp'nMh!ofq?=#ȩnjb]M:ANdS@cK/'.]ؕҊr+n3BS'QڊFL_)kո3|㺲[51%l`o5yd8;E%_$C].gE.ӻEo{×/Hu1V*tcM\(uLv`^ʺ'd.aCc8φ%oNOc%Owre 7sT':
Z6=(iRejVjqIvЍZS
#qEׅثNf$+ :b!0
0z74d _n<78 -:|'4ꆃn-g2@~7F`n*4U&Ssb4]IUeIîvh EY"*4
68idQ&Ȫ"F (7;hH# -q9㭞מ3s2U{wؐc9} @,O<ȧ -y@,A霥>x0@o>0߹BQꄴHZF߁Wwx@ب h]}rġ?^`YDy -8QhxMB^ -iPM$H4řl?E5s0Fξc\MG$#d 0X( _{]W{z)JGlc/9lIW8_o -[p s%{=S~!3#XsoXA^brDT;\0|uijCl"SKOaFpfٽƝX]WQ/qYU̳ -\_dϬJ=gˮe:˖~k:C}~v;F?j-Zףlc7/64!o]6=iM:qu=,WA;-wnpt?x<lw\t;m+)
)3^$ՊXA~\Q9"f `
fOLV"dam+|V"*54;IG@R0IDGtw杖k8}оqK. !s#/|kVIU>z=< -֕7R,|#zJ -7䞸b~I:2-n8v&IX6}]B/狅e / r!r -W[q:eeT#8JI؊ ~#V{DWR,NGNJ?8$1aK~#}P@Wck"o- MRU{ -j9 55ZgӶ0&22aq5W5 :PMHd\& -i O~ -߭ -O[;W7 @),1oѻH <|Lqt -ͲE.yl3wknVj'.7^C"'S8!=)-37},uJ-'wjT
C8̂bX Vdh!kd=fv.,8ϪZP㴬>p-1igtButW=!<pfvgD}%ũ)l^'HXirQ(,;إ= +ᕄZI=Zd7t\fQ;+.3m#[0͝uW';A(J=x7:S~UTܺ{3N~^p@B6;)#Q%x/"5 ,?6_zvC
xեoUl*&&!\MNX§(c_TW{PSWo6t:Y{Am}퀏 -uOB -"H 1H@%+H<ް, -Vj"[Cw93;;;q -ۃEMݭ=+{Z>t(JK,hk<BCDtNg>>yF5:7mx\ >`8>ؼ#Wk?,oۏ?|+3cʷD3? xO^W -(pỏhm;4kB4'!¼.mv}rWdd\鲫1oƔo b| -K+|#n7X"M-S)Ҡ_ÐG/ -3+ -pOa &RU^'W\ˇ008ZgO{":b(IDr -38@Gp|dfA,nKB4 -\-L#'(wsByv曙 -;&_puCvϙ\*"G8%c[Єtj2I&y&`r9kX#
v
!>d7,Y)-.ʝ`BuA7ԅ $T]LOq#\=ÚfMg]v?`:sy|U%7UHϔ$<Բa$ySL͇^!v|[0;xx*53LEU-
%'KH=wSrm
K-G^~6#̅*Ef
hD[sq>d{Z4xXjq9[ -
C@Hnz~⛽Ƽ -!jy&3;$
-pp+kjD#CXA.Cz$ȭP+ -y -kf=w/)ڛSyƺJ-hoh1WϏ7'
x_vY?)V"XP%DBҫߦ8X/RMҢsyIZeӲeRefYe67"1R6yǶ=$5&e;?jQ4Q}`E&ミ̖%DSgP'u=Վ`UC;K%"ᙺ;IJ1 -,:F=dal
SyNM@>Ť\whMS2#X8(zy̅RG+6D.8lpLA2}-1g;M.
h)hͷd5qb/\i%knOTaH]{*Jxf7Nks"rG<c@$xïIݤ,''{g[K
Dm~V j
ڝ~ -Mg'zQz) &MKRT+ڵ y^:V48 el>=0[<FI]1ro,- -l<=cg0A.~jTi^]=NC -RS^Wnx8m$+^uI58Qd\ <-EN<4n1x=6؏Z+-;(rٟc9~Ud@p cb]QMY<i{nAh.zj[i(HSZyPAkw "j־YO;Ós2};ݹw2oNUR}Jj$_jn:xIJ{:%$褢OAE`4#8ɕ> Q/e*<NU=wgAt{p7c5eء.8y%#ލ2G8|W'*_}ۆhcES,IPxp+['WTaJ":\HCVd=*2A9O=3Fxy#^7_ @H4_$ 'c"x?uX -DZ`0|-)ryNdWLbuڏJK(EN-pt@sHbzX9b+)gܛ\+,Tvg6xć;}]6HTV/}o.26qxj7O)xL - pLA>M2 |`UO=D P - /B4G1<OX_֤ZEE%UHơ^>ylweR)<嗡`P;khK6]ł?==ݞnn;\XצR%*~!! 賍jEEت\qnŢYTh=T¯Ewje13Aid6/#7Jpk̾/e[835f35朶$|xӉ/BFBY٫qqc!0vjh]` -t]l0e -FsYd6t=:# -Wq}ۇ{nRN"43bFfD9ӌzPlXuW0g7<y^Jʉ<e91n8pZ%ßĝ)Y&S%N_
w҆WWkϚ{o HIEflKQ*ow߱^v]J~"6WlSP\\J8'_rAFDȖB40p;cS `6F["#7-[F&=b}35Q\?}6=+79i26uaBI[9zgG5N&g'ceS:>]ZNΥ@LPuv~E(nڹŖ1V*}$&Г'c#*7HKU谈½3_~Owt?ã-08<`[RYZ~]E?oos(^fSkس<]YyAThhldV
?XN{:46LW{TtJE=uي6vX.//`@N^Dsqq_?O'ɎK%U9
DqL*ggLlom$]-|!Y[ -oӅ7G\'F!(NPF"4 3nDT]($4B9{$} z{q:tcdz 屐"_0~"*,@7Ӈbp4bh*L$e'˙S^ FdFFyJ['>:&Y#qT|('"i_*+z#<<c'v`yY' &D%E_ X/s@Z3
'^W?PzA=Jws߽Wz客\#v93HĢo_ra!etj*1.Ec -bI\>Yh 2(.(`r#MU%0pHcayEd˓pJo
-ph -hw%v9"[}4P{sZ<^zXZb{P):.8tJeϺzDO-`)FU+|W) -W -Faj*?_H%$( -y.$= Uъw4(<E ->|L@V&Obq060~[<"hdolKcMe_W"=z4bwz?RmZXy{h5/>GR -xdeaq.{\
r̋C&T =${P)Cq37Sxh&zACwoЏ:-CZ7";4m![&0 W|~AB -$) -\5SM;)Z?UQȀ{2ֽB[G ->g9ӐQV^F^VLR&*D&:>3< -(\V(Ԇs0l g_LN-^߆6>-`"(ON!y$qQsvC:&{I2%7#+MIL
a)'.?!WC,<f?;X%"sENMOwk;gK\G[+GJ}8}bw(7`n -wvͲ~Y)Una~sI̭cEprb;j..oQg"D+Jiw;tIm-}ۼ#*:T;0!`1ZP/)<CL=nuTE
]Qa2G+_zq:Jgdgε -A]}_͍z!L6"K
ON[G9_tVԹ\NN(76t8dLj HLJ
4u{9Ttdd `%l/l_<2ӏ#7ٴȝ'SA--j'R -p~&=N:joma/qE=EhWRމEGAB훆[! -^җKC7%>jp-p(s.>x{ouD4SVc - jlDx{#ė}Ty'yʜn<zvHL:F]z#T608RQ-)7J:K*kQgJjFgNt~߷} -㑶ojɋ;bX╢k
4e -i(˥ocV:q^)x5`#NpΨ*zٹGK5xE[Aޱ;rwN NCKY28p! 1L!8a 5!FF``7Ff/KYNFh꿂aQI|D%/%[G6%XT13`dr@&7[K;\&~7 -{SL[<AasGe(8bD+~KT# MЗRqtL:=h5U&0y:=6{テ~lzH{>ۋg÷/Ctp<U|#e?bHAkXدŅ*'ELINqy -4m ?d*ȔFBUx*j98;FLg)JM)UH W*pkdsE0۠me;rr^!Js2 <
dnbdΔ89SyYm4~>cȨ
[#E<<e^Yg[A/(Ec9c;LWCx+ljz+=Bk<LtL -uT*(d#%҃4,7:c.ғ^ W/@;RK#qm#FWNl{Xay|y>'='3ik|}uv¹ںؔ42!CklPcCv[4/cӉ=(ك~9"gIJ8˫ÔWm"ū{NazRfȒb,_+hQY1Ӯ
"WΧ]&đbMcaTŖCfA!I -/>stiƹ̣q% fJD -nCB6vg=MndاĀX&kQ;G^I9rQ|l%{aGaC`DV:eh!Vuyޣ6rFa9a'kMVҶjgɣt*(}j*v4t}\KkZY+v$a*v7BkJ L -٫TmU*
j*EC*Mb27.m#؊hقphGDe7- " -ȾE@iȈaiE1<bZa.|wsjŲP
5SIڪ&mk$_Tim~1ϡJ,cn|szOdW%zߓMzCi ҅.Gh/a`VDj:ca>͔BJ|8e$!ħFW,aBSϞI
CTwQ,n04Jl:ɲgV"@5|mƦ7l:.qE6wVSy3 -Z!\][lG;0~5D $% -fh2gHx:&h<%EA}ᗇ6*YIJM7,/z,t~s[{aLZwf5q˱>gr%kJr{r%}մWAgż]$5 -9\ {tYƲ#
MHI1N><B
Gua#1o[r>MR%^jc3ұ|4ȋiMl0E98WV+:%67`YA kqKՔmexTbՋ#Ѽx"QQ,ťIdҡe0vUc|҄j>-i^""iJ5P|7~ؿ;9-K~0X -Ga1sQ]%soN
dfbZy[V"v/VkƃUS{P<`>GfR$R;ݦdhw[8_UɗIۥDf -?[7.f/>Dg$ - -w+n2w?fC)*MQV(8{Q"3ŽjU7fʣߚLIZdo)!tf":"T -V&*i܄BDv]9jWScc[xT_1I7h.#B$5rLME:#=%A~~tj/h%{_?5ThyyDG0T߽KO+F\ }F0&a8!
37h -&v-pߩwPƬyHJ9/!>8m~i %hD_ˠU}G{~Qu9&KsVLebAn,k7b}F\cM`TV@+j}Z]K*,tZpHTk]iDLPH/jBV|TIӀb eHY~8c4LFYlp+1:_a旒d5cky^bo<q<rS«4*+CHUD0T.2L4, - ϥѱEI'Sb8j<M DPbDf`F<'!(VGjc~c^0;Zpx -"9x7\BcBY殢yK^gd#b3DUҴ~~Usϩ"#j<8 - ix,ߚ[];ǠO6#Bp ջ˾G]<.4`? g/tONU'Ծ1à?6CTG*ӦvHCN1OGp_uk8/>SUwɕ4]V#"ѻjӦvàHgujzgu3hy
iKbl!蝖]i@֗F=Ym{
6x.<~j`~,{HLp="g 3+c0m33wX+Zz6qa܃(Süb`k,n3ɽ.u.@Ȉ6t̻,P9tBU1.XrjihR<}qqal!/oc?-ݸ@,)3)#=a>f<e -(U -h@~ -?0q]&oa^;_+݁mZԖ| u$R~2}Xa=Cr/{oA{SGxn/.s^B?۫)j^7w_@z:6L -BwEɛļ%y}/͵l -)8D$p @ue-7I9x2Im`1G֜%=ị]4Mv#[ x5,>,BKG[Ƨ&?dM \psVWX1|&>e1(Ѯ~n\KZP11'm^2Ml˕VqD-) F#>v$r?BYY8?2-+M#&;r0CcBMOA>]Ǭ$e )hn:IzMX>,#1:
ìF6 -3cFx0փޫ)PHV#àeº'JHXU'qSlS`xf<t)cn,1p;@lcH$^bE9A)G"lĚh~4;1@* E?DYU3mq!AIK3 -P/(B8Be3aZMƩ`'):.=.wq;`#kr
"aNT]"J]݃-ZLMH${PSWp$Z:rwŶlgv}QPA@ -k(O1`F^ԲʶElkgC=77DQG&ssOrr>F%^/kԆMjڰqeA)x -Kq<Nf]B0̒șB&q騫?Q_7vӶ]>v2Yv|$LTЁcGNEÛ<L` -y`R6*X*N,Q;U*n/U-j - -Iu|?JRUrRE[Z8G;"S`INXR3!cNNu.)SD|hFłT2VΨZb^16V9$Ui-G`[_ZVj(,bUHHΪ|U)vVYYujQsZ,P di;33Vh&mZz95x#!*ikm5&Ծs?g88 --&cQS!sj11RX`̆^h֘q0RV71Lm6<L98IaKMܑiq
;إQZ-.!%|2V귗b)UPJ(C~B
,9C `M[zKPV3SA1Lţ0T`)MH1LjԶVQ%jxo{XSא %8'i(Oȓ)r#Ou'0O`ZE{<I榬]6 -+,xѨq^Td(NHGHE0i$s6p6_<N\-g@ֵb)pi4&&(v &3?()`"i1pMYfiQ4tpć}bEW@qjx -+0dSSe SX+zL+0f<,(>aZ#aMG?;fYwf8%,('f<`Y<YocGB\
\ax,PATPRbYbRl5G-yUb+V4EUy<SPYcHMy4/_Ix 'W{tB$=꓄H!!(zFiP,J2ϛVGIxbc:z}ix4b"(D@ȕh$dșhJ=%I M]+IXI6ع -=Y-ZkP'뀉ͮ_tp`F7q==hO]jtV;Ц3FU)R4 d -Xv{I/1dp" -d"0la[|!@C%6$g}?鞶Z',-px*p^P
Yjօ;+V?0T{6T㷮SYߺ!noĉ;[-( "؇Z'Jۘ)͎1QMMt[oYϞS]P"3ejj=I8mVUjcϮmGuyq+20[9GT`0f9+VW(AiԜ ~FOe^l^,"-+_ŃKS[ϼ(}!πߧ➌r*^NW=ZRR蓩td}J&_*.O<u<"./Q5h/S/.,¿"H33A_ -5+1 *8 YWc3_R*EfVRzahNE 1 -D9<E$#H.ᨉ p-V>$dЄH8Er)ʐY" 6V}7ҙ^WB$dj]Z隨XIeLAtYV5!؝ƆٞF#!mm:TȵG)IED05*}sIou>[ztq#?ګ4(+XcC/yE\&3j4FpP 8T\ @d]ATn#MPtd@QyUsTƱj]}}9'mT jЦQpX."bl*h , |.]Po͍j-|v/uzU;`,]f
_0z>k{յ7np+kLFzB:Z]V!iiWtz}] gcr#2v+:h -M<Iޠ3;lPfQ>щq߹PLѢ]^*^yͅrpg<OEFq^ۉԠ4 !7KM"al]b`ceILLlHH4'2NRktrVyJhdw5>תb%fGqiwW
>i+Li ->|742O"e+~T#B{7$'en8A~)hj!v{7h%EV*]|Ą7O+1GB8N JDx>S!v䄅PTe-M:<I5I#4$V$IݛbhOD -e4r@ᷮHFH)^ׇ!^AG841kgg5FaÎQ``<d ̐fۢ36OH׀Kqj}#'&DYBQQ9ǐ2dlJPll?WBBC."=(L1vT?UU
וftSA].⨲l.`ٮRF6>*R$e]=AuvDz0K9k։耼21l>C9Zʙ/9!2 1ēU*8$q1q -V7'ؗimm6%#e&tidM=~]Ȟ!RB'7b{"&844zccu;2B|>mQhW4sH@ד[fZ4ޚˑ?(u/CklRJilVEGj3 -d )g9qI+,`8.+W8i4ڒAj>]&\xE>|HłPK!V*HoT9LmΠ5˞Ar[tyjR!G县&$V)+hj`arO /I#}"4$ "T;:]d [
nr>Fѷ&0d4/gf?N_'R[Z!5l(Ϝ{`HNˏ*ghh!ж:(g(DU$qEࠢc - (&ޛ D7 e)o$YzTW)Z~ N`Trk,jkkw߈~fN!qsEeeY\"B9iWbu9YsiſuL FXqB>F{H^W.
qXs{!G*gQrA,ZrWd;3÷ΕpGe1mQn#{Bߔ<0\n/ uTry
]; -:M7Eut\q6O"3IW[i04Z'cѭb[*
籌ǞWSKU"zڨp[pѬHYbQNMKa*R[B9+p;ᐱ.n^H -SAAZ ^$TJP!?u_w=NqQJ-SOwD$p -{*#!ؔ[@}EܠznwacE|q?ܯ0'$עoҨ|. -.Q SO`cbkk,tRcRbJl(F@ȶ_ZX#f'j}BU=~B㡦k~mA_ (*s
{?+-.7Q]>f -aK<{agx0f'<XB[ilՐOx4H6w`LX;R&0UNOh|0{t*6*i03ǔ1B~ws03ʭ9kiEC:O:P.93V;$x)J~VyB? -9Il,RztRPKT|(
}PU/aЅv/\<vfXViXr@ȷv}-iU2'';P -a١UcKӄ[{OT],H,Rn$K<${F<}V5Ü7JU~ -i;ѤpÀ0p&;Pt&QF.grI\Ɛ/}On"_&';Qᙟ,<MLWvrP7pz/('mZ ޢc/V*W8R:l,[au;Z! ռPPtg8Ca^>c%/^Edn'BsBeF#ӥ>zfXy zD&7covb_p@|]EV X]:!BDPFaXht")T -N0I%F=NxDFǼ=$뚼Hio^Wˍֿ(>?$U$R˸".]IJYj±cx(]֣IITrGEe9I{ذT(O_ګ4(+J&8<iP$m* -Zj2 ( - -4݀
4fX]dPd]@h!fk2SsVcj,gWwι;S슔t:qLQVܥ UToH5Da\3z -aN>4Aaz;MB%ґH*?ƶG+Ϸ}|S^[Ewaø ;Q:vA3?XtH_cO}B%_ts_W(;D?oXB4
-FMaQIebFWȘh!ɣa4kr6'֒T%/hmd}XMfD'dˏ0/Q ;'O){zgj`YYyR!S_浪5&4T?cSd#[浳grp)i -QY_hzEctpdhD(GykOO\^`ȣdrVA(xS,ח!0nH~HI= -h y56F]<+;|yJПi<q3'v]
'B|DNgawa -r@x0+&U4ԗc2wɗiY8d -&?#*n<PMGr:`K.7a!82H]| ; -KWH2bKћIdhv9OYkpܙ\]Vfv>E"b}T@AdmflkyL?Z
-1v`;& Dr߫$?|Q)eBG+8``8H
Q;zCϿ2!\KŔU[GDSSrW]g{UwROӔh4P6QFW#bu6|8oByS"Wi5є:}
9tnt^sfj7GUw648.~IKXGogh+CXoR\MpT\˳^ţ5TҸ=Ly}
`NRcI䝪KN~B -+PRϤPV3fY]a>G8(룻`[$k`Ψ_Mw!UYVWU4c4 -dϋ.a -a1D! Ihގc;/2rIu09C4,{i=Op5[FFn"z,z?rUi蔤*80/Hg#[cu`8SMDhK'Պy^\kÐoAMe͕fxK|ryqDCOe#j -awC f7:$.pBsހDl>!hG$ ыќ$v<ބ`DY宫9m$fB\\-a?^//m+;YH46VDJF]5ӊs偙\3Mu
VKs0KDwǖxOxUkAM5{%lb|"}EaχTa}mkn0F/Y#,` -n7I0Is$yHBNT+c|cXv:M,ZZTrQ=+=S{5ufqp/g{٘k:>ve+n[BҭA "/*/MWE@A -]Vc잛pfDDpqG==;ww%
lQ^..qr\a~悼PG++S&G܃qF;
u۵x@dʄŞPlxW(+BT)ijQ;q (@~:[7)n N}9(0/zWzf\F~z|I_4uERq&>.tAZ{yx4# e`hFVB.2<DD(H&Kh5ZPZ@:X_ĚIbƱKēz$qytczϖaF.|Gc<6AUFͤZy%·d w5Dgx&_
_=qVǟlqOqŴ? њ^-l6Z\a6=@aϦ%I:7s{|'/:eArͲ&,.l쪛*u"1V74f[37cVŋjՠ[tɚ6N{bh?e,[_z"'W%yzzOƨ Ŋ:nnq/<ck4sa נ72~D5db`T01B^P٪k>aDuIwRGHXv-^%5M-!_Oڣvv)#sEsqz;)tw:F_bctINAQ2_ȕ2L,rp'n<ǰ5 |_12'u妚7N5I1XmL\Hw<Xw^W_Z -4"}Dh*w]U5v&1;HYlB,cSsd$!6`O'""ig&iK4Ɩi(EPpga腭-uE#6qcP+w8 ӏ
\hPͥiJqRoOvtIv~q -ˉR0KLtQ0WeB^Y$`9v
(dpn`a.ǿ,RgAL?XQvS2c 7>?=[AjCÂ4+}jG2r̳<R"Sfg(z&;T=kš?]\yEZ9.͖+|%&~k}#<EntyXGf*M^VtT^yw<Fń TӠ\sM&قdI`rʺ=G]fB^$Bv$ -ydG -82[ZD~d-H᭫ҕoCU3<6я;PdU%جN!-aIf $Q#,a1ƬQ\̝hʒ[`!gɮe4>(5L{d.0 -NW'T pOV -t*,y?j97G`&а vb6/61Ƀ4_tk a~ -%4کfhgɓ<
ڌCs 52X>h@H$ACdpŖqۿ<#<*7HXJLK6MoNXo֫=tdge'k2RMH"]MJfL.!vm+
1%!*J2 nvFcηyη3s8ggZ.St08R#^"oE
V[G; uT/~u7q+^d -˘ܕaz)O(_0C9II^&-Cݏ&÷ cb ^M&)9iMh=<M{mE0CZaCV}
re+㧏4:pAmrW0|:üS#&8!tF0Y;j>*p5V5$+05É&x
yH~r×mUEL%G,%NqlQzΉ7M]Wmܚ -c -8j;zaJ6@jBA/=H،NhT[HW5Xj -3$̐q^yfs0יJzsKra&]CpXG0jZ?]}=Ba-Lm=eoNWA@+J"G2uC ƙa- -CJI!
:GCچX4Iz2T'(a:^xW`hpFa#$?O$7ldH8"0fvB<M8atiB
G#ڋxWb0 e0UA/ka_僄j[nLa{|{0 -^Ҙj0YJ5[ߐn)# -S8߆Z7[zJ5̼,ZSzy[PР,>웋yKf#U!똵_!VNi.!L<LtET4w2ԛ+]zXur,9^Nfe$g>&R[g0}FۼՆnb5%ߧd{`,fg'9!LjU߈ -b@`r*k$'eOkڬ
L7LsZfK.$T)\fq4
z(jZglfmmB_ -R`7S5JM΅]IMdM=\Af1r
B"ڰヅd+}\uhҨ$L8mU0nW\]EEWE
(
""DdQ#ƠM5zKΙ]3'vWn}_]u4JnnY7DjLh0"DT2mI^p,x17xi1Fqv6DRSSuYHEyk^8<QVhQIIWE_gm:!K͔ޢ?&$KִzobDv
/Q5:a1a{3^a+Ŷ4K| Ah<?}s*A
}Y]vV|,D|9ЇvR!!Xw$#6#.΄d1b,=g31DxَҰQC -AvU]`hǣO֞ -
MKjʊwDd1? I=Nb4zb_|9h4l=(=Ra~tjLJ㙺> yk[WA0ኇ|8FRc,Дxw0N҇ԋR㙈0rƲ??}!)47:j^c'6#k8wn@zڸ}H<wfOhvmans(?6=1E6SjØeY.Ͻ*9'BJda̍¸#b5GYjlL
.mu`x`/-C$IBe - 0AUrlj 桩r0I8D75$R&-0<議 -k"Ck;&#y4 -I4VGHLpwBjɈt,|XʊHDߺ_UEmLkģCs'jrd)bSQ}X|6bUq)9V^X4kȚ6ҝ5ePduYS -k݉4T]<OƎU;0o]0~-vb/N;U5L9!cAqa䗃}_O~ȪG:/9H) !sG|Kw-pd;+
=}AEw%A~X +WU ǚ;(_578`m*:?۲8 - -R9ήj.zݗ\vGUlD. MTrv];Hʯ8#vF̕^;MUm}) HJ>-xǩ"Tr׀w՚B(d2Ki֠ld
iʼ;y.l-[䧤{WHARYVF#Vx`$eD -! -Fj@j>sB!pBy
{axn -ݺ]F9burfI5=L} -#<;P|/GބukQ1:*EQvX%2!`hQŅae?8Ev8T -ꌶ7̏/*SxΜ9+y{? -GBR2|Q$PN8SC6MJUJH`C+ -v{;MY[+-6NT3XJU0Q[Zwlagw#YkWՏ7VDP9]u/-f}hcka2c"*er7N8%d4|H<爮zWEUFi -LJAP(~4Q_fUn@<(JFYHY*2ryno_Zǟ`81nBӓZбTeWg2١}GZ8j/v~L81wZ.րCUe[1.9Ȧјg;2硉gA"#B尘k "7w5`6Fy"*戹{ixEC9jbSqYtCrGa<YX~<J|ϵO,꧇J%2[ɀXy>#*//ԝO`(Ln3;ڀ%y6>%Dw$'_:ᒾsn$"t$N |? -QDDz;\ JwZʵRLMV'#qehC%n|,&ơ(C'@ᐺL0`t#
׀ -+b -Y"W_aQ3(~7 -amõ[)}k@S^UYSX]
g7+ -ܾw].{TtYP
h?fd'7!5;6\݊YGc>?%kVO23Uﭒǩ:ӭm~#5l# -d.nh'@HyĖLB_eߩ OXf#ZRάHb&g0nC&QQOmA;ߑYe5{<6CMCДKQN<&]-K*I"ȳu^ -DC3o|_@ryccNlZzSe=})I'h*ӟo!9H-hbse2/yh}3HaFS/Ӡc?h `hNb~:'kx^ҨBYonyoZfPoXZ%{2g%D\0gߜ7H,dD<_:Bĵ`jp,^$~3 -Zb6Dza#}8P^}v5x\Td:\Ozb\AfboɦiVއouWӫWE}MAZ+Q"{yXo7mE#<a.f9p<090/ᣥB;[ǰcskF[qd:!ð^a6IUK5?ӫ
5j*nω/fā{bnfOeZ)#Ω}eO Ʃ1T,w`)Xߪ25Tq&nP:?? -+\Tr)`@V4*]}ѱ_jwѿ2g&}b =5xy.4M)y.yk4`6Wd&2,5zaӤ\ -f.m)ڨa">|W?̯
x*I1{> -cx
4~h?{7it7 _[Ghvc~1Y%GK8*;. r;dA=M7VcD l8XP}J5-\q38q3==>~?[uOzʒSԓ'beZE 4cǼᓇ`'&>T72,4ŨbJQ<?D!.q`cf"Ve9zݦ.d(|˶]s -d^B8q+C$A<&zyohI.ي|4)s*g33$se~7s<lE00[,P}>XmmV`R`b~xQّʓ}'^]pCmDE^愈 :d<'LiJb k$ ?WM-snnS]N)#%~z%U
925Zu<V,Ʃil/k^8T.ȟ.89T+* Ȥ#[9Ovf&T`H|C+n1&*e}7lm?2/=8:q~M>B9Zhl~}5e((<_zSJZ~Sl2e÷
^j܇g+NUk7uh<hu5z~:'|Ȝl9} -=W -%Bd o>q࢜M|C?8̱ӊ+7UwI5&- +ˎǃFbEhXrrEY(IIQSv::_=~4N:iKX7 Chvt`C=QkfwIMG3fӿEj!д9˂ѦzBڔ)oeQ= -!%в~XK̠نp JIp_v">ɉkt?hu6\U/oX[TSتRSWFqFn0#9jI]v^xێjuMNBed -0-_%?Kf@ŨmPwarI76nSoetT%
-4o>^uiAD%Q[ؚ\\>#C!:5G1
r$J֕JHj) L.ن50R*ːgoՖ8Ik.!vՆ\12,GXevQ - f.c(]GL@v_TjU+&Hg>%(Q%"5(LZEfEF9; cl?lĀm7XMЎI#2䀬_[a&z3akD9o._XN+>Yۋ74/b;hxO&B0i2r -(ªm]Zm}TRB $ -(!(<*7@|Tef~t߽nk3;o>GLIU j`udRpxIpi1n?ΦoOyw寳W~Oopu.WJD^#Q`
+z`C:xEg(ccB1->TqޗVK0lZu2-CpK+ݓw.̛Gy`ex9c;hfnˍ@֝i)8qs/(&lk\ -LW3"l M=7TژƀގěZNu;fZD>jEjē#<L`ѯ!@"CvB.vy~톹Nݷf?e%٪
zg&=مLI-v=aa7)-hNTSes|v]ZWhS@t^9|*=R#,)m6V$6an
ڍ!L{DW/ܲH;Sa{3S((8KU!TL]Omc'l[T?}}htoT[V۫ -CQ \0-I-j8jzm| -IUaq6{`&|e}}e#'7`$egs5;%+TFa!Gky
"Ô_ptMY\N8ξ9F?Lxvzx^ZyibCp$2G[YHqư
'a1#`Sĸ5<}9 omr!NŖ ĝjjSxԦIJɌR|fr!Y$dWә*,6ՐV{?YC3X,<EdՖd,&B[aj -*+<7|g$HONȢ3xFl1iE<k<M1"ʉ -j.GWs:; A-!IOkҥ_P4I_FT^ -!"Ww`g8e&{Jz7 -spY{;PUOzKH')Խ![xRİ-$g1)kj#b+
ƲIrc}R023<V^RH7""B谽!RL"-VPI4p0{CcF긺_n~dl&5˷gɝrqT&Pmv؈R0<{8 gA}.p杻/b -*O%X.:3XO3LdMyc}18*nZvY*5PxA#K4Yݠ -oJZ^Qû{ߏo^Z]>}1ZwsV0í밿g.e(.Aѫ/sRI}F\0~淝BSMZsU.;U0 -=dcX[ &>=>r$"<S^2YtUvo I$yTkb`Bwru?LX'˅e -}/zVU$hh' a2³iUv饃$ -~⇆ -(eWp\;e7@z4AAhb5Ϟ?쌶q{JJq&Ch\G06>H;;۫gFlk3+}9{`95S6r4nt(7u)P0f.}U>kϚc] &^Sm<7n\WD[^#]a2Z;O0n|)(wV0pϛUm` -?g -|ǎ]By@welCrf< 9%:͌ΈV@9Sy6b=%^HJKbcshmn --kjzPNBΖB=!bZ{-to%gEԑs"~v3#PͣG9EC1dz`Ko%&-bȀ1LTIB#ڃ0dF-vE8XFN66 -U.8`x tX6@] Vq85w]8L'{wN#f$d6Ty^AVBȰÞ1'^l8 -_wNnAթSuU+f-IIΊȣ1GKtiFF8@KI(STq+F\M2![&xl:.;N{fn9gfnf!z+b{?mwϥމ!Ľf -UVr&:^f 0kn^n067q -<EbIUwѺ_akf7ƴ~imDk)4=EVr&W4Iò@_NH!0yKмjKР -v 7^2J7ܔ:TJo65^gs2XzhdaYaz-ѐ* rhe[-bEMI\qܖE0|+? 1@0 0eK`:-hnQ2&,"YE*êN+pRsp;LUH!ƎdR4OX+UpLX)Zugk -WJo&D-\ed? -fzWVX9lYGt:!ce)Jjj]Jqת4G~aŮ!%Horb^4PIA_hU+"F!{ISH^>R -N֭wk+UDQ|<TDD+!(mO+c!hTȣP0_CX>8M:?{(2`*80Gl -lx7.8z9UH|b(n+q{X=(Z=54mxˮ
|28U5^Gn//EnԱ2JV--; ,z8_'hmnl؉@_jO+Ot!<"|`~bJWhp B^ -EQnj}0!-0~Jv8{I_^[*=%+ح.*
eX|e\?3;L+A&1IR -QuuG/,|-b0#sFcl+CNItߴFV -lnմ7hyo1@,8V!,-dOg$[b
-rLimtMP
V*_SF?2#,we|$;>;8Lv/g&%G1Ў-Eh 0&0pJEEij,َBS@_wzME:GH1'm\ݑ8Y<F_,T9$LLKԺ{۫γ"̈́dS_]rOMgHi187k묃1oV`3Rw/_к-fƛh^G -J2[YU`1=42N'Lٿ,&#c-;"}?oy~nޯV93.829{!+ERyruWF -c
Ι§y90 :YEQ!8"Gۺ:#yqa!dيwTKxx@wlC9_^vM'ܹe zM]S|_ErP,.ZfX/32]zrhRh>!҆5#`^ȏ}'1AM?GCR?Pk'#@&aYM%& EMX-?xc!6>%Ec~Dq,p"QAixx+VT*q$
6#3mGYr -endstream -endobj -144 0 obj -<< -/Length 36 -/BBox [0.0 0.0 103.007 49.3506] -/Filter /FlateDecode -/Resources << -/XObject << -/n0 193 0 R -/n2 194 0 R ->> ->> -/Subtype /Form -/Type /XObject ->> -stream
-H*T0T0 -
-endstream -endobj -145 0 obj -<< -/BaseFont /BCDEEE+Calibri-Bold -/CIDSystemInfo 195 0 R -/CIDToGIDMap /Identity -/DW 1000 -/FontDescriptor 196 0 R -/Subtype /CIDFontType2 -/Type /Font -/W [0 [507] - 3 [226 606] - 14 [606] - 18 [529] - 28 [488] -38 [459 637] - 47 [267] - 58 [331] - 60 [547] - 62 [423] -68 [874 659] - 75 [676] - 87 [532] - 90 [563] - 94 [473] -100 [495] - 104 [653] - 116 [906] - 122 [520] - 127 [478] -258 [494] - 268 [494] - 271 [537 418] - 282 [537] - 286 [503] -295 [503] - 336 [474] - 349 [246] - 361 [255] - 364 [480] -367 [246] - 371 [264] - 373 [813 537 537] - 381 [538] - 393 [537] -395 [537 355] - 400 [399] - 410 [347] - 437 [537] - 449 [745] -455 [474] - 460 [397] - 463 [397] - 853 [258] - 855 [276 267] -863 [435] - 867 [435] - 882 [306] - 884 [498] - 913 [498] -1004 [507 507 507 507 507 507 507 507 507] -] ->> -endobj -146 0 obj -<< -/Length 516 -/Filter /FlateDecode ->> -stream
-x}K0^JƎcP$ C]UwC#$2a='G*)X;mw]86m쥻ʊ=5mDsQ70V粏b]{.Z,DO^wO˺;(j$~{kg"\})ي^voۋy_[! b+ۓr'l[OǨ}eR=S:ۄuD $9Z9sU=JjmymtZ6 (f (5ԇ3qm'mT'J8*OKD>AvBIdbiDŽaL`JcOLȩ)\Q͠$ h3|L4'@A.A- -}7p_9@
UYdЯ]RzcrH'{ɄּW@&f؛C|>_Buu7nB BhZ֧QD
-endstream -endobj -147 0 obj -<< -/Ascent 750 -/AvgWidth 536 -/CapHeight 750 -/Descent -250 -/Flags 32 -/FontBBox [-519 -250 1263 750] -/FontFile2 197 0 R -/FontName /BCDFEE+Calibri-Bold -/FontWeight 700 -/ItalicAngle 0 -/MaxWidth 1781 -/StemV 53 -/Type /FontDescriptor -/XHeight 250 ->> -endobj -148 0 obj -<< -/Ascent 750 -/AvgWidth 521 -/CapHeight 750 -/Descent -250 -/Flags 32 -/FontBBox [-503 -250 1240 750] -/FontFile2 198 0 R -/FontName /BCDGEE+Calibri -/FontWeight 400 -/ItalicAngle 0 -/MaxWidth 1743 -/StemV 52 -/Type /FontDescriptor -/XHeight 250 ->> -endobj -149 0 obj -<< -/BaseFont /BCDHEE+Calibri -/CIDSystemInfo 199 0 R -/CIDToGIDMap /Identity -/DW 1000 -/FontDescriptor 200 0 R -/Subtype /CIDFontType2 -/Type /Font -/W [0 [507] - 3 [226] - 28 [488] - 38 [459 631] - 47 [252] -60 [520] - 62 [420] - 69 [646] - 75 [662] - 87 [517] -90 [543] - 94 [459] - 100 [487] - 104 [642] - 115 [567 890] -127 [468] - 258 [479] - 268 [479] - 271 [525 423 423] - 282 [525] -286 [498] - 295 [498 305] - 336 [471] - 346 [525] - 349 [230] -361 [239] - 364 [455] - 367 [230] - 371 [248] - 373 [799 525 525] -381 [527] - 383 [527] - 393 [525] - 396 [349] - 400 [391 391] -410 [335] - 437 [525] - 448 [452 715] - 455 [453] - 460 [395] -463 [395] - 853 [250 268 268 252] - 863 [418] - 867 [418] - 882 [306] -884 [498] - 894 [303 303 307 307] - 913 [498] - 1004 [507 507 507 507 507 507 507 507 507 507] -] ->> -endobj -150 0 obj -<< -/Length 585 -/Filter /FlateDecode ->> -stream
-xUˮ0^. EH R}iWUD}7P %щg̜avz`ᗾ-v`纩z{kҲM V}עB|{=46XYކ^6U{s_پn.{vtu6Aʞ]EZrpu>,;$adʶ(m_4{Rݓft.=Y+gdX=J
3C?>(G9tD*2BQbh$%VtJ7wZdP!%!-@ BpEB!^G@^?!Dtzx{f3g}`;Q 퀨BEz4Y@l
07H5/(Ƨ>+$j85OIHϋS<dwFŀ' XO1Sd]|9B)3A/EzbL -W(AgT#bG\Z]VtR̆FYvI2"5+c-ٛ3_f*z\R9ǝ9B.b[7n? -endstream -endobj -151 0 obj -<< -/Ascent 905 -/AvgWidth 441 -/CapHeight 728 -/Descent -210 -/Flags 32 -/FontBBox [-665 -210 2000 728] -/FontName /ArialMT -/FontWeight 400 -/ItalicAngle 0 -/Leading 33 -/MaxWidth 2665 -/StemV 44 -/Type /FontDescriptor -/XHeight 250 ->> -endobj -152 0 obj -<< -/BaseFont /BCDIEE+Wingdings-Regular -/CIDSystemInfo 201 0 R -/CIDToGIDMap /Identity -/DW 1000 -/FontDescriptor 202 0 R -/Subtype /CIDFontType2 -/Type /Font -/W [0 [500] - 131 [458] -] ->> -endobj -153 0 obj -<< -/Length 226 -/Filter /FlateDecode ->> -stream
-x]Mj0>̔B!M{ - gKԑO9VNԩmڻrD%T]qIua;!{uqFJPz1`ΉvEsOalpDc
MJYQHSh^燶-=s{Pve<e%H ok!f*oF
-endstream -endobj -154 0 obj -<< -/Ascent 891 -/AvgWidth 401 -/CapHeight 693 -/Descent -216 -/Flags 32 -/FontBBox [-568 -216 2046 693] -/FontName /TimesNewRomanPSMT -/FontWeight 400 -/ItalicAngle 0 -/Leading 42 -/MaxWidth 2614 -/StemV 40 -/Type /FontDescriptor -/XHeight 250 ->> -endobj -155 0 obj -<< -/ListNumbering /Decimal -/O /List ->> -endobj -156 0 obj -<< -/K [106 0 R] -/P 67 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -157 0 obj -<< -/K [107 0 R] -/P 67 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -158 0 obj -<< -/K [108 0 R] -/P 67 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -159 0 obj -<< -/K [109 0 R] -/P 67 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -160 0 obj -<< -/K [110 0 R] -/P 67 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -161 0 obj -<< -/K [111 0 R] -/P 67 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -162 0 obj -<< -/K [112 0 R] -/P 67 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -163 0 obj -<< -/K [183 0 R] -/P 67 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -164 0 obj -<< -/K [117 0 R] -/P 67 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -165 0 obj -<< -/K [118 0 R] -/P 67 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -166 0 obj -<< -/K [119 0 R] -/P 67 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -167 0 obj -<< -/K [120 0 R] -/P 67 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -168 0 obj -<< -/K [121 0 R] -/P 67 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -169 0 obj -<< -/K [122 0 R] -/P 67 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -170 0 obj -<< -/K [123 0 R] -/P 67 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -171 0 obj -<< -/K [124 0 R] -/P 67 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -172 0 obj -<< -/K [125 0 R] -/P 67 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -173 0 obj -<< -/ListNumbering /Decimal -/O /List ->> -endobj -174 0 obj -<< -/K [126 0 R] -/P 72 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -175 0 obj -<< -/K [187 0 R] -/P 72 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -176 0 obj -<< -/ListNumbering /Decimal -/O /List ->> -endobj -177 0 obj -<< -/K [138 0 R] -/P 81 0 R -/Pg 15 0 R -/S /LI -/Type /StructElem ->> -endobj -178 0 obj -<< -/K [139 0 R] -/P 81 0 R -/Pg 15 0 R -/S /LI -/Type /StructElem ->> -endobj -179 0 obj -<< -/K [140 0 R] -/P 81 0 R -/Pg 15 0 R -/S /LI -/Type /StructElem ->> -endobj -180 0 obj -<< -/ListNumbering /Decimal -/O /List ->> -endobj -181 0 obj -<< -/K [141 0 R] -/P 89 0 R -/Pg 15 0 R -/S /LI -/Type /StructElem ->> -endobj -182 0 obj -<< -/K [142 0 R] -/P 89 0 R -/Pg 15 0 R -/S /LI -/Type /StructElem ->> -endobj -183 0 obj -<< -/K [113 0 R 203 0 R] -/P 163 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -184 0 obj -<< -/K [114 0 R] -/P 203 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -185 0 obj -<< -/K [115 0 R] -/P 203 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -186 0 obj -<< -/K [116 0 R] -/P 203 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -187 0 obj -<< -/K [127 0 R 204 0 R] -/P 175 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -188 0 obj -<< -/K [128 0 R 205 0 R] -/P 206 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -189 0 obj -<< -/K [129 0 R 207 0 R] -/P 208 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -190 0 obj -<< -/K [130 0 R 209 0 R] -/P 210 0 R -/Pg 14 0 R -/S /LBody -/Type /StructElem ->> -endobj -191 0 obj -<< -/K [136 0 R] -/P 209 0 R -/Pg 15 0 R -/S /LI -/Type /StructElem ->> -endobj -192 0 obj -<< -/K [137 0 R] -/P 209 0 R -/Pg 15 0 R -/S /LI -/Type /StructElem ->> -endobj -193 0 obj -<< -/Length 10 -/BBox [0.0 0.0 100.0 100.0] -/Resources << ->> -/Subtype /Form -/Type /XObject ->> -stream
-% DSBlank -
-endstream -endobj -194 0 obj -<< -/Length 308 -/BBox [1.0 1.0 102.007 48.3506] -/Filter /FlateDecode -/Resources << -/ColorSpace << -/CS0 [/ICCBased 211 0 R] ->> -/Font << -/C0_0 212 0 R -/T1_0 11 0 R ->> -/ProcSet [/PDF /Text /ImageC] -/XObject << -/Im0 213 0 R ->> ->> -/Subtype /Form -/Type /XObject ->> -stream
-HdQ[K0~ϯ8osri>/x *խ뺉_o:.BHr4rڒ͏fkݕmQ6|m4Dz:Cz7@dlؽ5ӂk@,WV2\_*do5^L^rE+<}e~BB3z
m-8[vUWEWW%w78KSm+C8Ifm< -9Ƈ$tNPG\!? -endstream -endobj -195 0 obj -<< -/Ordering (Identity) -/Registry (Adobe) -/Supplement 0 ->> -endobj -196 0 obj -<< -/Ascent 750 -/AvgWidth 536 -/CapHeight 750 -/Descent -250 -/Flags 32 -/FontBBox [-519 -250 1263 750] -/FontFile2 197 0 R -/FontName /BCDEEE+Calibri-Bold -/FontWeight 700 -/ItalicAngle 0 -/MaxWidth 1781 -/StemV 53 -/Type /FontDescriptor -/XHeight 250 ->> -endobj -197 0 obj -<< -/Length 51744 -/Filter /FlateDecode -/Length1 133000 ->> -stream
-x\T>fx000/QPaD@M >KTQ4+er51-nyǽeIYi
Y37`kZ{} -Fg7>-,JGAu_N8K'_{6;
CpJ7Zb0s3\[T~Мf[0l'UbTW*Gߪe -FZ_gg}㩶Sz_k}.*=ro_xT^[Ҩ3YvlSVi^<"mg
Q8Oǹzf_l6(-Ex -c0^("%(wYĖhvagxiz -z `; :W%#ϰh,m)y_H@
":clxG^O)l,L{wo*={Dj=;Ez>X;-9$m4%BuՉZZZ:X[.17BxR)bL_8R7@%cPkPNE-G:RzhmP,}, -;]`3 -M-,z͠a)["=3hb8}S`x \1t(r&,c/&aJƳq1\ Ha~$ H@$ H@g?ge9S|xY93 H@$ H@#H@r&a#H@$ H@$ H@z924*A1֡CjGFZZxއh H@$ H@$ H@$ H@.'$ >$%cx?:5d$
@0ƀ΅0fB3,`d -rX)+cwr%&vzsdn2/6Lo,_a,_
ll}/~?lly>\-&xozӠQRx}_ ~yPV}uɯUiNӫ?5#lxԳKsyBV)]JVH;hCFJ^0
f -,gezLly]ĖkulgKl3BV"6BRJ*)H -ԒFJ:P؉S_$;9}s.~-~#jopZ+ -ʍ<cXƝr$|c1hlȦIds6.H10xܖ幤nVK} -Y-X[ԺՖnKJnW`QϤzS\`dEޤu%7%V:ij_:qG0>px]U:ܶe;[rR#
.\f+uS:y;Pi)e6Vޑ%̒+ߛx+SƱA,Fbgu$Ghz3F[tdGd.+>-1USm ~oIE/9`zGdJ_
ckpYLu,ƓZnIn]<-AKV.ֶy,I&},7&wƆS
}NdsKK - ]`! P!xN̆;PD;LC]z -Ro%ńË́RPB(&)G";EQ<p'^TQńZ4jh9Q*pB%aPN(#$hfB"DH 8B,!Mr܁@qԟqBcGQU[QOP?Ec\P_A}A} EP>چW PW_/#\B1EIaANFh$L%4 S u\8PKl꾄,B&!NH#X 6)AA"A 0#q/ҋډ-Կ@}
Կ蝨WW+-6p.\t2feUD2#eLyIRś:KEś95fgmgGňi5@m{6GX+oh"\fI͚6wJg3!{>3~^[秤Wp~*;Vs6m=o6{fb5-uTu~4nz=#:7B -)9U -_wp[d,,~, -\Љ{@ -Zvq</\r#;tn1ͰRX b,c:XzX7pup3mp;;0wݰWw-r)/G`3>a?,->Vm[
\'`r'.
OӸ{pemϟٓ^x^/W>k.Ͻ7p[6Op>.| г=ɏ|ޗK[8ug,1NS|nWvyչ_3_-+P<1~דxzo5GV?~GUPw/K<U#{Փ[t¿PdgãO.Euxٻ?a4WJ|w?
G[<O-G0wTˏqnSJ:_0D<:iUb -3-352JuJpZ`Y,1# YKVUbKa(flWD"f2c:~?+DK_b˲e -saJ=B$l-ce0"!ŕ9`b2h*yKǽY(ō>F%A0 -ݠcw^^VVW4f0W .G$K?*0DJ?x/ -/ -ڳs! kDR)d/Z[,˷ZCٖ_пX5 bR,<eXޑ",IX`щAAbIge)HSHAJQJ+(8H~UF&#;SNr\nBWqrN#(J7E҅!xU!Dݧh::5.>1#=.=d )/iBHKGOjuD(FmIVda5?u:L
hYզ%X,&. -,1aNbJJJ¢)'ŵXI1s]w/;y%s
syYEk&&BDKZПBE,bԪUF
+4is;J~Q-y+6ojJH1#$\#)XKQD.lZM@()3m%w 7
tL'#G )EFcF7΅J;cA0PzJQ7Z̏M5)
qIq8k2H?ҐdڱGȄ0mJK/ -KMϊgѧ#2ĭ1IdhǷޯ$w쵴<@k$v\%FjcwˎlG8\%6c;gԥFmVPpouPI+*Q%ˮz1?`̨V:$86|zŨ%,1ܮSkذ蔤K>qZKY/)c@\'[<N1jKknrq1:Nܓ>}BFY6cۘN'zPIggldv{Xaݮ@Hlg/KɁL2ɩC;.J7I:8DP`:s5<ܹ3 -ީooAY1W0$`]QUɷ)xƥmdž#Ϝcw|{m2V*ON2dC=2("e-Fk4QqG_urt5>+nCK2fsɸ՟Z!,d7L\kZI֫JH/S؛=,t8[oB,c،1rHc#v>ϯ#uS0&^140'EDNcJ73!|57QfV7u!qvFM-DPsg
4g [XgZXL^ܚ&s8 2mlZozA(,I[rm1i7JgTI,R\)]0禥'jb;bWDi[ѱ}^C+xGj jCJZcGTp:F!бDu8y03~yg*y`&6<[caq|{FA+OA6͡egGj[LL\0m[JVH)jbv -21:_
/7/h{!O/<CNz,|d4q!GRy&!;5%;^+t^+%f''g' mf-X.1c@j1-mp3 -ov/+Cd}RBChS`JDZdElӀ<aVadF-Y)FƖ,F?|SL<d3)qM#LyzxMbtv&K^fzlEт$i-N?}5?#%tkEm-% I-&,Xfd5݇j:]g֙YS3&raZU(x -0{HHp|ט?" j=4oK}7b\ϖ< -ݞjSVU;C-Uk?uTa
I2\)rOgt s-2|}{dqI%.^>܅Gg`H2*ZK[ׇ6Yȏd[|oʖS߅$y$]Ԋ9'6'j.lϮtQ ^ju6v?vUtS\}4Ó;}.2Mo3dw /dCԭG`apxT?I)5=.g7cjI&ӂm -o(oMZd*퓛F81_WuZ{Ujy˫}/J%y.o`;@a 63g"b cOhҁl!t_2!Vi},K6Izf(>U\w=?9`;БdiGnC%oUP寴tk;Od&2f'R2#>4u4?8ݼ`ܗ-Dy-FEO0:uο) .g w1N\xF(4|Vm[
4cL\+8V&Ae%ag ͬFsua
W1T,NEdž֞;ִi$4Bl+mٹ;1 Mק ٶsp}pw61:Pg<k_䣓ު\FȘ&Γ+~@ѯW;ZFD 7+E*!5,0w :>}QO=9DJGo`8[w$5c[
S0ͿK|0 2;8XZCcI0 Y,^siG_?҉!Tޱim?&Ҿ/܋u*f@3jE֜4J1H[,ƀݹ^qtN3XE㋤.0ICT/YCAz
*[/9Ų H.fx^?&TW+V$&*lOE~@=c)f&i35!5cYx%NSP\K{I*,z<u -]niN}ŁPLd$
z f,zY -2}\YM#46L]%ic]a6_Դ#I9?}H5volwo{I*yLƪn8$ςUGbz֮WNem)gЕ9ʴ/#WY|SX*Q -?/s -,a[X3}oI1Ol6G5*ĊjƊO7S؊, `*a |QT~Z)s F;>pyln֢d}:Z7A -ç;QB".Tz@G-53hخ3ֳ+bj܉Q=W5k)E#kUw
غMCVuM>ON|GLJ^hͫ=U d?8>Gy˴4=ړ%٢
>v:QCs)vJؓQf-O?*$xP6j(]*#zOb<UVD5ep5p\"wMgNu3zֿo1+Z"U:dȦë"Z.i:O(i3
:w'`4$^;k3 d7夕)e6G. -ߝAe -oU3 ӭ,0X*@NU|q.!]mU[]OS쉩l16
]IIVmwIv8"qb_|_ݘuM,e
{d`3\k<)z]N{Sr"Gaou< Xzv=S]+._Om
tdӖѬV%D6uxZ:_Ě._뎏FV'X1> 1Gҭ\ۏ߳:,*g|z4:|Ɂ9g`:HtFkj1Ml/l`Gl'i`>6mF ˱&B`]U&%;7nKd"2 I;rJNAD.A
#^zOSչ8h]Ou~`;cIx`YۚDJi3mF9[Z?}]1<>6YÃTL h#_*sjs9IO* -͉1IXf3 -tȢgђHrRKS"}Z
V:U''7N -KA(n]mE;A-װ&mBJS}j+ֹu( -/
{[w=)M
Mk#69+nO@g@cvF^gs[\V?VL9%X>
ZDV#N=t㦎,r*+c} IllP(ө\\ S-
"]eSV&Q ʊ:[M]aMSxAaH
`MNYwH6]Kt͍P)=Q/.WU0+FԼϯn>s'M~9v{%6$#|ۄpH{0'E8AZ!6d|eCJϑZ
U& -
;/wV 5-VjDR[>~SxxMV@10o#}?*=IC,lm
k_|D^ɷ7pJAZHY#'dwf_ n3ro"MnSf_t!zWoy$8MxH}IKn`B}U5N%P*U'Ȏߒ[|&5O[vdj0ˤѥWF6w'^>![ -.'{oLB %%B"Oέ_ -rXc؏|܇܋95`O#r1G'ۓ#qPï稃C[^HVhmFRdiy{oZ.̠擒J8NVQ3 mw@4 bQkmڶ.;=1U~9ҪUb%!h=;5jOx9[JbuzVK>5tǢ\5L|to Ŝ)匘k;z&tT*jYWíuV7me9W$0mF `D[diOUmʞY(v{R;D
hG!'SB`IN%*m! -EV;BnH -pZ>8}Wkǝoߴ165`Pv˩֩*Ak*z79l>V<ZA!cӌu䙶^Q\6 -ٔNnvR) Kћ&uD0[nkdu6F˘Q$(N}b$q:ȣApFJ#ϸEVD?A0qT?8XSpܦ|~CK&o8T$mn
3@L药pэ*w
5 3y`U]ϲ~=ՁMu{xWWÿewiթO9Fh`ovD-m-JԤ-x2 -J q|=|zm)RBz -aoT*
\sf6J6_o[v5b\bZLdVƎAEm\@:ܺHT)k?[o?Sj -]k~luZ*as, -Gk5c"B2Y* -JW'b -t6#j~=O%wA{)0e-ctTl;jk5`r_5܊ - -I~] -Φ395bNɍ.-`7;B%!O"""E۰nqq -֮.B"JǐaxCas|?~w;cX.~t\W3IiIP_ga67jl -6v"?Qh(,SS ?$ -g<gKőBSz\-~,%44PoĦ5NAߴ3۷>)Z34vR32;9d#]c+"@oXpƘ/a[gWC>g,Xy,T+0B=FDZ'*R)k#0:Yð[d7dо|xr -s e0?;* -̇=F\ѴypOysb[Ahk,@iy(U/ Г$]R -M<omʃv`Se,EE7` -SZÁTH$.%0M6,kB
VV"i,蕏5bY($P hLB&_Y2xy -5'!F -]ipw|F=v.csX'~Tz/?
w@>hojFP/M -n}-㾺YtW`jS -&L'UB<?$^\`QT/āeV X3FS(7vQd4>h -)+ٲ^tZ{qC~bJ(B\Fpy604y\KWp%vKMF'hvopq'ۙ4?WX4Bƚm-gt<v߫:j[{wb1?ÚG8PlF{yz*}/Ŷ3GWƚ>63ϹDT&P^F[m>A^XS06ִמ[|&%NhT)xLhJ9 <^{6bvF>PWqb ,3m|pfe?K<Kh+|Z_"/\yƂe"U)\$H{UO4LvE(TΤ-Y"3sJG9(9Nm5i(Q742RHZ,d4m Y`X8Urf~Y؛z]c|7.**#a7ml/D{lЇm~=MJZ_jmJ$j2\D!.pbυ-H/YbX9'NY8⯀/Ee~SA^ari41 <{,SO>HXަ㏆G-<O-AQtmQfkSC{H$ط`̗t Eb;Rq,QhI{X+eFIBa1d>٧{Kibr"{}YY>ݻ\!zriUQk$A4
JS^7 -&~$$#q6,6luy7 o70 -`kcjXJOU/Z?-į+t`W}dLXdփkC֊F}cdaok6MW=!5FmoA3W']}^]{t2ȍt hN9)G3xؘ_a2')s$?/g7y5/&Q-(k:w\ NU}"ktN6,R}/tvs&o1cROl범`R[q -N8D|>ĘܡOy}1A}zާ̴M8)\&S{&_6m~V<PRbv~^~5:b@˔WEwD1M)6yuWx]ifE5}/_-;45ͮ$#3*N2vn>Nm3 WR9WT"L9a+[vXY -)
ߟNQserQRRb]oEVvp23Qp%,l
#ѥ$e m~W_ -G} RamvIMj8jyc#l2**ա7dL"/;`_y2(¢3@5JǞf=/ksT -?]@3u,H.+G*ۯiV W
o.$l67_rPd(l=reIYҡq -ct%ЂΔYFNfG8u>iս69b>9x!*CN.C#>wR{8-P8ǩd_qMKᴎ^ -j_д~㔊QMڷ" r -Qt:h<>x/[_}ZbK8N0eS+cA\Dia'`b#N]5mcJ--Sh_3*RTIq'#l3~AX3O(HLO'.ы_!1%b)&Xԛuҹ#ő֑BCrOs[`Nɾ[Ƭ>S7lS-/sm8FnG'"`+O+IeHk|8Q_ -*3 -e]*T#B?/ ; -<bߟ
mhAjN+aغl쎘WErFZH$mY{:OCkHi;*TWz4VK9jgoFWE2V.̂'XF4Z1h_ſUr<Y9[yMnyR.M%ђĨQ-7hw\Q8>6xxNr{̃j~еFȺXvU_}OWÑVm. -p]$Bͣib6VhhNٞ+w,_V>:^n_,U-<G,yOFc||ڊnΪ}X{b -_{e1W!yO \+kN -QZ_8\Wʆ8Rՠ1'G6S>c6K<m72ŨCWgښV7wyXG l{IdܤFu Z+=)w®BoeǦn[m:*8a
(EoY`l^^nvUրpturdi_oٵ(,+LA։!K+2KKaMkQ([-?4.:"->-hbu_[%ߠyhZNgTwhq -`Î$q\156W~uó댝iOHu:5<uꌭG] ]֗]Չ_'}]>߽&eZF-䢎FevXe9c]KvTmajj]HxT0mW"89P+ -JQ?Xg2[NG@ո0.~E`PCdGiٱ,/02U(yyGid>}w>MB&i(f擋Ң$9aň'Bm
gҋ^t2T+lRm3<魀i -h~Ƶ^ -"s_eǶt\l'$\L$925bOTdv'l-$oN,J%&ʼnunk<~lwY{ȰeiGUv۱=f3ooSZ -%UIv`!Tog3e*3*qr^Fnn/V͍JSzw&i)7.+*b#?q&8czKt\r۬%loi6ezX߃ 5id@*_>Ťd]fA2ګ,W-sFpq@j7[ܷCMѢ#]7vK2\e넦.k~4Hoi`{e_۸le-9ɬ[eu/[ww
u;ɘ9|i_)ْgxt)1ym!j?'sjk{g؉;5Xiм8!bpwÇ/~Wߵ*Z~ -x#$ YںY,?[pvN 0^YlO!_hDQ^u J/g|Ixh(\fܤ
ulVdķN)I.79(AqLUᘶ`~a%C=|ZSuBGnw5qyf[Eh&T -5C-7HƟ0K]퉡궢TX:d_z}u\_q4*lY,^.eB
mB\|oXE;: sK+;.rеZ&9#7VyzvMttޖ5%ݱuiV!*/Zlsнkq)k9-dM,%lHρ%u 0wP4ks&d+y"oԱ<{ 3ćd̡LPNX[҇H/j -
ѮXsD?1Uwπrs,<:4r.}P&f -XnAX[˙s 43˯%onP~bCZhG`΄&Z6tzm-oCyǿ=-w<3:_Dm&yy<xr}A[ -fe#gKg4D+3Xͼ -?y@ -є+ҜhkE8!1x20]|96Y;&U/p{ըn]'"RӯOrI1T(2
m+w~ducj]~+ -!+ϧF[DsfȖջ捻}_thD/* -ʌk+S3
Ixwd%t ҖjƠd(Giuƛ{*n/hK&^dj͙)StPՉ9 giWUh>l?։jpa7=Y6`7N|y^ -(NG@ޜTM!J*nC=>n , -K2f-{,M!N4NcY3,Xcdzj*F5>%]'; -8DE@ -T.(>9JP,F>C$Rsi2;KD"#5om] ,@lnM[> WRbv?l)9nYbn@_w;@6ᮦC.[XΡwS{h=ot%=hWۢA?oC%Zt}v8Fh%}c1HMs|>n#[ns-3xzI/ƽ\j\z:6]{`pw>QWd]v֮(GkYCSOr;a&x"?/H/9IrW8I$_~Y;7$`Q)$7X(k -sPU%OۗIQ9[UuuUwW/Ll3 3# "kHr㻆h\eP4h>͋7k_јD<{Nu0H;hW>;o;մ`4z߄yFڳW".,1#}.""N?m(脗ymdu乑^}VW;ώ߾d/TS{n/\y˲xowwỶd"rܙX
ώWu.ؑtT{f:;=)Xp4:Zj#5Do=9dq,O->f9Kn*=7?ugo4.rG'}{yev
{7c[\5eCuVfh/C\$Qz!_߄!)`崇HJ ZjDnbk?A=WMbe[]l%`UHb{jѫgٻ:ky^8}+栵ֶ/ -Xzh)6^vvAmyߑ_Fw}>VgS^mnKdm!-jUrx{+wvmZ\mHgN/aMxa \:^65hdwM+v^7Ujejfmd@JD?Ԉ+dJhag5ʙۆ;ΫH*3OT -{Ҋn^tHwb9/Rw -\1\0q1
dFNl`o`W%.KN&%et11'4zay. 2
̤?{pRRM8kkmV39_]t$kԪIEzg#c{>Y;rG -[iduF*a9m-E`.cRMȍ߂-2%s
r
4g>ϞL<ţ7fsU_u%B>B,F+O].<>%q9fHObI%֚#v8┰(jR -f"P[X7pB6#!<눥rDSOW1Uu@3祉OͺWV+P5E6}kco{zP!ҙt4sw;*Buӽ?{҄=7{V{PZb@ -b)=>( -!Ϧ|ɡɔASpWb}&6J -,-Xpt"$٬k"]˘lQߠ~#3R28~3?p-wN"JQYSPQ> R@-j -T @)G3<%}D~.p^NmLf@Y9"(\O;Xm5#wS eeRḄSzS3&Ã ƃ6
J6a5$l9Ou^:0s ̈́\b1[uVVH}םź>X|{Pkn75cA^yOse^L_yTjSN4q%;C^!ڕ-f>؟)m-$ŴuOh6r:{ސJ!;]`(MsV -t8)VsuNR+ `%xig8f4)=Rъ[ADzJSk5Gxf*/5<B-<2}]Oڿqn?#$>c7[:Z1&?j<K)'?|yrU .t:b+P̙v\34~mjkfax,jc)#7Y#X -IԚ<b"r7}HSD('C6>+qxoGA3s S`bYs p_bƾ}vYXp|{>1h=r{fiag+EΈ.tW|ĪKb*-Je3CW_If%EM!qCDSwq~R8sĊW^x_9bXJ8n`qz5N>+ȵz cR: {cD'aDɣ -~鴶<$kCͪ8wS7|8H>rޢM}N+/=h4ZWت۵,[zks2%=\>/[3f֖Gꌕ8Q^I~h`Ra~]kz10Q5}PE^;hV!y@S -pۃnUjv&cMc;ϋPNTQQ◽yF]m^cF[2sf+5ƟsE_60n5j@-^1p& -H{1bj[r$'CzQ#/2 G_(q/~u|Vno)֍~@կuytgz}ݼʚ{RZ艻AcV{Q=_ܚG|)=調s>Jii$ -/LVqn520Zg>D<v50֫5UUM`PA1w"g'S`=]
Fr'wҧnD
8K8Fb}|͕W0#ƫ?|2oI2YFQ}3`盜h:zV=!(˛70+,)3/;\Q(L3V?LIDoҞ;vGz[[w87$JY˛Ƌ]0za`~tn<o5#AݍZBzuʁZ,JK5@[J^7F*ҒER*G-o9V|5kp1YK,S]Khb+HeFKqbq9q5qy_kWlnpupvp63ͫg -}WovyrshӖ[zٿ3wecbq1lVw)CjwR.۹E^&ϥ%5˝oxRB>Q&hU5gy<s8<t#_ -{l>?~=
kOr -Y
#J(o$bkx4.Dnd -Ы\Р7᯽\R
|z
xB]]mJT&,r`w1u jDl x85b'&,.IF$EN<[^AW|Q7gUYO$cB҂TȲ[VT#qyqמ"/,eūgVf^+ GF7>' -O&u֬f>UlG?yp`o|/<Oc^pc
I$"]@FtDmς̉cy -OTQM/Si+ϪߗkD?B -$
MgݾyՃ,]K+e܍n7T_%|noY\B#2,aE ~J ,Z6O -*J5TXr<o1%\Y();ė[ yJy4+[`8Tze5"JWZU*7\kT*C`G~Py 1A -@;Ws"y:um\{=ռI\@Fz3xl'Դp{"`᛬eR1bDW&ыlYPfUs').e{I5Iޜ.xh!YcK6$?@oyzH AFâOÑt!2I1& -ch4U#FfaOL*<0?X)D8PĻѝp;HA_ q;|~Š1t)D9lbb΅y"IN){Dfkf&bТ)HX.ZQ`PE]c${h~FKi#hńqAǣ5{mߊa4F
ccVqx1Ā_"6/jM/K 3="ڪ`6܊Ϗ{?G33,#Uj]VO<VoW -XZqm4 -ŶA^h|e0zSc<&\[O2xˁRlsJ$(jO9)S*ۡzvѬ2xѵnč2.dc18h'D|/k#s/pH3e93śX -a#b^2akGʼn'mʀ{LƇ1<$?4ےߒ^Lfx+"Bx_\T-?)hMt1OEfR\((f͜&vOxFm3J -:w{ޤ|v'p3*5euݴc+/2kE@RA^QG4#4̄PcєggY{|ᨫk5X5{125;w3[Źlɪv^e65bxS{aHՇE,fJ;xb֭bХCtZ{052|Wf6DBYf:W
4KQUY>Gvp^CU]HCsHq'Ѹ#ʃͣqn59P|{wsޚYgkXӟhPFg̕k -p`QԻQ*ϵ}&`34ӸezV5ow]鲀#3]v|d7N$W rw-:ɻ)dAGi7pm/s%)thtY)K`2HJ-&B8˙8ꠍ>{v/C#"A qN$w&!IRhle4F:o50Dq0-%ִړVjᬻopqJPݕŪWۿt\?(9#1;Nc\,ML(o4.Cϯ-UEx(, -B"]C]]kP9M?6#hMϼ~5YO*f g`t$ol\nw4+frIS -BB7i-S#tpziZVk']sI)`>c
./ؓ_iew:FWUeB{v.4kHFb:;F蔂)5Чg'B˪s.,xߊLQ14M35v*s:%]}EfWJ#8f$Pι w%N -B<C:::φΦIt
l~
IVh?-Ho/0jdBM{U+}2Y:,GJ) Ȇй^CYnUnݲ9sKBI]|Ggl%{UΜ_Rk2/4D)(a30:L3ݬݶfݶmftڌ|7ʲ&&Ιy3y~};qjnd(}i)f%O>1wIg?K2
.V&.yԣl$L,c"a@KM0Y3v攱?wQٜ>aTq?Np8qԤcGJTϞ0-wȷS<Ӧ7O&CHv%~̈́_6DQw.arˈrTyT鈊ZȢMDwsf_u6*5o&ƜM""ӎIBqEbVa0ȨyBcrbSN LI,cbiYN3Q9tsX9q'O˄'e|{1IL:&.LVH:kY;kgTs3eS?arQYst2hk#91,37R,ߓ$??k+g]r>-Toꗖ\
#ig]sHޜ?z9;g\.3yHd3syN2ĈDܺc7rgY![v^y^<E=zS/>Wl90֍6u/y-d璝[liһn_}Y_Zk+[|DQb(S2dZIjI/xtBeƲ}R>|uV8Vt\rcCn⁊*vVx⭊qחI* *| -|e{ʷ*߭<XY7c6jYr#o͋K\PnG}tjHŻWO^]5A*!5-\{M%.q˿̋K\%.qK\24؞AUKu$;suĵqK\%.qK\q˿p5KqGG7k@l 'V_j\qBR[wR[mP%Hm-wWR[ljۤ^-[Om)A'XS[9^{Z9R[)Jm;|VrF=R[#R[3R[-0Km-7F/ef 3Ε&pFNCqJpfm3k3Ygf86Ùάpfm3k3Yڦxf8?̉\:gҸLsn8O5XZOqR0y "WsAs7݉&.*(6tsM%rtGZ5?>iµbf7i^LCkEk>D[/]^-Fl=F)Ǹ9=[~fȨ0G'y*]16 -W= N.JkE:1u9zQ?|Vqe(Pow;~pc{RHڱjBCU6(_7k$9^KƩF#$)A%M}bXiV.+_w/YHݕR
[ff
ɄZ)sUuXk!Xy0c8z%|*2jqGFzz=)ќNQ
Mzx2 程ƚd?
FZDo=/X6Dd9BP7/8`OB?ONNn5rσtTgE֟8C'NbH\l=vH&̲.O;5X2U8$ʼҼ-Yᣖ R!N-Ir.&C54Hl0jcY+61]#h湟P#Q{DfȄ"іW˵!sdY痲"v)^f0-.o괋V7YWE퐣<<b! -?F#>$T%`'bN$Oord@qrP>Y䩛2C9Ř<v$qn_Y;63;D#rv zRkALO/B݈^ZG'}HVzޙW]Oꓓmn0=dV(^)2Q2C1w%IU7z|:dfu2|5
gBҰueiIT#`<*\;vΐ;ٚt:@?LGCucqݱxS$?vYySD$`= -7^)t^F,}GO9S\^~XDS nn;%:o/5t; M<=##gSC,NZ}ґW\ݒU7W{蓂{߲]{(k'dN~b#Ofr!~LVs2-.餪2JRx"6ȼK'j ϼ=itc?G4OWNN+1gGG1N|RK}fωjЫVXUI~|O@ R/Xt?Yl1^NR:R1U3+h.FcE4?FCXqLG)ދЯ5.ia}tk܅t+ѕTrUZG -I{ l"\Ş! -3YZq1P -莲e+|i6>b??"vIfSf3]%XWFϦ>3kygXdWR!1"B^eS5QrK0[NOb\K=-Y%̈E*zCP%䢽?K"ؕwfKiU*_C+=+"R,KwheɣˬQc ۏ69"ϯ"}<.l ,4閴Lq}!1M=]S -+L1廪7]bW=CtMrH4[fȯdvXѥZ_}kA<n#J;bA_}
K:]1Tnt-.誫r9.at~ -ݞ`J -v
BK]-Vܞ&U!K[4Õ^' -QA!Zhx|
b-u~#$b`
p |b/_X审F!WcRDAm);| QNm#AF,]D -A]UJNIF5!xߑzG(\L7@jݎ#Ȗ$Fc2&!`(v7(Z@Hrc -Ɋ|@>yP(CK%rH4JHpHp8 -X -墯 -K@b-{A>N<C쬦=@&hX&UfP"8Z2nRiy&DdR䷋⯇CZJX'
A)Ka*HݬTFxlH#!Mh/qQN(e,H~o>Kq
Cʰh2E -֒35Gd`F"Ϗ@oˊ+KbAXRZ ך+N.CzXQP_\ĊJ8O.&KJeebqXEKŸg{"PRU`-#ʖ[Ks^\PXP^,yP-d(.KVY}.brkQ9"֕eمtڗS\RYZ$\/.̵bpe/.TNavd17{y+ZJ2ɺ|+~S^P\D).*/E7^G.((&٥eb'pbY8$"XB+ʬQ[rمUF.]b4h6р?xE/A#GWC?&щT Q -M4s^ -_s|~c/rc"dכLd`;ddE֫SN!Oѣ^)7t?T<MC!.梔ZPnGh~íp/l7 -GF{n>ďq|?Kb~51~#[
=eokn~%N#w|Bw)_+& KӄB"KPDX(B@V)\M&s/w _)z;Ê}7·O#> -$F06&\ -l6kf?9lzAl -V \
l~
l~l6C`5l`3l*`6Jn61l͗~XܩP`c6`6mz`s;5y<lؼ -`6A`ln66 -b", -l~l6ہS`*lo+v>GN|!!|)$`lV -S3"`ج6F`s5l6W`)9&TJBaV8]pf!o3R`Sl&l -5?)QLW+rxfl -oE·ʵ_S6G -N+VJ{jh*9JZիqZփ#owkС`[tW3J{Dk_WW_wWWlpoy̨-Ŵ - -˻rb}jV8,&Z'0pd n`jusw?ݫSp:@1
Nٸ<L5gj-.y1S..xݥQ B;Y-pje¬[z4AKP5n&4t蕽^\P.j*xj3JaP! -NM)ԃZӭT*
(=Supݵ^A൪m۶RY-IHVbYtfn75ͽZ
?Tb![U$2-R p0,.j["L?ѡUZM|,'N`,;5|=T[DO㵆9kuQNQtI']ը5rZc⳹!-FYZ#!E?:5R L&ՠ?nX$LDZzNm8J̄nAvEFhPkAF#K젥&Ӄb@[8'HS:FX%pR{$DO #H4#O#"et-lY'hEgl4@'Cj'n^كL[! -0eNH?iy1R]aKޘ>:N@]>XQZaVSn!pH_IuIN8e^4֪֚ -%e^X)4eRՃ{\fHf36?B!V9h2I{,lQ-QўYf6yN
EgPʌ3dіGz#7Bna쭛 iВElPX~pa)#!u{.}A'{DYYȩz!鄴҉([wIrun~G::G/[ZN4K/ˏ~"OܥnRU5;1l1[enJZ4 3=M3o6hxxZtSHF:kXz7lD2'&HwaP`Pm%(Q::hAI2 -1i86oqy,5PT;IL4f7 Q"f㳲<vم-=4R,ccdf28#ͦQrFqrK=htA/1]-20ߴf5P``F[ؠ
M=JG
8;Yj[t+]{;`
==i⍭olݷiFZ
z`$ajaIab;:۩o=
Z;Ji֡J!7~Wwy葑i1-(͒VPL951JrІæt6Bs݀twնt7[ qesh)% -\ٍ -Kk~L(큁C4ehLLyڗVsA_/n22A{!<٠< -TY -{0O%15lݭBϙLpd<j!1iyt!>lΤ^6MؓI0g*Teq6fNdƄFUlA!;Тg3)xӐ댼.qx`7<n"{*#E"!/}p
{B)Eu'ŝrAy4 Ufs+Ҫl3($tIbPNȤF2)h"HTR/X
!7iIFKZ -%]4Z΄TetlkRZwV4YJzscV;t#b-4T芄HM-FVLlw'o-퇚ִ$AI њڤ&O-4pz5R;%+I;;`Jud1)I|{ -hG+Z&$AhMY:&ZƓ#~u/meF:/d[&nJg9ג17sUft-?XfȼaryqIit٬;ћYEkYt[2ζLaѣ2(KV,¼DzEswⷞvi߱y3گi}ãkZmybےok.jݕ7.x>}OoznYW{c/Vl_~v_Gi4~};{+Růڳ{/2/=XSfrSu杧zޣ~8{cxCKLދ~zFzuϘoU>z켥?}?vV`ʜ}в<7ޓS_m~<c|WOymW|~pxQY& -e4lѢU -aHLqܛr{_s=7ެny(t/;jr'O?>4v,xuuҴC)ƪܚ}Noc~Jٷ־忿'K'~;'eޑ*mWOkjʗwf<է|;噳_yiɳ]n=7]w)'/,Xe.>6_~ی%2y'[ɼ$ka]mE>>V$S7o&\niS(cĔ?o%2r,jx,"2~R%kX
4Z2,iiV͢]KgON0vNm֦lkvܖ=kM?;eM7?<߱qϸ>{#ǔJ?xޯk{eIWޒsc|1ι|Ug)/,wlxHo^%~1/]恛>8pڮ9g'?rfU~l_W&~~=B=.a횹U~hW:xߙ8>]_gC5}=RWxg\tWo|3fVn&&r2jSrgՕl~:X7_}gGoSEYb?iXIW5zfl%-}#2j>kιUsfI9+sY̹isCJ`Qꭶߞq֎^Wz8b -"]b$0ߵm%c%@{L \aJL r-B#1|4*x>JgMs&[)]}?G\+8nnd'YK7Pɾ˒[CY2HgedeYoIɖ. -%=Cʽyuyrs^tkQ>oʴNcPj -np)y]?6*@1*_ɬR3ѦgŅ?K&ZʶT02c*Y.JtQ k -Cݭ44"u:O 3k!-PИm"S)vq+Ght峍5\Z Btȣ
bǐq0±h2n+ي["p%fBj5́C/bs݄NwO:~~]OSGvjݘ'zİsQ>wfp
o9ui.n>~n^dˢ0 uYTt*>kTdml5
|{W\X<u@{nϤ_ji>Wɡ=Q<+ {XgւJ-9G]QEo*韗VOmHS\j>J -杝ֿIhxBR"ֹk/`o4M*#`pH3cIr/IIWi 塌7XWijMw5rNi0Θ|F=^ĬF
_0lx
i"Ș -Nǡ,#AY<czJl xS"eW AIt+T3bB|ښdSoII#_w=a0`āWBn!N]D(@f+|c}Hg~37B &>@O=ta.G%7#"?O=W*;)gR~4U -iY͚/zsܻ+GżxQ9*bzChz2sUۣF]qn('ъӉuS5=w1*pBLIu^?˔(VAIm<#yK=Cs
QA1.^E:m ß%o(8<Yo~pA -ԃ+mGd=CfRUv?!TtzV\
3&Utm/˃h+^9E9rXErIzp;ܿmz܆SV#g6&RxnX>ДДeB܊Ox-ZrH81\+ӓI'KYv*n#U+*R.J|7O9&tuƲCvqQ
-~G8aD`rG=DL)yP9vGl (X( /?
|8ohPA6P -ٽnan4ә'0@Q
u4&[|L6kfv,=x?JFs+F*][3C:("VحW0vU/,4`.`ʲc1j~i^~K V۳iYR*^٠w?n(:n$v?Ӽ^60a:2M|jd*_?9zHRF?6[ԉx -mg - O/O'?M$gKJ -fCҙS2UCZm>OaMJzN4k\u,(Saih6LriKgjqW Ejh{ހTnuLt5V_XZ0XSUbJn<1%1OK#>}2l%qUS։F%#S"#d&f
9q(yGtOU|ma) u&V8;twQ_2%-LĪi8xǛ=D┲6[c6^cV7V8Y"cf/:LXS_R -zJEckY~iTYr>&}lxz5VG)3L]pX@~~nPg4/ZЏ76=ku21\:߆n+>oABgOTl hd9͡3R hIv_m+!:₹FjwEkPmϯhG/ _8J - -8B0LBa?=Cg'6S@d\?Е -endstream -endobj -198 0 obj -<< -/Length 63774 -/Filter /FlateDecode -/Length1 158956 ->> -stream
-x}|TU{LʐI%d3ɐ -UڗHBԁP_Gibk֢;hoORIOs͇$_ -TP5h9ZszBM
hJݫ>}WZFVN^AQI?Lԍ0LYWTKh!&]$./D%< qX/1x^E^WtI6Ma&j -7E"MQ&-(,ɐւL6.iS_2?x3pemg͍4j>;؍ߙ)D+0[L7U/mWF#֧7x+eY:;Bgǿzvx֮YΩ}Ƭڙ3jOZ>erY[2qBqcǜV4zy=9Nzʐكݫg4gR|=nM&gϨ2#Giw%m~\c -#>҃GDz8s(R]CihB"ʊ}ݥ.^C1)HؐHME WARm/*\EM92"ϝWѫ'5GDBFB7Ä!C5d~=?WHM-5|g[\dBWsϝMizEfTrϯWP^t?&Ý$ӝ_t ~sjy==AOX'R4!_iBC/5UMGX㴋;,k2gIʜFsx;U>$tW};wU+k<o%>'SkAs,WV`4Yxw.`DQ$X秊`)VA엫";(rvP]?~P2 -|3 -G5ϑbJݾRvh.h(-VOsi*ć;w(2x\FR>ܡ.p -C+Ճ7RfhHGji*ot9omSC}v5*ovv~jr.
U>Α*KO΅OC5K>$ƻ|wk3'&xEEe>iWIIgsOV -k0ӡa%G=JeeIOK,aλ?.ퟞNճJQ%yث8܅n*[Z75{<M*j`_4GU7':Op,mR(*EU6q2;_@Z^EnisWv<W^ LȚ& a5;<DFpAϪ|Z4ٹ!U-&h|V5rt`9v - -Gh=$X)O% -=r#kd"2,"oʨ1fiF:<sR:/H(T`v5J硫21YMqMp/);mdAߖ>o7. ;[C02X.Zȣ08ZZp/Mmc8;O?rFҦ#əzZwSv<_V!6Zz|+3֛@*ݣF%pѱ}R]ե2 -]oe
mkڨ~J`ffdd.ȳk+S'jrC(<BжǪ囎Ŏ -+ -28ms3U}!xPqU(:+`<g|qUlKpS)u-x1ͨq
'Ͼ)mn>n$|tW+y1n.?"3܄#oSFդ -e<JRQ2U80<]\nI?1erը=W!~L1rbBOS`U9di_+Q~,PcCF80==IԞ -K^[ස&
_? -~0!?PT5p+:`٨IP$|Xl -4id140(r9o80paL2
SpLL2
3ZNfԇ+bz1dd:Swn\uS:ٕ͔U2S -Sg&Sr y,SR y#S";yvhvv`1Eq^$SS8Y,LaNA@bIg)DVF8_3p3S c i"N}ӷ
f˴bcLsgSpcvsއL}0.é -t<f$L5W^azC^bz/0=ӳ|I'v1#cL;GfCL2=#s~1m
$ɠf&?ӽL[a̴@"kqr'w;mL2t3MLnnZgejr
w'K9o=%L3c#/TL3Ǵ6P ZH:iu a ^Pc XHZɴ/rg1-$Tr%L150-dZUs3@9i6L\-L.^T͑ULә**1MAsϦ0MAqեܐt$n˵0MdTery
į !ELQ4@y@*P^ -
g00
.N@L)!43ebFb|2 -O%2%031r.`gg4S&SGFrd;ÙL04s:$=)q0y +~`~O --2"_ysB?SY'm'l3PϨq1Ӻ -r`p'$b∙u9/ùFOwg;Wl9Fٛ++7F++VbӊVxb"{yڴ̻ԻػdbZ.557,llD~ 4j7zM^_X7]QhiݹѥY^o睿iw93Y3fzgdW{k6U{{++Ӳ˽S7{dy'o*f#~Rv;1;aSw\XXdyOT=;jHBoO]u 9DnDZDcCNv&k=;qļN:]INz)I$Yv)ӱGBJ'91%3`ՙ(N t[M$8uA3 J2Z4o?/O2~M5qq; xK%Fzͺu[O7x*5!4sꂆ>ϩ;=QKv-:ZDGFkht>&?Z;}Fۜ6M~D
9nQK -#7'r\+DSx8qr˙cꂅ7RA&3W~/Xj0Ҕai`soO7Gw7yjR88hV+r,`X,
B`p&0 -`0( - ` 0 - -Ol:PٳΥ5xjto.8Bbz]z|]Jz@tŵt+
5t݈5#.FC܇Iнt1U55/399XncŇfk%.iSbQpejDr-d-+#{oy|\ff5RR= rVՍnPF#}JYa({nDuXU[IO۩Vޱ[!z -yvy_0|?#-8$=Yz ^4>Fez^
>O
Ǐ`ƿ?3s2%_ZxJ">ppRcm?Sk=xs7dƩ@NLch,]_{l$q} ^Gpȅ;D4aQ-:s|pŬWdٿ{1fpV^o'>ٶE
19'.ǣYա3_|1d[*bRcw,0wZom@<L?ÝA3|;+0MeaJwΤ~.09)tC{XtKnZM++H{kƦ$&Xg{syStկj.IN:%uԤ8)2hDuϟr`mBgYGx^/-r֛~.ƀd?o2Oxx+E"[cؙ!^a\w5P4ϬɊ<8+ -?9è 2D6Y|[8LVC
x9ILZ.FԴ1K&#acVl0Mp豚"L#bVg79ݜXG|#zp{d`_kCKͭW7Zm̗%.8_qW\pϖB]R,ָNa-ִN^ Ԭ]1Ji2x[shE5fԬ% c4JNJbF -
﮸Hݑ ?f1a"'#iE9's$;-?0⤈(0$6lh7VM,Y-g):8KfI-"b[ZaG`ѳ9k\M^ÓV3zy.VpKu_'+1Zg"zl<1KCUƲڕvF1r/'w8(F.3yiieʞlr -U3_1Gk#c#bL^=L*k$GƥY3zgmzd槤i] -9go|s:xoG3L::ZEܞ D'Y<s};N,2x9 |Nr'voMXw -_~hraIGTFoDFȵmBj15:>UDI -DFF7spb a!_,iwDj$9Plcjr+b=8H8+ںZzE-nYڒYEA$Y)cCY C! ɐ=&ؖ-p3<f>3y^yHbcUj/@2{s99VxA=kP:p/\Zx%k6w`R%fUjPX5(V
-++q1Ҍ*YIt1~U6ҔY[8aOg*8A
Z239\'zTy)`ZA6j'uutZ_p4q99998}zC롇CZ==Pҋ'THa7?1_%i*!b -ѳY1H:ZN{Pfb4Xb }80NPj@]{us0e~q\8b4p受?]] qi_^*jNڰf;z7kF.ݢnA{a/#pI^"`1}9N9:00_r:E SJ6H{6V~e̹ᰵ5!_b]c+L[;m -x`o
5X|J8; -=GB6ɀ)lxC,i`RZӾeO פ;]{]7
5 -&}#tOvc&a#2ހgHcK;gF-TEg8lXK$X9;/=bN
N
NujvՅT [LAć#Hw;`[7t?nA/<Q}a7bN/vjYć08r -1sG91'Z!t+l`ikkk^QP*5!P˲_,\-gƎ)$˦Ni]/
d4X> /MN.Ν-v ){ضe[=25>*AƐhnY+?8BL(斷gWku
C<2 {u]孙lۊݐᚁ9Xg!;s`t!B@F'#H$K/uFK0j&({ޗR !+[0 -c -M¦Aa{ ?lEƄ1N8@SSTEH0/Թ+-rKUx{VN^q[GSo|깻o?uTg -XX -<t8̡XHw.8{lbHMʗ9uА"HA~XA36(3"ϐŵ,.%BQF#FL,8RlnEFx^gr -Z^alV<qpDDQ -zHZ87њīn?MR@8j9ViVtKqY.! -hEj5.Z6nu5,)hqqgBFՑ_]A|+\"r3Ml~l*h]DG0ޠv\!a~]D|",s7MfJZJMiJ>f.U2..⏿tWĪ)?jOtc4_|~+Pfp|&0jlMVfr@8aq*~^W<3րU98E{GW(QU0Q^xCLq#> -:FpK.Yt -Lf,]Y?{pFL$lso6RV,)[?f2RsmϞfz^c^MLOp'Z:VʞS5U\ -vP\3G&AK{IFs$ϸ"1wQ)i@Ϥv[%ȐGR=A$&g^xƮC!x`pc(ک)0%e1 -&@]PU菫؈w.C鮅Jl& S\`+YI\z|`lb{>o9_~ߩuzG>mjjŐ~_A
a#J:R HTCFc8\?ch75&0Z)l
[:y<tΥ7Y[`QoGn~lf͊eH.0wX~ُWKcl<|1Uh(JdfT #վ\^t,?g@SoV
gf,3hee4^.6ߗzX!>fh"j3h.@pGjKcX# @G4"
04o_z&kXv@OۦVqutJMciC.!HcX;%z -aϰ Gq~G9DŽlQxDg˩іZTQy6[Ѧ"u&gcoox-h=ecgU;fj\I!T'~8w\rJFXѥjnx&l;jkM,K.dLkjB
zIBKjln4+T2R
n -'#p:s(ꠃÓg3h'^}P>J( -
~T9Wo%VZGYlm'5'4. [.Cu
J0WX22o f͒ 5* -§`NtU(zIkQ&JoCU*~̑?laH<C -R]bрa1CX -9Y6k?Z6@X5nn_A ko7
<m;Ɏ m -ǫ;;?ATu&gLX"se=kXֆEUAFߨhVVK~ඦֶT -=[{j2WN :q<-~RZJc}ܬz'KoS1mMηÉ# -dv^)ܰJQJs$uZ%ee -eg6n\<sq<ƂPpmHhi& -CDPP_TzAn!ӐI ŅkbBa -0ƩSAt;S>s!'QSg:t^)߁t"=~Û:^,`&^ei;x"b^&<=HZ<'oau}w( $mA24FyM:[Ǒʃ˭ղRmɞƐl\ֶNý*x!#kV-_:C3Au&%_}*8% -Ƴ:`2t`^_^^Xu+nǦ1h
B(GwrqbO=P ie}ɑ$QRh!-ɖڳѳˆ! -+ -MD2*T"z^W$-@/P+j*eG(p|DF!+egK;Lt+J/W13pz<ףM$cW@ӪE.JoH1pC(>_VU/t/vb(6BBύ@w`ȶeG^Kl4c#cDTa0
pr7g~`UٚlJTn/(H!3 uLj<#)a -([ -Fܣ1 -sżnD᪺d]0W/+)럭ST/22?.>B\L - -h~{EJ-We7@5ЊB3ЦϮVJ65SKFsWkZ -n(`tX-1NS/mܤ>Ar/"o-o_BֲVwm|r3#c''Je6M<yW`|z^)w,GG
ߒrp4"o;FR+NxXM44 -2T>ޔe;g{z[Ml+3{$g8p}qWe\}9H=PsX6(QxCz{fzXhp+ww
jJk&YZ4_}?LF6"؎ܶgj `{?X>-װZa1L^ -|^DV4;8=g(W@.y9YXڴ*k@܊r+&/նcT+`Q&v2茸7 -Cwu#KJWOJF[T -'QOј'>"ȏk%!l y=BudlAXy-˾gO:XIT -S@|M -+)t:1%ŊLLmUd*ڛ2}eYǍÃ_yYWω}O֫NJ7#LLlNs{!uO>rѣ۪,y6PBH,Ls$XuFvcc58~|ȲQ4-U̼OQ>ʾJ:-F)W*tt>TrŃ -K|p9B) DԸ1G DCE
XhxWDc1=)|"4swMul=o,d~u7@ޟ"pλ뉪sjֶ<m5[®C.Xޞ}KØ2PP
;#]Nڰ;8qִJX~sMZ|Ǎ^tq'7b -G-|M,Y56@4Cާas"hߔԯ^R(֯}5+IװmJ7w^oy -0⽟,? c9I=U#B*x7H1/YA -q]H7ӖzDϗMD{?D!yO-zG!ĴVЭI1d~`*^sW[^hX.4+*ʾ9ҳ\EhptjoU -*?k)Z:o䈲@ԊM7{<A=thQƶz:T>m=+ -*݁8돛1f.6'Kh(2y,.L+fRu]F1O/J -~(3 -@VAew)Mx8GxTGx*ܦ«m-@ϛUjI#FjXY6 -{5t` -xW{`ԏ;ncd]gOkLȠnFP}|4 -K%+#K\L qWm495XLi\wh5gG] HU*ҒZg4f jJM ^04fKSrfw%aDm^ղjQPg($0Yr9Q 5Te Q0^If~٫~øٸ۸`$6?Ƙybm6`/30#mI=)`90F1dl -5.C)c^
k+t
*R'OI_.ƉֈCJڟ*ʞ;y}\4~} -+ZSݧ$T6ԡW
%uW]iă*rQI%^"R(À;}CSH(;']0jcduǶoy6)Ո2((uD<>4k}@EEXI d@3nc2_boB11ⱡ-Xq>+!P!3\ Kti iXmfsWW51hŠݸbh2FJOx'hr>Ao#KU9h:{ЇZLC9j8*!m4*} -mެP&0y6Q>j,:Ia]eUsWm7=xlzԮ6xo' -Hn&n7J%̶^)y'Hb2>;ek*ٲ6\6QAL*ڨLW۵& -p\.>v<1PNPkq6.8[`g$1`>IB0@[G%|EAt.~#!?Wa7hQQ8N-7Qm=^N]OJYCAi}?%Œn-);#FQ7,8K5"TExbh|Yv:qS9eiSR|e'h3G4F[>U 4 -,B㠉,b-3Fns>]@A3D.ƞEw2X?un Qe!rwYO3x.Su&yT4|%IX9Á3S3ȐZ\wG94PI(X-\RlkHZ((gd?5㋏s#[uhd0UL}FOB*U -jtHI:2L֙Ɛl==ٻ1 -ґn[kj3S,}"
jYOETc,l -Wf<ֳ<gXLs)E؊vp3^`9V4cN|,xԦ\P@>>j -`;vL:=gQ75ZzOHe,r#o|
*G,`4`69Td)f|w$&,j_R.Z- ;#cgn*g -¨x5v[k_yg٩VN%Q<C)e$L5 -WnU0À#X;i2@߿e4e2US~XʞxĿ:c?&[Z2>4e -'zHbNdX` _}*Hڤ>M/?KןxxhKH=O /(S/LS1KzWA0ysW`:!]<{$jQU|b@邹L ZLJ9A_vx#'-\1`?;bpy!Y<N -'zKFSE˞8G!.f=Li04J`5F -'
fP& -vHL5i.l˰㟁 -Xy-jE`O8j@WR˾V!mÀosVš]WA1ͼ߁!j2( -M6wB|fy3aׂ;3Ywԡ o(VJ6s럊-m@|\j4)Nr$ - -hJf0՞P5. -8 -;f+Y
N) -@+u%7AkZ61wfcIFթ7F-u 7dg"zI [Oc!_b64#Y -K/Ko~'ʵcg9l֜G#QUZ_a#@sßo{FN33gT.SI3vvQRR2qd| ӘM -fScHE&lFn -RRi8]8I~,#F6*ĭvX nFL^ZZ@Ӛ&дZ -i'%?]mA\J۴ۖP,sf$[vۇ'3sf9sYޡkg{bJZoݩS;Raw3Z\ҩfō6FCW|CPlx,Ƣ$ƪBOczV$0Id4`(F!~#\ݑD?=gӂ5,(LSQr7/lS;M~4 -<7\2ւH<K%-S\]ӻ;ӅSTnЏ䱥/{Ӳwot9e2HB#!9bNciR]å,ϑ918㞅2ĥ}X:U\Z:Zaʵ -1n5)}wy$) RYs:Mc*vy2z)H^mB+?p ˽FŘjח"a`(4VK#S(YVA0xYz6hdX,aެ\Mr,O݃;bAD
d3LTHJbho[ e@]Jc%1l)o/~CЧ -p]崌( ._I})b7mnSɂt1zQLXq:נ~_EuJ -2??'lxE໎%:-ͷ S8,r -5M -7@?&NdO\!4`W]Q*|G?V3л\_ -0兄`V"/ -|6 -1R8'/+>Zn"˄ -v|^*J¢Kh)S =<+dlHhpG+z!3FեU2# --0(ƀo
WKzl\IAg3QnEc) -g9u6#[[e,,,9A;v>qǶ(?A$?V11#JȩG'ӤޛI7m@HJ3Ab N*d6-NRֱV~1e6r
Z"ZhUP蛤Ҁl~̄h\m[X=P1>K*IߜiCf-@(XK6us[LݗIpA)(fSH/@Z=5YvUoo96m|Avigk{&nڿt;ж#}y7mu:uJkkW-=ѱo]u7:\0:9 f -EEQr'.gE7?3HCRȭWkz&N9X)Whvj菷݇9&3s8
z -pҫ1a DLh0aELhHcB߄ W<Ԧgzjs-[kUц & -Ą?8+Sъק`>cDkҌ1Aݟf60]?F&l_\J+E?F*܀LPPHz v!Pd=\(o
0A yz)
"?E,
`T*$0 -5Nq`r^˄Qhw>8B2h3hmf -o)Ŋ7w-@<"ěDh:,1|D - - -Uݹ -nm-8!@iK -@GqZ 3 y\目0Aߣ)I2E0yQL?a0W(SH}D1RLqǷ\Cwo4Er_[S$'7|ego;{HJ>wZHZPYDk(-1B·Wzo3}Oy -%`=hjL=]Mh݆p~C -=`ЮEv巩|K~D+)l\Q
jQBe wGK;cJBY)j>LQɘO׀\QqB|4.EyR\ޅsOblhoPE%;̹n;gКoBHRY!wݱ -v -VAc(9dgX -Ȑ&2\?dÎ>m[/Ys3PgYcͯ_LkZy=o$^ՉLLȚW8oyh;ޜ[07eQ -x=ː'pز -ƂM -Ij>JO[~?WXѪ|.@C -y',xzA? -eKi~[bykX^sS`֢ݫܨ4ڒ?|[pˣ-;ז߱.i)<~{{jNeҚX%C
il>,EΩZ[\busH'H;:, -@ 7};C>R.w{wrOSk3;祇ǟrtNx2ɳRpVsI}0:I'}~bdULbQ3tߠ_ttE, -Y:Ws9M
5n; -! ~ -vXR~ 3kjX -[rx#NLsXFWdKPXC!1G0ECcw[!QKHj^ ԓBA!
Tx=ͿKNe1c%') *4VCTN_Iszj01*ǂC8-[:Pb WatBҠ?JL3#ʫ꺏tօT@alao0Ȓulclv1
6Fn fwTY?тO/;{wtXq\Vzt>Z,}߮=-GsShGՄH\yp:)\ -(h{ÜE.LAg+1~uկr1Հ6K`b0QTӥU艌qrlFiHW #aL5n KF?yYU))4
ECķdnFoѮd슫Do]1 -φ& 6<{}}t},RdƃFU -4<"II/^E 쫑E' -ZJ S@ a7@P>AD -4 r_+}iJЉXQ||N٩W<(՞2bBAo*g%4JOAF$@5l00,*Z2Y͟_ɟ`HA!:{3kpcm68[ -ؾ)R{NJVO8 ߝ/)ޑȇj&Wh䳤ܧ~[R~
{4Z=4)RcXc<y}Nl)LE˂Bͥ -Sb4߈7_$oR6gr庵oTmbePCjl~yF;t-a zRS~Ơ%|<W^<^YXʙ.JNA]F+vl9zԬFo?XFCCP;I;T=ΑıyBʾл_*PMv\5M^E=֛}ڻ7#pM^bL|U5oeѬJG. -А<^Y06Xt';fә;/yld,.Bfm_9j[%vv#[YHzrYx[wO]oRhr~ڐuhc<mӳhk jِso{/ԣ~Aޏq#xRWj1?RMDR ;PZa:,CzY Z -<NZ_nE"x_pyjٵCޖY!qLu#ޓ%!9\<ckhKMkZ9U64g4!2:@k̟z^킞)|ƯEuE9i̲Mo2J13U섑(EN&Tyns
~DheWTsPnB[\|=;BYOkC:b$k
-&ݶa8ֶSmV),8uU9 -0.H2H6")4qT?+s/Hu
&W*ߺߜFkjo3$HIQP5MAoТNߢܨS;D'qPM%q?}p6p'$d gJP#$n{1Tmґ*9Ӯn*ܥuQl\ZvVO"B``t3Muk+n ]0[\<<u=BM?ݜAm}
V(j/22è0ZM$ǕIE2_^QIs!g
T*6IUuɹfTY4W3mK7!Mf#n[Rtl$UmtGwcEp~ -P%MHrϳ7
iMhfLd6++*moTwMCMŠMX;֣qXaXaXa603=,NzoFTw^Rg$cc0P -vwInhj(MCw>t"<ƔttȱXadFx8XO|haŶVlt-(rGGBdDZ-!8tɄvaTdraCL_E^ Fǘ>aǨۑ -ٕ7/LMȘ5dED1Ɋedah H\ӊ0,>c>|>O -ID</,[}"鞰;zVQxh5~+%>>_]6PdZk|J7F -=LD?g+TFA뎃^HC~ -=)v5E`%IMɣ<V -ơdQJJ~ʩSǥQǭQ_N48NѬ,"tC-Jd6&
bqq,o%vu7n
mՏ,0/ *6[[ۺ`XX[::=v;En:0t 5WxWRۘH}v_;^yt"s6sSfBg ->7\.ş81l1\/㛵u]|(GP{P]@'+>w#ljy1[L$W$kOkmó5Ry(f1B-N3-M;s2:56͞##-t4z.gnT#dF^F#[9# ޠV<80J4ApHwSsьw~[~A^@G/r$_Bu6_%Ġ|2YCPwU,)0{N'<iW /l)l18{xU}4eSi#0SzIu9:k81AxV\yi79&_4)#Wh -iuC&^4MBwͻCc0ycuυ\?ӱ\tFN3io-Nh2yZ"ΈρӠ[*j]m.ߢ>0HN$Thz@S(w-iQh%]SMz9$@"cvDfh$3ΟFZOfF6&CHv"i"*^G^QNYӚky*0-G8Ϸ-tUs:vK̰/`ik%bOڳ6-l8X[Hwxh~w:~kT܊˺г*Qo%E@$uL[PNF. 8\9]%"@D8PFk欓-fِ6]NwR -j?}ʧf -LHd1vff%ZgԾZyID"E@ c)Lgf?9tAte0NW3t5354Ҟfm2W839 - ~&#bX6l5Y1v+9y9$5lKP"} -T3h8bwfm;<L8dlwoT{XKs]!q"*<*^f( Q7t:v`WERΩZZ<#zc -Lf@[&gkgY12FyR-9Yog
, -Z!KLguѺRYV
c%fHZ~}91l^J]4Z
:q&gN -w2ZYNjŶ]qSa -<+/LyI;X5 -.3_&yٹKh·
Fx$1!+@yveL_eN(dlq`<%ZJ[O7$vXkK}H]fQE3h$mgr{NmI;װaujRkZsQyDs"ofwv.4[6<|U?>_>H-ֵHpqBZAABZ98m܈A16,lNW`P^Hq|o\1_:srdJ\ R[?ΈACGZIW{.wQQ"J('=D2:'[Zɝ&8e[;qi?:lq -={sB0T't1YAc&W~YYˢ3= w;M$s1OxLf$'qsK!@u/mKE٠LŽ)$ZўlȬwo<j$_<qܫ-=yܳz骧h+#,᎕O#a_?S{`8 ʧbX"I ?$!Owb;zҥXO]Ş:MfTLT5Yuu9 -V4kYG,G帝V\83~_jŅE3 ^"hN>C%PɲA<{Gȥ<R= @Z:'א&Gy&x;4݇.~ZEQ/)1Ze!bv#Exh -@kg7.c,A\-1ʱU ->U?&zd]@\db7wĞAͶBo1Ló-}חw;8̭7D(\6 -5Ud.,viR -Bg -$3h8>ikkljCF6}Rd3zI|d[pƝfg m<__
8,ʵ S?vYu,q]spVZZPv6Jñލ=>f>pT%
_oY9\vuU2l6&б ]fWݨGѨm<l9@c3k -az4ʈϠÙL -'F SϨ`Nŷ6|㊖M]N-a,=Ri:Ngؽpgm<MI%0,m -hFCInNd8f
,lܯ tBu@{hN.y4Jq>1W\YyxUb|-L\h&n L;'7t8"dǺzTO[Ɠ(6uzS%b8\f{pk@.l&) (yDUPAyNW
?dw63fr3 əe'ܒpD1:T."FD0Dd|Ϙi4;KuI%Kv_Z~p+w
n\}cpɍX7۱cTt@xϓoOŞV)Y+ቶ>B,q4n˞\ \T8k BPAdQH_f3hwg-x3RUG-һm#Kpu|s`Jc5zx9:i5ى+;PeMKP9ifc_%3?g0
2Ae~F(5jQWyCڒY^?з܁)>j'[}&hY|h]>вŷ\獍l)-7(:PGnC6ulhk?Žskk:YlüEgzLk<-z[6Po&^xNF?z. DMMج\@oa#7XE3& -:"KdrNSR!Tk첆,EWm銖NJuR=hM<m;BVxmEkIjޙGU.$ aM3d!ldYLf&dfDY4b@AMVPZҚm]+wιw|yvC<{9:DLlڴ <\|n7-˸csPUMO ~1&Kزd˲ ЕBAӫtҵ9[.LhXQ[>]:+99
;X5tYE^4sƲŗNhyK>#q㹌QӣxK9fjugG4Sfd{ͩ⒉?y)Ր*_:~b:9K@m27U4{vVhVAMrv;Cuk;kO~^~i˭V/*YWV»6n_g)_j,ɞBZrϹfϴ.c;ϫ'ul2amm^3aVeI
-/0}%[MpKJ]βNȴk-Iix^Zђ>uҲڕ|Ku%Sl]vĥ3 ? -4a)
K66{r1M#֟zLcc
G+(T\?7m ӦOZw@{`ѾXR%Κ0DMxO|~p(D센8yjl?>Nv1OS)G W+10=b")d-RoLTNSD3!wC^gh{TxS&[wFI&.S'NΨʻϕ;L^?"S
&N
yɌãec4tq~qΕK:W2LgO$'=wVTSDѲpEfo"%uKV-}o٘,*s% -*eT,Wr+G^?-+_^k,㊬P)ª-)n%K^YzPvYqO~6kmd]/;+TqR9r}垤$ K|YUՓZ?Se#dxjMڛkQ7j߮ &uƤ>"q;ŏ6ͷn\uWmmr
nh8cSߵukߤoJoyrvg;?odzvyo5>Wofu`B`zু} 0x2Lׂ2\2۞ٱz;.8ɤs\knu;T{^tݛw;v{vN^מ/X^
/,\.WW]ֽ^q{]{[<$%)IIʿt@v\sw~/t웾u߳7T%%)IIJRo'$%)IIJRW=={C,8p'.7ƗVۇ6OrSR$%)IIJR$%)Iҗ -,.&) -f"a*߅KU"7G\VōQseM\ۡ\qջ岞]r E
ڻ岉)bg*c -%yN;"N"q\VōQs;&]˭x@. s岞3g!
|ut4l&L%Ser91"ǓuMHˌ3+3ά8*nʚvƙgVfYqfeƙgVNI͐.ˌ-,B. -9 -WR#Z\\;FTA:NZrh6:fj/t^e)j[L~;Zvhcy혇ppkQkA+m}zkמ&AVވjJt6:z7@[0IIhom\l"t>/庂#\\+$$[h{([ -7B!]]_YcsH^hcՉZ;J!Ae)@YY&Ŵ^"Kg }*҄m`u{kb,+j_nWfi㗭t)dF?]
-CxBĪVcy^+~͘Y>zu(F:2fqz[vshf&J5tRmrV+{2Y?ۗ -N4$>,>ټyFevAi,fJ4<4X˞N,ckg6lポ|>9+Zd%l-iAɕ蓇^G])={W|Urs˹!#=4GY;ӮD;;̙d/]'rWgӝӲSFё5*/hnOndWh#1B˕u^5*wΓ7-bO5t@6JGCItOw xO9s =f^b+{6]s@>} -\,̯Gtع)?:"JNN\c!?k{g>o6oQM<9qe-{TvS؏C -ܣ֭{EM$R0S[RwyyĝFjK>ڢ{K;Qڠu/]82IvʱG4ho+'Nq#qgGS1N[ZK唉?SΉrJ]A+^5̵gGzvEo\1JPۈӲMBAԊZL3NmP)3J7WINj0Ƚtbh#k -g<QzIy
͂lJ!3YZv)D茊e@k2O/ʨ%6ʈh&:aQ9zƸZ:Y[IP~bj9G^+Gl{!U(RjM_!~Vr
z Q;Jk)bYm9VvP%Pך(R-FgRrUv^ly/k:FϺzb1e+zH ^fl8K|domQZaZzyB(bWmtiFl/-,̗*/k -I>odxwsK((ո3'pKU~흾5;$ٲX˖jTj:|h]kJm <z|iv=<#0.n6B-.N*w;\ޠkt$Wkt9%k#9 =ƀaZ}Py MRݡ)0 -CCVu@ -s䲇pap`\v?6OJo[+AW*JAv. -:Bٽݕ#JvohÖ2 >/ XK$D]VOfbxȇ KKV6qG= -؝V{`;YҨg64;|X -攷9yEiMB\iU
N9`tgd(Fz`,{pҗ#mX -g%[reKNwf~ڱ@;N* -~(&2Ck8l;po6G -! *VPYn̂ $@"kz|vg"=;Cr}#8]ddLO$eɆi!R`rD1YF-5ڃf -ed_pys~msI-#s<l/uDIp<x`ڇ54%ŝ& ʄDRM6'Hc3[j - A 6c̈́1XaGqkD(v?U@!eyCvO"V+ʙy"'͆lG,isl݈J
?es]vRaDd$OoÂ-4`o4^bAI>eSIS#[|Fm/qQNr(j#8X̏N7
őv\/DB%sS`9] k[hLآi -m5Ru}MuUm1/ʲʒR\Q\Y#mRTR[y9Vk}U՛j֔IUEh\]lˋTXTa"[*UӻXZL0
-ʪ*2 -*jP*kꢷn,-Ζl5eHIM*}LA-%z}mq̖b[9tՒ$?H~,&?},`_ɏ5?`x @y#ď:ɏ $?&_1bǍdp.A%\z5Mi2#l))d{xo6Nk/tq?M#UZMK96+p+:$lGq7!u-#>DN{>'^'YWrJ~
x}ow;|IK
. 4=aV%9aQ(*ū:!lS WG#ϋ{ۄo -?~&-*#8$| +{Y8]8_|_?aBH܀* -f0~fYqH4YE` -l9i^c -Zl>Y cj;u
`0̎`>^ϧ0*0[f!n0}`v}̾fOl|`$L+# - -̶`v
l?f78= -f?'e0{>mM1S|K\*-*0kl?f_`#0{38fi`6Y`D̾70{~7lgY&-B0l;]fK`v=fOK`&
{_fY. -'<_ 4N_(_:UXtj{rǐN_/R'O{#JG7:!YVz{6MCo*{tjNEt+ -NUTe6댜-uKkk!RXJg35:zzZXC&ԨxO,vAtg8Щb4ކgHtIr1qD'Jlx)&z@jtSq).yv\~kx35]Fyj24pbԪ8Ykz[4jN驮${=z<^VU=Bx'z5g0q FG0T4<äq;L]]݇<ɋJ5k8A:D/VI\ GOUXg_o5*p>%EJC?,D+~NfTWQ{AXeXg64<h)ũ*ӉVة,7 -VyҎ^z^g<>rB11̴N_ԅZ -3Ӆup|iX]4HGCPqzX(;Ob#X`[Dq42*hnmO6-n
aFJ֣5r2뇫 ,LC%sG9VcX̡9Tb1Gz1G{SƜU-rUnppFz-?յ G^fM(]z7Epez3NusVz/F$
GZOO7UՐZN=k/jbzN' -lx#>4F^B$"&Yג[4A5? N~ti?RT:jx-9τ;
*Πƥ#ڝd;Б4},85o ,6!>ZqjL!nŨneZj*;}HkhezAbJ,T&HT",Nk,Y燉
:$nĭJq"*`zVְX0 ݰ*5gД /* ڳ)"oPKq+R`Le0q5DKFRjm) U*ޠ%Ǵ&DZ4,H$Zc5dmFVViiN /IJNւ`fLG|tt>3h31\j0
?Hшt҆M{V+zorv6y`
)HZa0D*%"۠
FCq
T= k-oг*ZJLAs3c|.09㈑ݒrƢ#ňj'|ڨ$4]+;SFx-v0ڙyҖcƸ,AOg'ku8˰Jָ%qqԺT_{)6E>b5Iq` -_dmnɀ"4/eZ0h{U*zV;7r -Έ&Z݉Xe/ahFe%lH+r&lgL ->9yԩ8o7#C"! G#'"&#oJ]ɣ"
k"39:4p\?YD)옖ќ08~$#vQK"c\*d67T)7Мstl:tj%WtdX2,&='̇EN1qB؎gw7ƫ_GT@E\+i -U
`pDh -Dٍ;v?ESTEkV-Į-'ӧN
7]zO{u/ثe-KҘ2h)ni2y8It<ibͧ@q,LS#vKe4d4A7N{ƔaI<Y")@yA
K"}F6|ѫ h&
jj-kjj:գ y<ӽWkx\Ff6(a`$_6%k$\Cid/
3vL>Ew\4Pvd8m9 -,x -h'K庸.1\k!tFƔ} kQ^LǸqd(M; /Ivy1u -4]t\⒁r1<r%eT}Rm.Q9ai[vpGe6ΐrW;#.'g_{nU<BY{t7i(9p&TPO6#kO(bUElqT5{Ixn/C!K("qÉ͑3k"zlB^\\wl/mzx -#bհݻpE7I*\wvX=F7$k]hzpeiCk/RLz)UlXvv!_d -=/*k@n|rJTl%T~ -tMA
PB\?Ucga*(3O=í0)PbcJ}Gj*aޗI%ϛ)smZ,PsS&~QRթ8թu}1ęׁ6n.$q];;pRVf+WrZ`.٢,Mj!k\ҽxIz6 t:vMݩ%[n@
{=~S$Td#T>r0z;Oh>R}Ihlxr3xE|lJ33#!]/g.ߨο-ZyrV/UCuucw~?k`50/Oy;_aj0"POlhp<-gc7Ud+J4:^$ۄnw4SL0J;`i\lME?A9꜔toàWلw<ṛ9sBzXv~Xz'4֤Goei\B - -VTе95"(Oa
6~VUB!oX4|Xqo;':y[1Xs@A;ǖ -T`<R& -8r?K -_kr=B0;47%TP&n1Q ֣ -B l1t -Prwd| ^T^ejY =^ӄ\긽23"egh* VWHd(Ue}2\)kٵV5tՏnyQ<͟V}ݨ%HࢳT.;1q6Aevs1$5`MRvn_e+:<Rs@U=FwwzW'tx -)0tB|+O#hfCy3[0ӌ`~AOZPNPb`,.B.NJ߁Ð`D/z>5\zKIL$N}-oi
fAOiJL-Ob^^C0L..( ~5~RϦL( -o={_\ -endstream -endobj -199 0 obj -<< -/Ordering (Identity) -/Registry (Adobe) -/Supplement 0 ->> -endobj -200 0 obj -<< -/Ascent 750 -/AvgWidth 521 -/CapHeight 750 -/Descent -250 -/Flags 32 -/FontBBox [-503 -250 1240 750] -/FontFile2 198 0 R -/FontName /BCDHEE+Calibri -/FontWeight 400 -/ItalicAngle 0 -/MaxWidth 1743 -/StemV 52 -/Type /FontDescriptor -/XHeight 250 ->> -endobj -201 0 obj -<< -/Ordering (Identity) -/Registry (Adobe) -/Supplement 0 ->> -endobj -202 0 obj -<< -/Ascent 899 -/AvgWidth 890 -/CapHeight 771 -/Descent 205 -/Flags 32 -/FontBBox [0 205 1359 771] -/FontFile2 214 0 R -/FontName /BCDIEE+Wingdings-Regular -/FontWeight 400 -/ItalicAngle 0 -/MaxWidth 1359 -/StemV 89 -/Type /FontDescriptor -/XHeight 250 ->> -endobj -203 0 obj -<< -/A 215 0 R -/K [184 0 R 185 0 R 186 0 R] -/P 183 0 R -/Pg 14 0 R -/S /L -/Type /StructElem ->> -endobj -204 0 obj -<< -/A 216 0 R -/K [206 0 R] -/P 187 0 R -/Pg 14 0 R -/S /L -/Type /StructElem ->> -endobj -205 0 obj -<< -/A 217 0 R -/K [208 0 R] -/P 188 0 R -/Pg 14 0 R -/S /L -/Type /StructElem ->> -endobj -206 0 obj -<< -/K [188 0 R] -/P 204 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -207 0 obj -<< -/A 218 0 R -/K [210 0 R] -/P 189 0 R -/Pg 14 0 R -/S /L -/Type /StructElem ->> -endobj -208 0 obj -<< -/K [189 0 R] -/P 205 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -209 0 obj -<< -/A 219 0 R -/K [191 0 R 192 0 R] -/P 190 0 R -/Pg 15 0 R -/S /L -/Type /StructElem ->> -endobj -210 0 obj -<< -/K [190 0 R] -/P 207 0 R -/Pg 14 0 R -/S /LI -/Type /StructElem ->> -endobj -211 0 obj -<< -/Length 2612 -/Alternate /DeviceRGB -/Filter /FlateDecode -/N 3 ->> -stream
-xwTSϽ7" %z ;HQIP&vDF)VdTG"cEb PQDEk 5ޚYg} -E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI -6'~khu_ -Ⱦhs2z\nLA"Sdr%,߄lt -4.0,`
3p -A1vjp -K0ށiABZyCAP8C@&*CP=#t] 4}a
-ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR
nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴkh&45ǢYYF֠9<|y+=X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY)
Σ-rqr.d._xpUەZMvm=+KGǔ^WWbj>:>>>v}/avO8 -FV>2 u/_$\BCv< 5]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK -.3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%YjgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{m>PkAma꺿g_DHGGu;776ƱqoC{P38!9<y}'ZZ։6i{L{ӝ-?|gKϑ9w~Bƅ:Wt>ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' -O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf
-endstream -endobj -212 0 obj -<< -/BaseFont /UAQXCA+MyriadPro-Regular -/DescendantFonts [220 0 R] -/Encoding /Identity-H -/Subtype /Type0 -/ToUnicode 221 0 R -/Type /Font ->> -endobj -213 0 obj -<< -/Length 65922 -/BitsPerComponent 8 -/ColorSpace [/ICCBased 211 0 R] -/Filter /DCTDecode -/Height 540 -/Interpolate true -/Subtype /Image -/Type /XObject -/Width 1182 ->> -stream
- - -%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz - -$4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz -`pP㞴APEPE1QK7 -(H')9#</^sQE -1B'(=~ -9 -( -( -)h֟@R@B'j -("Ee\-PEPE48) -IɧE -*=_ 3jp ~\P -ke*) -6lb(RE -ZjlN(((KE -()%v%@{oJMܻqJhi1Ө(ٷt Ҟ^AC(`T -()ku -( -(?(h qN+[(%y1]ۜ -( -("UC1&ʻtIӊ!dv'Zec$NGt,@#PKp52i@(T1q - -12p;(J{sN -ae\q> -u -J -y97HF$r:} -( -( -z"C=M/:3$([va_wL830 pB -H>d
"9\=hj(E -;SCpzuE -B28 -r1O~uvݭ "Gfg!rrI|-|9wm).@FNrTlpqN>4PFJ;Gj(68'>v -@{R@Q@Q@惜P - -M|9SFFZiTƲ`JF=O -B)h((0J}Pij4WԔ -6u<F$c8c5ko&eaL1I<حzRn1~A}kL^ - -cAx>x](P@' -(ݎM-- -( -( -(1P$B)8'(>{4= - -,V$zRs|zI}.pr:k{AOY[셜ݘ@ܧcweˍIS+z -( -Ջ. -{Nӯ|/k$f5B6A s^ai-p' -8Hz -KWu>zP6zv=?u= -F$ <2M -( -( -(PHsN -( -cH\=Pߵ5 -( -( -( -(E -( -)r0i -=G_ -\`` - - ݐzt_ٛ:pLrw\qg -8 -)|si -Z -j:)(X0sS袀=:S -( -( -NԴ -Q,j<,v&{'خ<[wFvʖ<>3[X&A67Ic$c?~+ycH~}qO,_Gl1cc -~3Z&bPY?9\a=T9=+ޫ7Eѵ=CS?o7ڙPl+I\_Cqg2Ļ -* -( -()hJZ -XgojsIKE -L?1NÀH@XzW^$^֠nT,\{c5|F-㨭屾80n|Z嗉P]FhUP(с2P<rog\i=P{{(!""а\ -v4QE -( -NԴPEPEPEPEP(LRQ:q^yGR@W ?rJO{U({x;}֯Ɲv:6 8sg]Dɡ[\[D$Kt=f:{O5dG
n$n;HX9|K_sa -O-㞵xI4k}H]V' -q
1ؑ˫N㝤OZV|\+B+HF@c;ofߌVi,FUdn]KwIG@A;zvl˒\ -m -( -*7ʡ2qҮ'rEp -ʥ?U&sLhwW`'CO4 -*]F>S -z` -( -j''֝E -( -( -( -@sKE -z_&8fڥ"e-20@:֠)-ZxmC)yK\4"p11Sr?JZ(M+z=SDVT'=RRq - -1Ǹfc4
-( -( -(G:(5p'X9 -+?Fh~B_qۮ1__A-4'F -A9W$# :!
AK Yԫ];I }s -@6qj9_j -LR@Q@v
@MxCFz@\(k9 -ܣpd)<_o6 l_?<}%[%zʱ|3 -`k -pkڿ,ͮ}V}.T\@4k{B=G-L G -|F~-Zjow,ooR0H!' -4h~6u(@! -( -( -( -w#֥ -(E -٬hVyx`s^7^fK! -ʪqN
oYOmǴ$TrN -0pdC~T`0)W/٣/e?/3
3VA8_$w.O"3b#6G@ ?ZJ##ʡxRDtaÍ(ٵ me-K )Ԝmlw_jf[Yգ4=F0I"oY<KŖM3M -6Kc+D1\F, =? -Hx -C -( -( -(-PL)NsDv -,FeKD"3@=Z4}
a]j-w,d@'~aMAf08Ag -HG,r;N=E -AuixmWT\淖Pssa_KMY5ܣΙwXu8{Sj8Ҵ
G6̱&9`=?ּ?ktב*̩ 67 `t$:=>kb2EQ,@@ cI9}!5-:r Yx=V;iG1-ԕbIڄa\`85"d9b2{=M -re9þ!𰍭VS߸ -.Fr}YGbi4뤘! -( -wϳs?: -C;j1qGקOZ3x~2:+>kW^̈́lkn^}(ԼtxtxX bAP#_ռ\S4[p1?xg/ov@9\B5~̚ЫIo8v fg23@UM֝@Q@ zЪN#߸' - -O[Z|km]P -b=8&-֠), -oMrI -nm}LUɄTr7|p=5KƷn֬rIprG_ -AΏ6ƎM!، -]א '$tw/ēwЋ
C -G'ndhq -:J3&21־j79*v#]bXs;4io#^B-rr^H־̂xIgWNȹ arC+)T}σ(mi.)V2\z (ָ4Q@܌4 -e -z`TI u3E -7jlid207;g,zxOuc{p_eAw:hpӢU\}zn\gE< ֥yTLj؍PT) - -;GUb%QEA{ -Gi - 9G#f&\#GpsӚb'u
^}> G-S. -:M:(5@n0˞+MgG4Ǖ6E?p -y$qj*2`B8-֕֏28 ;h --Z'I; f"̹`/#$Ҽ55}Vf9(\gf=-UZ}@!'T kn-ĖN$<0'=ը.<:7p3Hb@#$~f5)t
RCeul"\+rI*;dRIᑂH -( -( uhݏߧN?(( -(4PI8KE -qQW+/l[ǑA]'8 - -MGMGKR1Ce) -lrs_U]chb6Eɹ(:d9+A;آ-A<)"r˗0{OEPUA,/V(Mx-=ϵKQJ`8(ׄ-|m~;1PT -`gWM>h)#2@h' q -^%b -DYswҾIDY2oƍb֛ o.y':M扡[iyBdr$ -֏M6+>dgA( d`ޓŨ<a -ILPv+O|*skoٌNT~9VӓtNdmlE*J -!\+<ZjDd1. -8 -r -"8}kSiZ٦vKGln7 - -A8=k -xXϱ ̸
6鑌
u
,
Lr52a֗KLKtAA@Zda;>9?V~-o&Ą A~;zk$Q{d$ m8]2H=L5
BNoX̹S90O?^h3g.4_ -#qR[]8+P9.w#L3e=:8W^eG2p,ɒ1 A0z~L7M"C8#I2x$lg-Xpz⾭<A -( -){z&4eGuR($}X!,5Soy -CUPqzTF0o`Bnչ٦g! X 32rpq -͵u4q5I,intw2' #*Z\KGッz^]LƅuH|<#@xWXӼ?nɛ(.ۇ%N:g#h/Y,aA.Hf<qII=J·v]/GoM{wǠ$ԧH>uK)@?h#[kĻuUvp9pJ;dyk;=B35:(Yx 㸯uK\^[cb! O@={w_Z]f[hKiQb@/U݂#}?ThWImlQ;++)\dAȯuf<Mah?4M_D5j$G[!rN?1?^ٯ/ -Rgsc`pGՒU^8ԕ$ҾP_+'c<`2) -}.<Ymỻ6*VF9°遑#>ƿfe\; Q+.#\q^SfaZZl-A;7 -=n}9Eх,\gV l>A~a!w -T -G#=0|%<jxWa{Lzski8}Gy -H d̀u<p "XM&ˏ3n8<c~jtH5:5Iu@[L6 - ^ -fX -u9%-$UKH8v<]9EGCTdp987Կg/><jbd -u-:楱].G5Lɇ~}G -NT߃
Gu;cH%w !q:Wt?6T - -Lap3QHr -0gӞh1zmﭚ!,nۀ8'<d}kjO - -3;sw -+ɒ -Ir<OJ -9pI:^Eo'U -n@Vڭ9<]X2F1gJ -?QxRZn{, -In sOL`P_xj-kڏoiyVy['Nkٓᗈ>oZ.!x& -hP@N9{oR$xv -G8 -̖t1\RA9W -2cIQ@2XC
7ln'=:q~7_n4aL:}ko]7xjދ}X -x#$)U8-獅XBQ?J洝CZ`!ӵ+VXGJB69#2j]FCe铴rZ2[2(v`YpH#+/ VYad!cTyG99=SOOBa-&h'rb -7E|]Μd*ŗw# - -|vF%<O_xP,H"F OR0FOi~ |ggskuR8F -'`6zP6=F}x%bIfT>?ᗁl)=K*bc'83c'&@sK@VbR -`sAT -Z -,}ps0=(w.v7Yv$cbk"l7n"@&P#=3_X@?\or@ S>f?U - -AKE -2@ -[;{@Vj ->2OZҚFF4E~ξ*ݕaafCh~vVzgY&9ʄ=(n -p[i#88~y/l 'Z -vemḺ'<U((((&BxYO0A?UַF@#9q뚱ޡ062p}(j)di -n--KE -/!&:22ɯ ovͺn/!WϓCd+EqE1F离jܾƁQPm -~Kqፚ\H`8Od䌜WDѫ'Ҁ?'<O_Ne-
9ԐTz -S qkS_;6լ⸍l8 r<u<Z˘' - - -( -*<1`Au% -% -Gt3K bC0:u -Z -j[1,YUX,Ar -?fKZ^*,J*
s@ ȯ! qL*@88MYm(Z( -( -(n -9 -*V`q9OʮPEPEPEPE01ot -ʬrӭ} -]GtF]IⴿxՉT7 }GL( -(t -( -(=N -NPEPEPMfUn;S(((ʬ[xQ@H1(7{ԜRQX_ -ǭKUQ), 4Cn`dtC!\5Ԁ> -)35n$ 1@QE -t=jJ9 -SAҀ=o>ڶw\$LdWĽoZ4cV` -( -( -( -( -)" -k0PXT3ES%s~t33H#5vqN( -BW-%(B|~AX[jzj$qހ)iN(o6㚒 -:QE -w
II -(RGz -C959bag -^B
xAk;pd- - -@Q@Q@Q@3sd$N_vG -E - -+* -(#(d|Av=]N*J2 AuNkvTh\_ -( -)~PEPM #Ҡi,;xac>4 -( -CqKE -t:W -O> -x4dg#o֧%aE>P9 -9q@M{zSr8!ԁJ:R@Q@
y)Q@Q@Q@Q@Q@4өh64(((u -Z -( -)`: -( -( -(#7zT -Zit[/#Ig - ɑG瓟ҤbAP;w8FbH['Ҁ's:OU.m-8I -80Ak?_u_z$9\.6gy<Nk>[KXmGq6HR'VH/!$' -el _ĺgror, S #$@`եY[h܁` -( -( -(2R3 -FCKak8<r$O=MZ >RrCOOś{[hao"GRFldK=O:AfG 1 kce;hs$)pͿf@!NA CamtԞ[b""^@cvm -( -( -( -( -@sA -(?((RE -nI8$O˜V)@9M: -(H##- -( -( -*$$mcT -v}p+NjtmfC -UHsАk摦C;~'g?1Tlq -( -( -( -( -(8돥 -( -( -( -( -( -) u -((h *rzqM9PEPG9 -( -A3KM -ϵ. owQr@$=rzV^64"d|+oN@#PWōwۙ#bN\#ڼWPOEz -r -( -*6# -(( -( -( -( -( -( -*!"L]
?K@Q@R`@
PG֟E -( -(QE -(=8lqޝQ!ރ<J( -E -( -(+(Qݾӏ<S?LT0(_3ܟV( -( -16g>((#Q@Q@( -( -( -(?
-endstream -endobj -214 0 obj -<< -/Length 6918 -/Filter /FlateDecode -/Length1 14180 ->> -stream
-x;tǵ3V⿍`1X6N+imm,i!G
i܆~6 I!Ik8iB{i{ھ4ѓ6Ρӗ3+`rrN^w;3wB2kzu\G`ZO@ -~.&cyDO=P̭iYvdփ6` /? h-_ 2)/#ĽW=gwـ4E$_w~DykR@>*"tUfH
Gfڐ~HC`)̧oGߎf^k˟=oջVǏ7Mڟ>UtOo:fR|@+M q&1c<ctHr(9heh82#+M"//fĕ-\ŋOZcNYBc5hsZ%:tEr^q{_<S'ie(+@<ip)TJ
JtYʱtS;p^,r!!\^.>93E[7P)ڥZr5l^P_WQ|YҊ%6qW/).*,͙f,faw
¾qc5%R"uƉMK0]ӕ9*!vw |>I -ovc -! -0KN%VѺzZb-X9lk5jZ&+g(wsݽqwevz8}uq}=uK+~&1?wgId'3wSdV'Z -nd*TɭmS>ùʿm>?Ln
z_&5@a>FЧ݁ -BnwhZLiitw;͝kf -w| sut̝D?%!-+ē\b?C/ - -<{эfZni>0:AOc.GA;q ow>{ | -f3.o^~'/<ݼO?lh:lz536ǩ,,҄a7kP1 -Eb(5B+=
iҔ4-݁o^/wD<xM<Iq?MN^\ 5zOCݦh'=|:æ3|z=./$=?-Ą
>On-D_`EE8pYYkgEQ0i/wFTFh1 G~#Bp@]c[jg9's&ڷ]Wېk-hj/+ΑZ6Ϝ1O_
=4Yiy%6{[ƷjKߗ[|\*nr .eiaE3g.)_fiBbYedaunN\qp[qtdsjj%gܼbe08IG[\qK]m1EP+⦆BPTHGM+*싅fټ_.ss3*1&Njuʦ,yY掬VoXUP?4o4
<֛*ҹ[gǪnN87'U~U23-ed,%z?ذNVmGУkq+Jvvً֘'eλ6
%^}z.G;/Xغ|Rۚ}=%]٣%K%tM'
U;'[@I+nq9SM<nK+.h\'ւ`),(.* }1`51E
TuЇiz.,tDصܰ˄9 cwx¢k9^x
>Wpn UnC[T\;V`zUC_
ZEWgL}<fimgVXvMRo5Emcv|ֽ*+_g'<Gg[hDU"wjF˖-wԚy(3liUM]}ÊƦ-m,ܺ,+.ߗW$ВYKWf4V/[^նjgd5pwe,7f#R]xہҜtP@"c3jq0Z) -9/g]%
bɛ,!i%67 -q
M4f -*7@NQZBJ6dCQ(ThH(+,GDuPTLKH=#@Rq`
J
ʄWBYñpD0Ue2SҤO -'(̤~yw$8'*ЙG U"[&s7LdϰK -FIeJ HCwY[3~0xC
<bMC:(j/
)@<CŢTD; -VɜaI
"j!c79Ȫ L -%(5bl# Rb7rY/Ř*i'Ԭ%a'ʯx ai`%ف3Dp*$ZbPD/)I #2QIī?[N38*# - Q/@D^xk~ -p (upENW[ |QhC
Ɔ´'C+x{s;0[=H#tRj
- L{L"«S2U.}ETZԦc#uT,N!JQz 8s)]*T"0F9jyD|0ht̋tU -1F,ۥg=,(5#ܔ_?MYKVd6;>chq.ͅu&0DF:Qgŝ+$V-N&C)Cv%[Rs~CVDnZ5n~j~v9K}VR!:-e5oĚgj#Nvw9~A_
N5E?Aݒv\_#_htD -ᾟ&$iJ?~NBb2yE$ $.ڒtT" -endstream -endobj -215 0 obj -<< -/ListNumbering /Square -/O /List ->> -endobj -216 0 obj -<< -/ListNumbering /Decimal -/O /List ->> -endobj -217 0 obj -<< -/ListNumbering /Decimal -/O /List ->> -endobj -218 0 obj -<< -/ListNumbering /LowerAlpha -/O /List ->> -endobj -219 0 obj -<< -/ListNumbering /LowerAlpha -/O /List ->> -endobj -220 0 obj -<< -/BaseFont /UAQXCA+MyriadPro-Regular -/CIDSystemInfo 222 0 R -/DW 1000 -/FontDescriptor 223 0 R -/Subtype /CIDFontType0 -/Type /Font -/W [425 [658] -] ->> -endobj -221 0 obj -<< -/Length 231 -/Filter /FlateDecode ->> -stream
-H\j0~ -Cq21aXpl%3,QC~:?[Ҽ4'8-B'Uy.v4QieJ86UU?E/;^+;dOnvc)Au
{ftݧ ̿kܗalp8Ec
BUVHAߨ߆]]OWNPvf<y9C֣~ -endstream -endobj -222 0 obj -<< -/Ordering (Identity) -/Registry (Adobe) -/Supplement 0 ->> -endobj -223 0 obj -<< -/Ascent 952 -/CIDSet 224 0 R -/CapHeight 674 -/Descent -250 -/Flags 4 -/FontBBox [-157 -250 1126 952] -/FontFamily (Myriad Pro) -/FontFile3 225 0 R -/FontName /UAQXCA+MyriadPro-Regular -/FontStretch /Normal -/FontWeight 400 -/ItalicAngle 0 -/StemV 88 -/Type /FontDescriptor -/XHeight 484 ->> -endobj -224 0 obj -<< -/Length 15 -/Filter /FlateDecode ->> -stream
-Hj` 8 -endstream -endobj -225 0 obj -<< -/Length 520 -/Filter /FlateDecode -/Subtype /CIDFontType0C ->> -stream
-H|OhAgjv5bA]R{1?J5`,j,Kek0MRW#DA APEBj($"^>}= 2 -endstream -endobj -226 0 obj -<< -/Length 597 -/ID [<20356CAF1EA8E546BE7E22ACA2CA4797> <A6C79E772A68E946B1318464DC3158E1>] -/Info 8 0 R -/Root 1 0 R -/Type /XRef -/Size 227 -/Index [0 226] -/W [1 3 0] -/Filter /FlateDecode ->> -stream
-x
]hu9f;i624Z1@g۳gE7V,<laJ
*Th<:^n뺯w_!@~%OKujV$<*$ۄ';ByT* ϔ6K(!<_PRcPlmr
viû[u
j>NCK9= GKqnƙ=c/_uG}}ګZt:S+5 -mоKe=g=g=w:tD?|M_kvCjwгQ|MizSN?B_2/~?U\t ~}8aw~çdwuF5QgNk8i78Ym^fo'9Ήω
#SĦ??[Ɖ=;mYb{fB̽Z&v3Z$va%vmV~&voT~"lP/o_^zktQDo}E(RZ2m!M$Ud2I_)kj[e$%GnT'ڡ.r]#]iЙ
-endstream -endobj -startxref -360498 -%%EOF diff --git a/Semestr 2/topo/FraMalCzęść1.pdf b/Semestr 2/topo/FraMalCzęść1.pdf Binary files differdeleted file mode 100644 index 1be118c..0000000 --- a/Semestr 2/topo/FraMalCzęść1.pdf +++ /dev/null diff --git a/Semestr 2/topo/FraMalCzęść2.pdf b/Semestr 2/topo/FraMalCzęść2.pdf Binary files differdeleted file mode 100644 index 4b52abf..0000000 --- a/Semestr 2/topo/FraMalCzęść2.pdf +++ /dev/null diff --git a/Semestr 2/topo/Topologia2_Franciszek_Malinka.pdf b/Semestr 2/topo/Topologia2_Franciszek_Malinka.pdf Binary files differdeleted file mode 100644 index 299d001..0000000 --- a/Semestr 2/topo/Topologia2_Franciszek_Malinka.pdf +++ /dev/null diff --git a/Semestr 2/topo/zad1a.jpg b/Semestr 2/topo/zad1a.jpg Binary files differdeleted file mode 100644 index 062fa49..0000000 --- a/Semestr 2/topo/zad1a.jpg +++ /dev/null diff --git a/Semestr 2/topo/zad1aa.jpg b/Semestr 2/topo/zad1aa.jpg Binary files differdeleted file mode 100644 index 7a56efb..0000000 --- a/Semestr 2/topo/zad1aa.jpg +++ /dev/null diff --git a/Semestr 2/topo/zad1b.jpg b/Semestr 2/topo/zad1b.jpg Binary files differdeleted file mode 100644 index 6cc23fa..0000000 --- a/Semestr 2/topo/zad1b.jpg +++ /dev/null diff --git a/Semestr 2/topo/zad1c.jpg b/Semestr 2/topo/zad1c.jpg Binary files differdeleted file mode 100644 index 62722b9..0000000 --- a/Semestr 2/topo/zad1c.jpg +++ /dev/null diff --git a/Semestr 2/topo/zad2a.jpg b/Semestr 2/topo/zad2a.jpg Binary files differdeleted file mode 100644 index d3c8cd4..0000000 --- a/Semestr 2/topo/zad2a.jpg +++ /dev/null diff --git a/Semestr 2/topo/zad2bc.jpg b/Semestr 2/topo/zad2bc.jpg Binary files differdeleted file mode 100644 index 1feefd1..0000000 --- a/Semestr 2/topo/zad2bc.jpg +++ /dev/null diff --git a/Semestr 2/topo/zad2da.jpg b/Semestr 2/topo/zad2da.jpg Binary files differdeleted file mode 100644 index fad050d..0000000 --- a/Semestr 2/topo/zad2da.jpg +++ /dev/null diff --git a/Semestr 2/topo/zad2db.jpg b/Semestr 2/topo/zad2db.jpg Binary files differdeleted file mode 100644 index ca8122c..0000000 --- a/Semestr 2/topo/zad2db.jpg +++ /dev/null diff --git a/Semestr 2/topo/zad2dc.jpg b/Semestr 2/topo/zad2dc.jpg Binary files differdeleted file mode 100644 index bd8ee14..0000000 --- a/Semestr 2/topo/zad2dc.jpg +++ /dev/null diff --git a/Semestr 2/topo/zad2dd.jpg b/Semestr 2/topo/zad2dd.jpg Binary files differdeleted file mode 100644 index 709e10c..0000000 --- a/Semestr 2/topo/zad2dd.jpg +++ /dev/null |