Zkouška 18.6.2007 - expdbf

Flavius

Zkouška 18.6.2007 - expdbf

Příspěvek od Flavius »

Včerejší zkouška byla v porovnání s ostatními docela easy:

Máme nějaký soubor ve formátu dbf, což znamená:
- prvních 32 bytů nějaký bordel
- pak vždycky 8 bytů název sloupce tabulky, 8 bytů bordel, 1 byte šířka sloupce tabulky (0-255 znaků), 15 bytů bordel
- znak 0x0D
- data: 1 znak buď mezera (řádek je platný), 0x21 (konec tabulky) nebo cokoliv jiného (neplatný řádek)
- data řádku (podle sloupců, bez oddělovačů).

Úkol: máme expdbf soubor.dbf [ -d : ] "jmeno,rc,index" (názvy sloupců - v tabulce jsou sloupce třeba rc, jmeno, pohlavi, index, blabla, bleble...) a chceme vytvořit soubor, ve kterém jsou data z těch sloupců, které jsme dostali jako parametr oddělená oddělovačem v řádcích.
Taky, když je na začátku nebo na konci nějakých dat (včetně názvu sloupce) posloupnost mezer, tak ji odebrat (je to jenom zarovnání).

Problém je, že ten soubor.dbf nemá žádné newliny, takže kdybychom se ho pokusili třeba ho poslat sedu, tak ten se pokusí načíst 2GB řádku a to se mu do paměti nevejde.

Omezení: soubor nesmíme číst O(n) krát - tzn. pomocí headu ho postupně ukrajovat.

Řešení:
a) napověděl nám, že můžeme použít split - akorát ten zvládne soubor rozdělit na max. 26x26 menších souborů, takže pokud jsou ty moc velké, tak zase splitovat... čili O(log n). A jakmile se dostaneme na vhodnou velikost, tak už to do té paměti nějak narveme.
Mnozí to pochopili tak, že si načetli délku řádky z hlavičky a pak si to rozdělili na 26x26 - 1 řádek, přičemž poslední soubor je velký. Tenhle postup (ačkoliv je v O(n/600) nakonec uznával, protože jinak by vyhodil moc lidí).
b) já jsem to dělal tím způsobem, že jsem si nejdříve vykuchal hlavičku a pak jsem zbytek projížděl awkem po znacích (RS=""), rovnou vyhazoval neplatné řádky a vždy po délce řádky + 1 jsem tam hodil newline. A pak jsem to jenom nacpal do sedu a vybral si z toho vhodné sloupce a naházel mezi ně oddělovače. Myslím, že takhle to bylo mnohem jednodušší.

Výsledky: Mne poslal s jedničkou rovnou domů, jednoho týpka s trojkou taky rovnou, tři vyhodil (s tím, že jim dal každému minutu proslov o tom, v čem se mají zlepšit), tři si pozval na krátké posezení a tři na delší. Přesné výsledky nevím, ale asi tak...
Flavius

dodatek:

Příspěvek od Flavius »

Na tabuli napsal možnosti:
30: 4 hlasy
36: 4 hlasy
38: 3 hlady

Takže to bylo vcelku sporné a tak řekl, že sám vybere ten, který se mu líbí nejvíce.
Odpovědět

Zpět na „2006“