From bf02a0ca988be5c423b7891b74407768a0fe3f69 Mon Sep 17 00:00:00 2001 From: Jakub Pokrywka Date: Mon, 31 Jan 2022 11:37:00 +0100 Subject: [PATCH] add thrax --- README.md | 23 +++++++++++++++------ TaskH00/description.txt | 9 +++++++++ TaskH00/grammar.grm | 44 +++++++++++++++++++++++++++++++++++++++++ TaskH00/test.exp | 6 ++++++ TaskH00/test.in | 5 +++++ TaskH01/description.txt | 8 ++++++++ TaskH01/test.exp | 6 ++++++ TaskH01/test.in | 5 +++++ TaskH02/description.txt | 7 +++++++ TaskH02/test.exp | 6 ++++++ TaskH02/test.in | 5 +++++ TaskH03/description.txt | 14 +++++++++++++ TaskH03/test.exp | 13 ++++++++++++ TaskH03/test.in | 12 +++++++++++ TaskH04/description.txt | 15 ++++++++++++++ TaskH04/test.exp | 11 +++++++++++ TaskH04/test.in | 10 ++++++++++ TaskH05/description.txt | 29 +++++++++++++++++++++++++++ TaskH05/test.exp | 8 ++++++++ TaskH05/test.in | 7 +++++++ TaskH06/description.txt | 25 +++++++++++++++++++++++ TaskH06/test.exp | 13 ++++++++++++ TaskH06/test.in | 12 +++++++++++ TaskH07/description.txt | 32 ++++++++++++++++++++++++++++++ TaskH07/test.exp | 12 +++++++++++ TaskH07/test.in | 11 +++++++++++ TaskH08/description.txt | 29 +++++++++++++++++++++++++++ TaskH08/test.exp | 13 ++++++++++++ TaskH08/test.in | 12 +++++++++++ TaskH09/description.txt | 33 +++++++++++++++++++++++++++++++ TaskH09/test.exp | 7 +++++++ TaskH09/test.in | 6 ++++++ run_report.py | 12 ++++++++--- thrax_example.grm | 13 ++++++++++++ 34 files changed, 464 insertions(+), 9 deletions(-) create mode 100644 TaskH00/description.txt create mode 100644 TaskH00/grammar.grm create mode 100644 TaskH00/test.exp create mode 100644 TaskH00/test.in create mode 100644 TaskH01/description.txt create mode 100644 TaskH01/test.exp create mode 100644 TaskH01/test.in create mode 100644 TaskH02/description.txt create mode 100644 TaskH02/test.exp create mode 100644 TaskH02/test.in create mode 100644 TaskH03/description.txt create mode 100644 TaskH03/test.exp create mode 100644 TaskH03/test.in create mode 100644 TaskH04/description.txt create mode 100644 TaskH04/test.exp create mode 100644 TaskH04/test.in create mode 100644 TaskH05/description.txt create mode 100644 TaskH05/test.exp create mode 100644 TaskH05/test.in create mode 100644 TaskH06/description.txt create mode 100644 TaskH06/test.exp create mode 100644 TaskH06/test.in create mode 100644 TaskH07/description.txt create mode 100644 TaskH07/test.exp create mode 100644 TaskH07/test.in create mode 100644 TaskH08/description.txt create mode 100644 TaskH08/test.exp create mode 100644 TaskH08/test.in create mode 100644 TaskH09/description.txt create mode 100644 TaskH09/test.exp create mode 100644 TaskH09/test.in create mode 100644 thrax_example.grm diff --git a/README.md b/README.md index b065fdf..fdf1721 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Dyżury: B1-46. Przed przyjściem proszę się umówić na spotkanie, najlepiej W celu zaliczenia przedmiotu należy zdobyć punkty za zadania na laboratoriach. Punktowane zadania będziemy wykonywać na laboratoriach oraz po nich (przed następnymi zajęciami), ich ilość determinuje ocenę. -Punktacja za zadania jest następująca: + Punktacja za zadania jest następująca: - mniej niż 30 punktów - 2 - 30-34- 3 - 35-39- 3.5 @@ -21,8 +21,11 @@ Punktacja za zadania jest następująca: #### Wysyłanie zadań -Proszę pobrać te repozytorium i zmienić nazwę katalogu na daut2021-rano-sNRINDEKSU . NRINDEKSU proszę wpisać swój nr indeksu, np. daut2021-rano-s123456. +Proszę stworzyć prywatne repozytorium na https://git.wmi.amu.edu.pl/ o nazwie daut2021-po16-sNRINDEKSU oraz dać +prawa do odczytu użytkownikowi kubapok (prowadzący przedmiot). W NRINDEKSU proszę wpisać swój nr indeksu, np. daut2021-po16-s123456. +Następnie w swoim repozytorium proszę spullować niniejsze repozytorium: `git pull git@git.wmi.amu.edu.pl:kubapok/daut2021-po16.git` +W ten sposób będziemy aktualizować zadania co zajęcia. Proszę rozwiązać zadanie TASKX02 lub TASKX03 w zależności od numeru indeksu. W tym celu należy dodac plik `run.py` w odpowiednim katalogu. Za pomocą `run_reports.py` można sprwawdzić ilość punktów. @@ -30,15 +33,15 @@ w odpowiednim katalogu. Za pomocą `run_reports.py` można sprwawdzić ilość p Do repo proszę dodawać wyłącznie plik `run.py` w odpowiednim katalogu, chyba że w zadaniu jest zaznaczone inaczej. Proszę również nie modyfikować innych plików. -Wszystkie zadania należy robić w terminie zaznaczonym w `description.txt`. Po terminie będę podawał punktację w MS TEAMS. +Wszystkie zadania należy robić w terminie zaznaczonym w `description.txt`. Po terminie będę podawał punktację za pomocą USUSa w "sprawdziany". + +Zadania robimy do końca soboty poprzedzającej zajęcia #### Aktualizacja repozytorium We własnym repozytorium: -`git pull git@git.wmi.amu.edu.pl:kubapok/daut2021-rano.git` - - +`git pull git@git.wmi.amu.edu.pl:kubapok/daut2021-po16.git` ## Zajęcia Wyrażenia regularne 1 @@ -308,3 +311,11 @@ re.findall(r'^Ma', 'Ma kota Ala\nMa psa Jacek') re.findall(r'^Ma', 'Ma kota Ala\nMa psa Jacek', re.MULTILINE) ``` #### RE.COMPILE + +## Zajęcia 5 +https://www.openfst.org/twiki/bin/view/GRM/Thrax + +https://www.cs.jhu.edu/~jason/465/hw-ofst/hw-ofst.pdf + +Wszystkie zadania proszę robić na wzór `TaskH00`. Proszę umieszczać gramatykę w pliku `grammar.grm` oraz +opisywać finalną regułę nazwą `FinalRule`. diff --git a/TaskH00/description.txt b/TaskH00/description.txt new file mode 100644 index 0000000..51a8265 --- /dev/null +++ b/TaskH00/description.txt @@ -0,0 +1,9 @@ +Write a Thrax grammar which replaces all occurrences of Polish +inflected forms of the word "Legia" ("Legia", "Legią", "Legię", +"Legii") into the corresponding forms of the word "Lech" ("Lech", +"Lechem", "Lecha", "Lecha", respectively). + +The task has a solution already, do not solve it! + +POINTS: 1 +DEADLINE: 2022-02-06 16:00 diff --git a/TaskH00/grammar.grm b/TaskH00/grammar.grm new file mode 100644 index 0000000..c7fcf8d --- /dev/null +++ b/TaskH00/grammar.grm @@ -0,0 +1,44 @@ + +# zamiana końcówek, "i"/"ę" zgrupowane, bo zamieniamy na wspólną końcówkę +suffixes = ("a" : "") | ("i" | "ę" : "a") | ("ą" : "em"); + +# zamiana rdzenia +legia_to_lech_core = "Legi" : "Lech"; + +legia_to_lech = legia_to_lech_core suffixes; + +# Wszystkie możliwe znaki, niestety nie ma (?) prostszego sposobu. +# Zauważmy, że polskie znaki diakrytyczne będą reprezentowane +# tak naprawdę jako dwuznaki, nie stanowi to jednak problemu. +allChars = Optimize[ + "[1]" | "[2]" | "[3]" | "[4]" | "[5]" | "[6]" | "[7]" | "[8]" | "[9]" | "[10]" | + "[11]" | "[12]" | "[13]" | "[14]" | "[15]" | "[16]" | "[17]" | "[18]" | "[19]" | "[20]" | + "[21]" | "[22]" | "[23]" | "[24]" | "[25]" | "[26]" | "[27]" | "[28]" | "[29]" | "[30]" | + "[31]" | "[32]" | "[33]" | "[34]" | "[35]" | "[36]" | "[37]" | "[38]" | "[39]" | "[40]" | + "[41]" | "[42]" | "[43]" | "[44]" | "[45]" | "[46]" | "[47]" | "[48]" | "[49]" | "[50]" | + "[51]" | "[52]" | "[53]" | "[54]" | "[55]" | "[56]" | "[57]" | "[58]" | "[59]" | "[60]" | + "[61]" | "[62]" | "[63]" | "[64]" | "[65]" | "[66]" | "[67]" | "[68]" | "[69]" | "[70]" | + "[71]" | "[72]" | "[73]" | "[74]" | "[75]" | "[76]" | "[77]" | "[78]" | "[79]" | "[80]" | + "[81]" | "[82]" | "[83]" | "[84]" | "[85]" | "[86]" | "[87]" | "[88]" | "[89]" | "[90]" | + "[91]" | "[92]" | "[93]" | "[94]" | "[95]" | "[96]" | "[97]" | "[98]" | "[99]" | "[100]" | +"[101]" | "[102]" | "[103]" | "[104]" | "[105]" | "[106]" | "[107]" | "[108]" | "[109]" | "[110]" | +"[111]" | "[112]" | "[113]" | "[114]" | "[115]" | "[116]" | "[117]" | "[118]" | "[119]" | "[120]" | +"[121]" | "[122]" | "[123]" | "[124]" | "[125]" | "[126]" | "[127]" | "[128]" | "[129]" | "[130]" | +"[131]" | "[132]" | "[133]" | "[134]" | "[135]" | "[136]" | "[137]" | "[138]" | "[139]" | "[140]" | +"[141]" | "[142]" | "[143]" | "[144]" | "[145]" | "[146]" | "[147]" | "[148]" | "[149]" | "[150]" | +"[151]" | "[152]" | "[153]" | "[154]" | "[155]" | "[156]" | "[157]" | "[158]" | "[159]" | "[160]" | +"[161]" | "[162]" | "[163]" | "[164]" | "[165]" | "[166]" | "[167]" | "[168]" | "[169]" | "[170]" | +"[171]" | "[172]" | "[173]" | "[174]" | "[175]" | "[176]" | "[177]" | "[178]" | "[179]" | "[180]" | +"[181]" | "[182]" | "[183]" | "[184]" | "[185]" | "[186]" | "[187]" | "[188]" | "[189]" | "[190]" | +"[191]" | "[192]" | "[193]" | "[194]" | "[195]" | "[196]" | "[197]" | "[198]" | "[199]" | "[200]" | +"[201]" | "[202]" | "[203]" | "[204]" | "[205]" | "[206]" | "[207]" | "[208]" | "[209]" | "[210]" | +"[211]" | "[212]" | "[213]" | "[214]" | "[215]" | "[216]" | "[217]" | "[218]" | "[219]" | "[220]" | +"[221]" | "[222]" | "[223]" | "[224]" | "[225]" | "[226]" | "[227]" | "[228]" | "[229]" | "[230]" | +"[231]" | "[232]" | "[233]" | "[234]" | "[235]" | "[236]" | "[237]" | "[238]" | "[239]" | "[240]" | +"[241]" | "[242]" | "[243]" | "[244]" | "[245]" | "[246]" | "[247]" | "[248]" | "[249]" | "[250]" | +"[251]" | "[252]" | "[253]" | "[254]" | "[255]" +]; + + + +export FinalRule = Optimize[CDRewrite[legia_to_lech, "", "", allChars*]]; diff --git a/TaskH00/test.exp b/TaskH00/test.exp new file mode 100644 index 0000000..c9798c5 --- /dev/null +++ b/TaskH00/test.exp @@ -0,0 +1,6 @@ +Input string: Output string: Lech Warszawa +Input string: Output string: Górnik gra z Lechem +Input string: Output string: Lech Lecha Lecha Lechem +Input string: Output string: Lechxxxxx +Input string: Output string: tu nic nie ma do zamiany +Input string: \ No newline at end of file diff --git a/TaskH00/test.in b/TaskH00/test.in new file mode 100644 index 0000000..66ee623 --- /dev/null +++ b/TaskH00/test.in @@ -0,0 +1,5 @@ +Legia Warszawa +Górnik gra z Legią +Legia Legii Legię Legią +Legiaxxxxx +tu nic nie ma do zamiany diff --git a/TaskH01/description.txt b/TaskH01/description.txt new file mode 100644 index 0000000..02e7679 --- /dev/null +++ b/TaskH01/description.txt @@ -0,0 +1,8 @@ +Write a Thrax grammar which replaces all 0s to 1s and 1s to 0s (other +digits should not be changed). + +You can assume that only string composed of digits are given on the +input. + +POINTS: 4 +DEADLINE: 2022-02-06 16:00 diff --git a/TaskH01/test.exp b/TaskH01/test.exp new file mode 100644 index 0000000..aadf164 --- /dev/null +++ b/TaskH01/test.exp @@ -0,0 +1,6 @@ +Input string: Output string: 0023410 +Input string: Output string: 0101010 +Input string: Output string: 9999999 +Input string: Output string: 888088888888888 +Input string: Output string: 111 +Input string: \ No newline at end of file diff --git a/TaskH01/test.in b/TaskH01/test.in new file mode 100644 index 0000000..aa6a508 --- /dev/null +++ b/TaskH01/test.in @@ -0,0 +1,5 @@ +1123401 +1010101 +9999999 +888188888888888 +000 diff --git a/TaskH02/description.txt b/TaskH02/description.txt new file mode 100644 index 0000000..b6652c7 --- /dev/null +++ b/TaskH02/description.txt @@ -0,0 +1,7 @@ +Napisz gramatykę Thraxową, która usuwa wszystkie znaki z wyjątkiem +polskich liter (małych i wielkich) i spacji. Wielkie litery powinny +być zamieniane na małe. + + +POINTS: 4 +DEADLINE: 2022-02-06 16:00 diff --git a/TaskH02/test.exp b/TaskH02/test.exp new file mode 100644 index 0000000..95aa656 --- /dev/null +++ b/TaskH02/test.exp @@ -0,0 +1,6 @@ +Input string: Output string: ala ma kota +Input string: Output string: być albo nie być oto jest pytanie +Input string: Output string: przesada dwie laski dynamitu to by była przesada +Input string: Output string: róg rogi +Input string: Output string: rico żadnych testów jądrowych w bazie +Input string: \ No newline at end of file diff --git a/TaskH02/test.in b/TaskH02/test.in new file mode 100644 index 0000000..d365bcd --- /dev/null +++ b/TaskH02/test.in @@ -0,0 +1,5 @@ +Ala ma kota. +Być albo nie być, oto jest pytanie. +Przesada? Dwie laski dynamitu to by była przesada. +róg rogi +Rico, żadnych testów jądrowych w bazie! diff --git a/TaskH03/description.txt b/TaskH03/description.txt new file mode 100644 index 0000000..db562c5 --- /dev/null +++ b/TaskH03/description.txt @@ -0,0 +1,14 @@ +Zamiana cyfr z ułamkami na słowa +================================ + +Napisać gramatykę thraxową, która zamienia liczby z zakresu +od -999,999 od 999,999 na postać słowną. + +Zakładamy, że liczby nie mają zer nieznaczących. + +UWAGA! Zadanie przeznaczone dla studentów, których numer indeksu +dzieli się przez 7 z resztą 0. + +POINTS: 15 +DEADLINE: 2022-02-06 16:00 +REMAINDER: 0/7 diff --git a/TaskH03/test.exp b/TaskH03/test.exp new file mode 100644 index 0000000..a4cd366 --- /dev/null +++ b/TaskH03/test.exp @@ -0,0 +1,13 @@ +Input string: Output string: minus dziewięćset dziewięćdziesiąt dziewięć i dziewięćset dziewięćdziesiąt dziewięć tysięcznych +Input string: Output string: dziewięćset dziewięćdziesiąt dziewięć i dziewięćset dziewięćdziesiąt jeden tysięcznych +Input string: Output string: trzy i jedna dziesiąta +Input string: Output string: dwanaście i sześćdziesiąt siedem setnych +Input string: Output string: minus trzydzieści +Input string: Output string: minus trzydzieści pięć i sto dwadzieścia jeden tysięcznych +Input string: Output string: jedna dziesiąta +Input string: Output string: jedna setna +Input string: Output string: jedna tysięczna +Input string: Output string: zero +Input string: Output string: osiem i jedna setna +Input string: Output string: osiem i pięć setnych +Input string: \ No newline at end of file diff --git a/TaskH03/test.in b/TaskH03/test.in new file mode 100644 index 0000000..cecf938 --- /dev/null +++ b/TaskH03/test.in @@ -0,0 +1,12 @@ +-999,999 +999,991 +3,1 +12,67 +-30 +-35,121 +0,1 +0,01 +0,001 +0 +8,01 +8,05 diff --git a/TaskH04/description.txt b/TaskH04/description.txt new file mode 100644 index 0000000..4d9f876 --- /dev/null +++ b/TaskH04/description.txt @@ -0,0 +1,15 @@ +Zamiana cyfr na słowa polskie +============================= + +Napisać gramatykę thraxową, która zamienia liczby całkowite pisane +cyframi z zakresu od -999999999 do 999999999 na postać słowną (po +polsku). + +Zakładamy, że liczby nie mają zer nieznaczących. + +UWAGA! Zadanie przeznaczone dla studentów, których numer indeksu +dzieli się przez 7 z resztą 1. + +POINTS: 15 +DEADLINE: 2022-02-06 16:00 +REMAINDER: 1/7 diff --git a/TaskH04/test.exp b/TaskH04/test.exp new file mode 100644 index 0000000..6af55e3 --- /dev/null +++ b/TaskH04/test.exp @@ -0,0 +1,11 @@ +Input string: Output string: dwanaście tysięcy trzysta czterdzieści pięć +Input string: Output string: zero +Input string: Output string: minus dziewięćset dziewięćdziesiąt dziewięć milionów dziewięćset dziewięćdziesiąt dziewięć tysięcy dziewięćset dziewięćdziesiąt dziewięć +Input string: Output string: tysiąc osiemset dziewięć +Input string: Output string: minus dwanaście +Input string: Output string: trzy tysiące dziewięćdziesiąt osiem +Input string: Output string: trzy miliony +Input string: Output string: osiem +Input string: Output string: dwadzieścia dwa +Input string: Output string: milion jeden +Input string: \ No newline at end of file diff --git a/TaskH04/test.in b/TaskH04/test.in new file mode 100644 index 0000000..e659f5b --- /dev/null +++ b/TaskH04/test.in @@ -0,0 +1,10 @@ +12345 +0 +-999999999 +1809 +-12 +3098 +3000000 +8 +22 +1000001 diff --git a/TaskH05/description.txt b/TaskH05/description.txt new file mode 100644 index 0000000..ce72b45 --- /dev/null +++ b/TaskH05/description.txt @@ -0,0 +1,29 @@ +Podział na sylaby +================= + +Napisać gramatykę thraxową, która dzieli wyraz na sylaby. Zakładamy, +że na wejściu podawane polskie wyrazy (tj. ciągi małych liter, +włącznie z polskimi znakami diakrytycznymi). Należy zaznaczyć podział +na sylaby (przez dodanie spacji). + +Założenia: +- preferujemy taki podział, by sylaba kończyła się i zaczynała spółgłoską, + np. "parter" dzielimy na "par ter", +- w przypadku zbitek więcej niż dwóch spółgłosek, pierwsza spółgłoska + powinna zostać włączona do lewej sylaby, pozostałe — do prawej sylaby + np. "bartnik" dzielimy na "bar tnik", +- pojedynczą spółgłoską dołączamy do prawej sylaby, +- pamiętamy przy tym, że niektóre głoski oddajemy za pomocą dwuznaków, + np. "szczebrzeszyn" dzielimy na "szczeb rze szyn", +- pamiętamy, że zbitki typu "ia" to jedna samogłoska. + +(Powyższe założenia to oczywiście tylko przybliżenie poprawnej definicji + sylaby). + + +UWAGA! Zadanie przeznaczone dla studentów, których numer indeksu +dzieli się przez 7 z resztą 2. + +POINTS: 15 +DEADLINE: 2022-02-06 16:00 +REMAINDER: 2/7 diff --git a/TaskH05/test.exp b/TaskH05/test.exp new file mode 100644 index 0000000..f3fef8c --- /dev/null +++ b/TaskH05/test.exp @@ -0,0 +1,8 @@ +Input string: Output string: par ter +Input string: Output string: bar ter +Input string: Output string: bar tnik +Input string: Output string: szczeb rze szyn +Input string: Output string: most +Input string: Output string: ma nia kal nie +Input string: Output string: a pos tro ficz ny +Input string: \ No newline at end of file diff --git a/TaskH05/test.in b/TaskH05/test.in new file mode 100644 index 0000000..c00679a --- /dev/null +++ b/TaskH05/test.in @@ -0,0 +1,7 @@ +parter +barter +bartnik +szczebrzeszyn +most +maniakalnie +apostroficzny diff --git a/TaskH06/description.txt b/TaskH06/description.txt new file mode 100644 index 0000000..094c1ea --- /dev/null +++ b/TaskH06/description.txt @@ -0,0 +1,25 @@ +Korektor gramatyczny +==================== + +Napisać gramatykę thraxową, która dokona prostej korekty gramatycznej, tj.: + +* wstawi brakujący przecinek przed formami zaimków "jaki" i "który", +* ... z uwzględnieniem przyimków (także przyimka złożonego "odnośnie do") + — wtedy przecinek powinien być przed przyimkiem, +* zamieni "odnośnie" (bez "do") na "odnośnie do", +* zamieni "w każdym bądź razie" na "w każdym razie", +* zamieni formy typu "12 marzec" (nazwa miesiąca w mianowniku) na "12 + marca" (nazwa miesiąc w dopełniaczu). + +Należy uwzględnić też przypadki, gdy powyższe konstrukcje pisane są +wielką literą (na początku zdania). + +Zakładamy, że wejściowy tekst może zawierać duże i wielkie litery +polskiego alfabetu, spacje, przecinki, kropki i znaki zapytania. + +UWAGA! Zadanie przeznaczone dla studentów, których numer indeksu +dzieli się przez 7 z resztą 3. + +POINTS: 15 +DEADLINE: 2022-02-06 16:00 +REMAINDER: 3/7 diff --git a/TaskH06/test.exp b/TaskH06/test.exp new file mode 100644 index 0000000..bcdc2b0 --- /dev/null +++ b/TaskH06/test.exp @@ -0,0 +1,13 @@ +Input string: Output string: Jaki człowiek wie, w którym roku urodził się Mozart? +Input string: Output string: Jaki człowiek wie, w którym roku urodził się Mozart? +Input string: Output string: Powiedz, jaki człowiek wie, w którym roku urodził się Mozart? +Input string: Output string: sprawa, odnośnie do której się pytam +Input string: Output string: Odnośnie do tego +Input string: Output string: do tyłu, tak zrobili wtedy +Input string: Output string: w każdym razie, człowiek, który grał na pianinie +Input string: Output string: cofnęliby się 31 stycznia +Input string: Output string: to był 1 października 2012 +Input string: Output string: to był 2 października 2012 +Input string: Output string: W każdym razie, stało się to 28 lutego +Input string: Output string: odnośnie do wydarzeń, które przypadły na 29 września +Input string: \ No newline at end of file diff --git a/TaskH06/test.in b/TaskH06/test.in new file mode 100644 index 0000000..c9a7811 --- /dev/null +++ b/TaskH06/test.in @@ -0,0 +1,12 @@ +Jaki człowiek wie, w którym roku urodził się Mozart? +Jaki człowiek wie w którym roku urodził się Mozart? +Powiedz jaki człowiek wie w którym roku urodził się Mozart? +sprawa odnośnie której się pytam +Odnośnie tego +do tyłu, tak zrobili wtedy +w każdym bądź razie, człowiek który grał na pianinie +cofnęliby się 31 styczeń +to był 1 październik 2012 +to był 2 październik 2012 +W każdym bądź razie, stało się to 28 luty +odnośnie wydarzeń które przypadły na 29 wrzesień diff --git a/TaskH07/description.txt b/TaskH07/description.txt new file mode 100644 index 0000000..bcd1000 --- /dev/null +++ b/TaskH07/description.txt @@ -0,0 +1,32 @@ +Wymowa +====== + +Napisać gramatykę thraxową, która przekształca tekst polski do jego +zapisu "fonetycznego", tj.: + +* "rz" na "ż" (chyba że po "t" i "p" — wówczas na "sz"), "ch" na "h", "ó" na "u", +* wyjątkowo w formach wyrazu "marznąć" nie zamieniamy "rz" na "ż", +* "ę" na "en", chyba że na końcu wyrazu lub przed "ł" — wówczas jako "e" +" "ą" na "on", chyba że na końcu wyrazu — wówczas zostaje "ą", +* oddajemy rzeczywistą wymowę na końcu bezdźwięcznych spółgłosek, + np. "g" na końcu wyrazu zamienia na "k" +* w przypadku zbitek "i" z samogłoską zmiękczamy poprzedzającą + samogłoskę (np. "siano" na "śano"), w przeciwnym razie + zamieniamy "i" na "j" ("bieda" na "bjeda"), +* zbitki typu "ci" zamieniamy na "ć", np. "zima" na "źima", wyjątki: + "sinus" i formy przymiotnika "silikonowy", +* wszystkie wielkie litery należy zamienić na małe, +* znaki interpunkcyjne należy usunąć. + +(Oczywiście to tylko przybliżenie rzeczywistej transkrypcji +fonetycznej). + +Zakładamy, że wejściowy tekst może zawierać duże i wielkie litery +polskiego alfabetu, spacje, przecinki, kropki i znaki zapytania. + +UWAGA! Zadanie przeznaczone dla studentów, których numer indeksu +dzieli się przez 7 z resztą 4. + +POINTS: 15 +DEADLINE: 2022-02-06 16:00 +REMAINDER: 4/7 diff --git a/TaskH07/test.exp b/TaskH07/test.exp new file mode 100644 index 0000000..1e018f7 --- /dev/null +++ b/TaskH07/test.exp @@ -0,0 +1,12 @@ +Input string: Output string: ala ma kota +Input string: Output string: być albo ńe być oto jest pytańe +Input string: Output string: żeby hrońić informacje zainteresowane państwa podjeły ruwńeż dźałańa psyhologiczne +Input string: Output string: marzne bo ńe mjeli silikonu +Input string: Output string: pjorun kulisty wyglondem pszypomina śwjetlistą kule o średńicy od kilku do kilkudźeśenću centymetruf +Input string: Output string: renką +Input string: Output string: pewnego dńa zrozumjesz że w żyću jest tylko jeden uńiwersalny jenzyk śiła i matematyka +Input string: Output string: pszesada dwje laski dynamitu to by była pszesada +Input string: Output string: ruk rogi +Input string: Output string: rico żadnyh testuf jondrowyh w baźe +Input string: Output string: ńe dawać na sztywno +Input string: \ No newline at end of file diff --git a/TaskH07/test.in b/TaskH07/test.in new file mode 100644 index 0000000..1b4264c --- /dev/null +++ b/TaskH07/test.in @@ -0,0 +1,11 @@ +Ala ma kota. +Być albo nie być, oto jest pytanie. +Żeby chronić informacje zainteresowane państwa podjęły również działania psychologiczne. +Marznę, bo nie mieli silikonu. +Piorun kulisty wyglądem przypomina świetlistą kulę o średnicy od kilku do kilkudziesięciu centymetrów. +ręką +Pewnego dnia zrozumiesz, że w życiu jest tylko jeden uniwersalny język siła. I matematyka. +Przesada? Dwie laski dynamitu to by była przesada. +róg rogi +Rico, żadnych testów jądrowych w bazie! +nie dawać na sztywno diff --git a/TaskH08/description.txt b/TaskH08/description.txt new file mode 100644 index 0000000..a5b4c66 --- /dev/null +++ b/TaskH08/description.txt @@ -0,0 +1,29 @@ +Rozwijanie skrótów +================== + +Napisać gramatykę thraxową, która rozwija skróty poprzedzające +imiona/nazwiska, tj.: "prof.", "dr", "hab.", "ks.", "mgr", +"inż.", także formy typu "dra", "mgrowi". Skróty "dr" i "mgr" +mogą być opcjonalnie zakończone kropką. + + +Domyślnie należy zamieniać skróty na formę podstawową (mianownik), +chyba że: + +* skróty typu "dra" i "mgrowi" należy rozwijać do odpowiednich form (np. "doktora", "magistrowi"), + także towarzyszące im inne skróty; +* możemy odgadnąć formę po imieniu następującym po skrócie lub ciągu skrótów, + należy uwzględnić przynajmniej 20 częstych imion męskich +* możemy odgadnąć formę po nazwisku występującym po skrócie lub ciągu skrótów lub jeden wyraz dalej + uwzględniamy nazwiska "Nowak", "Kaczmarek" oraz nazwiska zakończone na "-ski", "-cki", "-owicz"; +* możemy odgadnąć forme po poprzedzającym przyimku. + +Zakładamy, że wejściowy tekst może zawierać duże i wielkie litery +polskiego alfabetu, spacje, przecinki, kropki i znaki zapytania. + +UWAGA! Zadanie przeznaczone dla studentów, których numer indeksu +dzieli się przez 7 z resztą 5. + +POINTS: 15 +DEADLINE: 2022-02-06 16:00 +REMAINDER: 5/7 diff --git a/TaskH08/test.exp b/TaskH08/test.exp new file mode 100644 index 0000000..b4f296e --- /dev/null +++ b/TaskH08/test.exp @@ -0,0 +1,13 @@ +Input string: Output string: Widzę księdza profesora Mateusza Kusia, jak rozmawia z doktorem inżynierem jak mu tam było. +Input string: Output string: profesor doktor habilitowany ksiądz magister inżynier +Input string: Output string: profesor habilitowany hahahaha +Input string: Output string: od profesora habilitowanego hahahaha +Input string: Output string: doktor Michał Rrrrrrrr +Input string: Output string: doktora Michała Rrrrrrrr +Input string: Output string: doktor Michał Rrrrrrrr +Input string: Output string: doktora Michała Rrrrrrrr +Input string: Output string: profesor Pasem Ratunkowym +Input string: Output string: profesorem Pasem Kaczmarkiem +Input string: Output string: doktor habilitowany Rups Koźlarski doktora habilitowanego Rups Koźlarskiego +Input string: Output string: dramat wyprof. +Input string: \ No newline at end of file diff --git a/TaskH08/test.in b/TaskH08/test.in new file mode 100644 index 0000000..22def43 --- /dev/null +++ b/TaskH08/test.in @@ -0,0 +1,12 @@ +Widzę ks. prof. Mateusza Kusia, jak rozmawia z drem inż. jak mu tam było. +prof. dr hab. ks. mgr inż. +prof. hab. hahahaha +od prof. hab. hahahaha +dr Michał Rrrrrrrr +dr Michała Rrrrrrrr +dr. Michał Rrrrrrrr +dr. Michała Rrrrrrrr +prof. Pasem Ratunkowym +prof. Pasem Kaczmarkiem +dr hab. Rups Koźlarski dr hab. Rups Koźlarskiego +dramat wyprof. diff --git a/TaskH09/description.txt b/TaskH09/description.txt new file mode 100644 index 0000000..42c1bef --- /dev/null +++ b/TaskH09/description.txt @@ -0,0 +1,33 @@ +Tłumacz polsko-poznański +======================== + +Napisać gramatykę thraxową, która przekształca tekst polski na wersję poznańską +Uwzględnić zamiany (wraz z formami fleksyjnymi): + +* "tramwaj"/"bimba", +* "pieniądze"/"bejmy", +* "ludzie"/"wiaruchna", +* "zamknąć na klucz"/"zakluczyć", +* "nacisnąć"/"nadusić", +* "czerwona kapusta"/"modra kapusta", + +W co trzeci wyraz (zaczynając od początku) należy wstawić wyraz "tej". + +Przy zamianie rodzaju/liczby (np. "tramwaj" na "bimba") należy zmienić: + +* formę przymiotnika poprzedzającą wyraz (uwzględniamy regularne + przymiotniki zakończone na "-y"), +* formę przymiotnika następującego po wyrazie (uwzględniamy regularne + przymiotniki zakończone na "-y"), +* formę czasownika następującego po mianowniku lub jeden wyraz dalej + (uwzględniamy regularne formy czasu przeszłego). + +Zakładamy, że wejściowy tekst może zawierać duże i wielkie litery +polskiego alfabetu i spacje. + +UWAGA! Zadanie przeznaczone dla studentów, których numer indeksu +dzieli się przez 7 z resztą 6. + +POINTS: 15 +DEADLINE: 2022-02-06 16:00 +REMAINDER: 6/7 diff --git a/TaskH09/test.exp b/TaskH09/test.exp new file mode 100644 index 0000000..1214163 --- /dev/null +++ b/TaskH09/test.exp @@ -0,0 +1,7 @@ +Input string: Output string: tej Czerwona bimba tej przyjechała i tej zielony autobus tej odjechał +Input string: Output string: tej Wiaruchna zakluczyła tej modrą kapustę tej +Input string: Output string: tej Ci dziwna tej wiaruchna to tej chyba +Input string: Output string: tej Bimbą jechał tej i nadusił tej przycisk +Input string: Output string: tej Bejmy były tej zakluczone +Input string: Output string: tej Bimba dzisiaj tej odblablowała +Input string: \ No newline at end of file diff --git a/TaskH09/test.in b/TaskH09/test.in new file mode 100644 index 0000000..25df72a --- /dev/null +++ b/TaskH09/test.in @@ -0,0 +1,6 @@ +Czerwony tramwaj przyjechał i zielony autobus odjechał +Ludzie zamknęli na klucz czerwoną kapustę +Ci dziwni ludzie to chyba +Tramwajem jechał i nacisnął przycisk +Pieniądze były zamknięte na klucz +Tramwaj dzisiaj odblablował diff --git a/run_report.py b/run_report.py index 7df9a08..47b7e16 100644 --- a/run_report.py +++ b/run_report.py @@ -10,9 +10,15 @@ def execute_task(dir): try: with open(Path(dir,f'{task_set}.in')) as f_in, open(Path(dir,f'{task_set}.out'), 'w') as f_out: arg = [x for x in dir.iterdir() if str(x).endswith(f'{task_set}.arg')] - command = ['python3' ,Path(dir,'run.py')] - if len(arg) != 0: - command.append(arg[0]) + if str(dir).startswith('TaskH'): + compilation_command = ['thraxcompiler', f'--input_grammar={Path(dir,"grammar.grm")}', f'--output_far={Path(dir,"grammar.far")}'] + process = subprocess.Popen(compilation_command, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + process.wait() + command = ['thraxrewrite-tester', f'--far={Path(dir,"grammar.far")}', f'--rules=FinalRule'] + else: + command = ['python3' ,Path(dir,'run.py')] + if len(arg) != 0: + command.append(arg[0]) process = subprocess.Popen(command, stdin=f_in, stdout=f_out, diff --git a/thrax_example.grm b/thrax_example.grm new file mode 100644 index 0000000..eeb6fb4 --- /dev/null +++ b/thrax_example.grm @@ -0,0 +1,13 @@ +# thraxcompiler --input_grammar=thrax_example.grm --output_far=example.far +# thraxrewrite-tester --far=example.far --rules=First +# +# przykłady z https://www.cs.jhu.edu/~jason/465/hw-ofst/hw-ofst.pdf + +Zero = "0"; +One = "1"; +Bit = Zero | One; + +export First = Optimize[Zero Zero* Bit* One One One One?]; + +export Second = Optimize[ (Zero One (One One)* )* | (One (One One)* Zero )* | Zero* | (Zero One (One One)* Zero )* ]; +export Third = Optimize["a" (("b":"x")+ | ("c"+ : "y") | ("":"fric")) "a"];