Stránka 1 z 1

11.6.2015 - titulky

Napsal: 11. 6. 2015 22:08
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)

Re: 11.6.2015 - titulky

Napsal: 11. 6. 2015 22:54
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 ;)

Re: 11.6.2015 - titulky

Napsal: 24. 6. 2015 17:37
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.