Facebook puzzles

Facebook puzzles

Máte rádi hádanky? Baví vás programování? Řešíte rádi problémy, které nejsou tak úplně triviální? Dokážete se nad problémem zamyslet, pochopit ho, rozložit si ho na menší celky, zanalyzovat a navrhnout nejoptimálnější řešení. Chápete, že pro řazení pole s miliónem prvků pomocí buble sortu je bláznovství a naopak, že pro pětiprvkové pole je quicksort overkill? Pak tu pro vás něco mám…

O co jde?

Facebook puzzles je v současné době necelá dvacítka zajímavých zadání programů, které můžete implementovat v různých programovacích jazycích a nechat si je vyhodnotit automatickým Puzzle robotem. Akceptovaných jazyků je devět! Jsou to jazyky kompilované i interpretované.

K čemu je to dobrý?

V prvé řadě je to zábava. Nevím jak vás, ale mě baví týrat si mozek a hledat optimální postup a algoritmy pro vyřešení zajímavého problému. Zadaní opravdu nejsou triviální a vyžadují určitou míru studia problému a skýtají tedy příležitost naučit se něčemu novému.

Motivace?

Moje motivace byla zlepšení svých programátorských schopností v Pythonu a zároveň zabití chvíle volného času nějakou alespoň trochu smysluplnější činností, než sledováním seriálů.

Ze strany Facebooku je motivace docela zřejmá. Jde o velkou rychle rostoucí společnost s celosvětovou působností. Z toho plyne velká potřeba nových zaměstnanců. Jak rychle a snadno získat kvalitní programátory? Stačí vyvěsit pár zadání zajímavých problémů na web, vytvořit vyhodnocovacího robota a pak už si jenom vybrat ty nejlepší řešitele.

Zadání/Úkoly

Zadání mají celkem 4 stupně obtížnosti: Hors d’oeuvre, Snack, Meal a Buffet. První stupeň obtížnosti ani nestojí za řeč. Jde o dvě primitivní zadání, jejíž účelem je dát zájemcům možnost vyzkoušet si systém zasílání řešení a jejich vyhodnocování. Zato na úrovni Snack už začíná sranda.

Ač se to možná nezdá, už v úrovni Snack najdete zadání, která budou pro velkou většinu svátečních programátorů poměrně hardcore. V zadáních najdete různé klasické programátorské problémy u kterých první řešení, které vás napadne většinou není to ideální.

Jeden příklad za všechny puzzle It’s A Small World. Na první pohled to může vypadat jednoduše, ale je třeba si uvědomit, že se po Vás požaduje program, jehož asymptotická složitost bude menší než kvadratická a zároveň bude program efektivně využívat systémové zdroje. V samotném zadání máte uvedeno, že váš program by měl být schopný efektivně pracovat na obrovském množství prvků. Tento konkrétní příklad je klasický problém hledání k-nejbližších sousedů. Další zadání pokrývají další problémy. Takže o zábavu má člověk postaráno a nuda nehrozí.

A jak jsem na tom já?

Na „puclíky“ jsem narazil asi před týdnem. Zatím jsem měl čas vyřešit pouze první tři zadání (Hoppity Hop!, Meep meep!, Liar, Liar) všechny úspěšně. Řešení tvořím v Pythonu. Původně jsem chtěl řešení programovat v C, ale v tom na rozdíl od Pythonu píši často, takže jsem nakonec zvolil Python ;) Baví mě to, je to pro mě smysluplná zábava a zajímavá výzva. Ale neberu to vážně v tom smyslu, že bych musel za každou cenu vyřešit všechno a tak, aby to bylo opravdu to nejoptimálnější. Takový přístup by byl, pro tyto skripty které nemají možnosti nějakého dalšího využití, poměrně zbytečný. Ale pokud jste z těch, co mají zájem o místo ve Facebooku, tak si s tím možná dáte větší práci :)

V diskuzi uvítám Vaše názory a zkušenosti, díky.

Comments are closed.