11.6.2015 - titulky

Seznámení se základními principy operačního systému UNIX, převážně z uživatelského hlediska. Absolvent kurzu by měl být schopen napsat netriviální program v shellu.
někdo

11.6.2015 - titulky

Příspěvek od někdo »

Titulky
=======

volani programu:

titulky.sh -d dict1 -d dict2 -d dictn file1 file2 file3

kde -d dict1 vašemu programu řekne, že textový soubor dict1 má načíst jako slovník, co je to později.
A zbytek soubory file1 ... fileN načíst jako titulky k filmu(ům). Ty jsou v tomto formátu:

{20758}{20930}HELLO WORLD, BILL IS A YELLOW EXCAVATOR FROM USA. BUT|OUR JANE IS TOO!

kde první dvě čísla, bez mezer uzavřená do { a } značí počáteční a konečný frame titulků, hned po nich
(bez mezery) následují slova titulků, která obsahují písmena anglické abecedy a znaky z
množiny ,!?.' (a možná nějaké další, neškodné).

Vaším úkolem je upravit soubory file1...filen tak, aby vypadaly takto:

{20758}{20930}Hello world, Bill is a yellow excavator from USA. But|our Jane is too!

Tedy udělat vše malými písmeny, až na začátky vět, vlastní jména(Jane) a zkratky (USA).
Má to ovšem háček - Billa. "bill" je totiž také účet, a tedy u slova "BILL" nemůžeme
rozhodnout jestli má být velkými nebo malými. V tomto případě má váš program do logu
nebo na výstup vypsat že na této řádce si nebyl jistý a nechat "Bill".
(Film o účetním Billovi je tedy tomuto skriptu pravým nepřítelem)

Máte k tomu dispozici slovníky, které jsou ve formátu
slovo s
slovo2 v
slovo3 sv
ZKRTKA
MUDr.
knife s knives
read v reads read read

Kde první sloupec je slovo v "holém" tvaru, druhý sloupec jsou všechny slovní druhy,
které může nabývat - substantivum, verbum, a další (tato jsou zajímavá).

Pokud je slovo nepravidelné a je to podstatné jméno, má uvedené ještě další slovo (knives),
což je tvar množného čísla.

Pro pravidelná podstatná jména používáme vždy koncovku -s nebo -es (pokud slovo
končí -s, -sh, -x) a nebo -ies, pokud slovo končí -y a před y je souhláska (spoluhláska SK).

Pokud je sloveso nepravidelné, má uvedené další tři tvary - 3.os - trpný rod - příčestí minulé

Jinak může nabývat koncovek -ied (opět y, viz výše), -d (pokud končí na -e) nebo -ed.

( anglické skloňování vysvětloval asi 15 minut, tohle je rychlý výcuc :-) )

Zkratky jsou ve slovnících také, poznáme je tak, že neobsahují žádné další slovo na řádce.
(čili např. MUDr. nebo ZKRTKA)

Poznámky & požadavky:
=====================
1) program musí skončit ještě dnes
2) celý slovník se nám vejde do paměti... i dvakrát :-)
3) ve slovnících se nevyskytují kolize (takové, že by jeden uváděl see - seed, a druhý see - saw)
4) ve slovnících se ale může jedno slovo vyskytovat vícekrát (protože může být zároveň nepravidelné
sloveso i nepravidelné podstatné jméno), potom bude na oddělených řádkách s přísl. druhým sloupcem (s/v)
// pro fajnšmekry 5) přemýšlejte, jaké je lepší řešení v závislosti velikostí slovníků a souborů s titulky

Řešení:
=======
1) shell běží pomalu, hodně pomalu, ale přinejhorším je možné psát program v shellu

2) lepší řešení je psát program v awk, použít jeho asociativní pole jako slovník

4) pozor, aby jste nevyrobili (až budete zkoušet všechny konverze na -ies apod.) z podstatného jména sloveso
nebo vice versa

5) slijte všechny slovníky do jednoho

6) pamatujte na to, že awk může mít pouze 10 souborů najednou otevřených, a zavírejte po sobě

7) já osobně jsem v awk psal celý program v BEGINu pomocí funkce getline (která není ve všech awk) a nebyl
s tím žádný problém

8) slovník můžete postavit jakkoli, vejde se do paměti a proto je jedno, jestli rovnou všechny tvary přidáte
jako slova nebo pro každé slovo koumáte všechny tvary a zkoušíte (zde je závislost rychlosti na
velikosti souborů dict a file z bodu číslo 5)

3) všeho bylo třeba s mírou, netrhal hlavy ani když člověk zapomněl, že větu neukončují jenom tečky
kterým se dostane speciální péče právě díky zkratkám jako MUDr. , které tečkou končí, ale také
vykřičníky a otazníky :-) Takové a podobné rozumné nedostatky programu byly přehlédnuty a
dokonce ani nebránily jedničce :-)

Úspěšnost na závěr: Forst říkal, že tato úloha byla techničtější, můžete posoudit sami,
z 22 lidí to přibližně: 6-7 udělalo na jedničku, 3-4 na dvojku, 3 na trojku, se 3 mluvil,
3 neudělali a 3 odešli během. (čísla jsou odhadnutá, ale odpovídají plus mínus)
PObdr
Site Admin
Příspěvky: 11
Registrován: 5. 10. 2014 00:54
Typ studia: Informatika Bc.

Re: 11.6.2015 - titulky

Příspěvek od PObdr »

Z těch, co s nimi mluvil byla 1x1, 1x2, 2x3 (celkem 4 lidi).

P.S. I na jednicku stacilo reseni v shellu ;)
nikdo

Re: 11.6.2015 - titulky

Příspěvek od nikdo »

Ještě přihodím pár poznatků, který by se mohly někomu hodit:

1) Téměř celý program jsem psal v awk.

2) Používal jsem v awk i funkce tolower, toupper a close, které nejsou standardem. Nebyl s tím žádný problém.

3) Skript jsem nestihl dokončit (o cca 5-10 minut), ale v posledních pár vteřinách jsem na papír Forstovi vypsal, co konkrétně chybí a jak to zhruba udělat.

4) Zapomněl jsem na pár detailů (např. jsem vůbec neřešil apostrofy). Ani to Forstovi nevadilo.

Přes to všechno se mi podařilo získat jedničku.
Odpovědět

Zpět na „SWI095 Úvod do UNIXu“