NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
David Hartinger
Vlastník
Avatar
David Hartinger:25.11.2013 18:07

Tento týden jsme pro vás připravili velkou předvánoční programátorskou soutěž!

A protože se vánoce kvapem blíží, bude tentokrát nejlepší dílko oceněno nejen plackou, ale i knihou, která by neměla chybět v knihovně žádného programátora.
Jedná se o "Umění programování - 1. díl" od D.E. Knutha, otce a de facto zakladatele moderní analýzy algoritmů.
http://neoluxor.cz/…-dil--15741/

Co bude vaším úkolem?

Musíte napsat program, který pomůže vyřešit velkou Santovu vánoční hádanku.
Mějte však na paměti, že snadné řešení nemusí být to, které získá hlavní cenu.
Váš program může být v libovolném jazyce, pokud je volně dostupný interpret nebo kompilátor.
Program by také neměl mít k dispozici žádné další informace kromě těch, které jsou přímo v zadání.

Body navíc můžete získat za hezké a elegantní řešení.
Body dolů půjdou za chyby v kódu, dlouhou dobu výpočtu nebo specializovaná řešení, která se zhroutí při malé změně zadání.

Svá řešení posílejte jako soukromou zprávu na účet coells

Poslední termín na odevzdání řešení je 6.12.2013.

A teď už k samotné úloze - napište program, který vyřeší následující úlohu:

Santova hádanka

Santa má z vánoc velkou hlavu.
Od té doby, co má svůj seznam dětí uložený v počítači, to jde od deseti k pěti.
Zrovna tenhle týden se počítač zhroutil a Santovi skřítci-administrátoři zachránili pouze část dat.

Santa ví, že:

  1. V ulici je pět domů, každý dům má jinou barvu.
  2. V každém z pěti domů je dítě, které se jmenuje jinak než ostatní.
  3. Každé dítě má svůj oblíbený nápoj, vlastní jiného mazlíčka a k vánocům dostane jiný dárek.

A protože jedno z dětí celý rok jenom zlobilo, dostane k vánocům pouze uhlí!

Otázka: Které z dětí tak moc zlobilo?

Data, která se podařilo zachránit, obsahují:

  1. Tonda žije v bílém domě
  2. Maruska si k vánocům přeje počítačovou hru
  3. Pepík nejraději pije fantu
  4. Žlutý dům stojí hned nalevo od zeleného
  5. Dítě ve žlutém domě pořád pije pepsi
  6. Dítě, které chová hada, chce k vánocům kopací míč
  7. Dítě v červeném domě chová psa
  8. Dítě žijící v prostředním domě pije sprite
  9. Anička žije v prvním domě
  10. Dítě, které chová křečka, žije vedle dítěte, které si přeje stavebnici
  11. Dítě, které dostane ponožky, žije vedle dítěte, které chová psa
  12. Dítě, které chová rybičky, nejraději pije džus
  13. Petřík chová kočku
  14. Anička žije vedle modrého domu
  15. Dítě, které chová křečka, žije vedle dítěte, které pije jenom coca-colu

Autoři správných řešení získávají placku a samolepky, jak je u soutěží zvykem. Autor nejlepšího řešení navíc získává slavnou knihu Umění programování. Dokážete hádanku vyřešit?

Editováno 25.11.2013 18:49
Odpovědět
25.11.2013 18:07
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
Neaktivní uživatel:25.11.2013 18:12

To nespočítám ani na papíře.. :D :D

(možná jo.. :D)

Nahoru Odpovědět
25.11.2013 18:12
Neaktivní uživatelský účet
Avatar
Odpovídá na David Hartinger
Zdeněk Pavlátka:25.11.2013 18:17

Tohle je hádanka, kterou vymyslel Einstein. :D Tohle je samozřejmě upravená verze. Měli jsme to řešit při jedné hodině matematiky, když nám chyběla učitelka.

Nahoru Odpovědět
25.11.2013 18:17
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Zdeněk Pavlátka
David Hartinger:25.11.2013 18:18

Ano, je to tak :)

Nahoru Odpovědět
25.11.2013 18:18
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
Zdeněk Pavlátka:25.11.2013 18:19

Řešení bylo jednoduché, ale pro počítač to bude těžší...

Nahoru Odpovědět
25.11.2013 18:19
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Neaktivní uživatel:25.11.2013 19:06

Tak jsem ve dvou konečně došel k výsledku na papíře. :D

Nahoru Odpovědět
25.11.2013 19:06
Neaktivní uživatelský účet
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Jan Vargovský:25.11.2013 19:07

To pak není ono, musíš to hned algoritmovat :)

 
Nahoru Odpovědět
25.11.2013 19:07
Avatar
Odpovídá na Jan Vargovský
Neaktivní uživatel:25.11.2013 19:08

To bych nedal, skoro jsem to nedal ani na papíře. :D

Nahoru Odpovědět
25.11.2013 19:08
Neaktivní uživatelský účet
Avatar
Snorlax
Tvůrce
Avatar
Snorlax:25.11.2013 19:16

Můžu mít otázku? Jak zjistim který dítě zlobí, když vím, co pije, v jakém době bydlí apod.? o_O

Nahoru Odpovědět
25.11.2013 19:16
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Odpovídá na Snorlax
Neaktivní uživatel:25.11.2013 19:18

Já si domyslel, že zlobilo to dítě, kterému nedopadl žádný dárek.

Nahoru Odpovědět
25.11.2013 19:18
Neaktivní uživatelský účet
Avatar
Snorlax
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Snorlax:25.11.2013 19:18

To že si to přeju neznamená, že to dostanu... To mě právě zmátlo

Editováno 25.11.2013 19:21
Nahoru Odpovědět
25.11.2013 19:18
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Odpovídá na Snorlax
Neaktivní uživatel:25.11.2013 19:22

Teď mi to došlo spolu s chybou, co jsem našel. :D

Nahoru Odpovědět
25.11.2013 19:22
Neaktivní uživatelský účet
Avatar
Sachi
Člen
Avatar
Sachi:25.11.2013 19:24

Tu chybu jsem našla já, když jsem to kontrolovala. ]:>

Nahoru Odpovědět
25.11.2013 19:24
新世界の神になる!
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na David Hartinger
Petr Nymsa:25.11.2013 19:28

Jak moc ten algoritmus má být "univerzální" ?

Nahoru Odpovědět
25.11.2013 19:28
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Jan Vargovský:25.11.2013 19:52

Mi se to právě nechce dělat na papíře vůbec, tak to programuji :P

 
Nahoru Odpovědět
25.11.2013 19:52
Avatar
Odpovídá na Jan Vargovský
Neaktivní uživatel:25.11.2013 19:53

Mě by se to zase nechtělo programovat. Ani nevím vodkaď začít. :D

Nahoru Odpovědět
25.11.2013 19:53
Neaktivní uživatelský účet
Avatar
Michal Žůrek - misaz:25.11.2013 19:58

no toto udělám za každou cenu, i kdyby o měl algoritmus řešit hrubou silou.

 
Nahoru Odpovědět
25.11.2013 19:58
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Michal Žůrek - misaz
Jan Vargovský:25.11.2013 20:01

Co myslíš tím hrubou silou ? :D

 
Nahoru Odpovědět
25.11.2013 20:01
Avatar
Odpovídá na David Hartinger
Michal Žůrek - misaz:25.11.2013 20:03

mě tam pletou ty děti žijící vedle jiných.

 
Nahoru Odpovědět
25.11.2013 20:03
Avatar
Odpovídá na Jan Vargovský
Michal Žůrek - misaz:25.11.2013 20:04

všechny možné varianty. Jedna (nebo více), která bude splňovat všechny podmínky bude vypsána.

 
Nahoru Odpovědět
25.11.2013 20:04
Avatar
Odpovídá na David Hartinger
Michal Žůrek - misaz:25.11.2013 20:25

Proč si santa neudělal backup? To mu měli ti skřítci říct!

 
Nahoru Odpovědět
25.11.2013 20:25
Avatar
Sachi
Člen
Avatar
Odpovídá na Neaktivní uživatel
Sachi:25.11.2013 20:29

To ani já ne. :D

Nahoru Odpovědět
25.11.2013 20:29
新世界の神になる!
Avatar
Odpovídá na Michal Žůrek - misaz
Neaktivní uživatel:25.11.2013 20:31

Skřítci poslali data do oblak (cloud).

Nahoru Odpovědět
25.11.2013 20:31
Neaktivní uživatelský účet
Avatar
MLN
Člen
Avatar
MLN:25.11.2013 20:43

....při malé změně zadání. Čo myslia pod tým zadaním? to do programu napíšu tie všetky otázky a podla toho to ma program vypisat? alebo ako? tie otazky sa nejako zmenia ?

Editováno 25.11.2013 20:43
 
Nahoru Odpovědět
25.11.2013 20:43
Avatar
done
Člen
Avatar
Odpovídá na David Hartinger
done:25.11.2013 21:11

Sdraco, ty už jsi to vyřešil algoritmem ?:)

 
Nahoru Odpovědět
25.11.2013 21:11
Avatar
Silvinios
Tvůrce
Avatar
Odpovídá na MLN
Silvinios:25.11.2013 21:29

Výborná připomínka. Na první pohled by se mohlo zdát, že je zadání příliš nepřesné...

Pokud má program pouze vyřešit jedno konkrétní zadání, stačí si vzít tužka a papír, úlohu během několika minut vyřešit a pak napsat program, který vypíše jméno dítěte.

Pokud je cílem vytvořit program, který vyřeší libovolné zadání, chybí specifikace toho, co může a nemůže v zadání být.

V reálném světě bychom na sdraca nejspíše poslali analytika a pořádně ho vyzpovídali :-)

Protože jsme ale na devbooku, není těžké si domyslet, oč jde. Čím obecnější a propracovanější řešení, tím lépe. Viděl bych to tak, že zadání přepíšu do textového souboru v nějakém vhodném formátu, který můj program při spuštění načte. Pokud se zadání trochu změní, opravím jen vstupní soubor, ale program zůstane stejný.

 
Nahoru Odpovědět
25.11.2013 21:29
Avatar
coells
Tvůrce
Avatar
coells:26.11.2013 10:53

Zdravím všechny účastníky soutěže, soudě podle vašich ohlasů vás hádanka zaujala, což nás moc těší.

Jak píše nuz15, Einstein by se mohl zdát být autorem hádanky. Letos je to ovšem jinak - autorem je Santa. :-) A protože mám v zadání také prsty, odpovím na vaše dotazy.

Q: Jak zjistím, které dítě zlobí?
A: Doporučuji být pečlivější při čtení zadání: A protože jedno z dětí celý rok jenom zlobilo, dostane k vánocům pouze uhlí!

Q: Jak je to s dárky? Aneb, to, že si to přeju neznamená, že to dostanu... ?
A: Zbylé děti byly hodné, a proto opravdu dostanou to, co si přejí. Možná, že vás zmátly ty ponožky jako dárek, ale co my víme?

Q: Jak moc má být algoritmus univerzální? Nebo naopak jak moc nesmí být specializovaný?
A: Tak moc, jak to dokážete. Nemusíte chodit s kanónem na vrabce, ale jednoduché a obecné řešení má své výhody. Když hodnotím řešení, rád mu trochu změním vstupní hodnoty (klidně i nesmyslně), abych viděl, jak se chová. Vaše programy by měly nějakým způsobem zvládnout i to. Nemusíte rovnou psát vlastní parser, který z textového souboru načte zadání, porozumí mu a použitím vyšší inteligence ho vyřeší... ale samozřejmě platí, že čím lepší program, tím větší šance na výhru. ;-)

Q: Sdraco, ty už jsi to vyřešil algoritmem?
A: Dovolím si odpovědět za Sdraca. Tahle soutěž je o vás a pro vás! Máme své řešení, kterým jsme ověřili správnost zadání, ale více se těšíme na ta vaše.

Silvinios má určitě pravdu v jedné věci - jsme na Devbooku, kde jsou úlohy, hádanky a programování denním chlebem. Cílem je se pobavit a něco naučit.

 
Nahoru Odpovědět
26.11.2013 10:53
Avatar
coells
Tvůrce
Avatar
coells:26.11.2013 11:58

A víš o tom, že dávat do soutěže řešení nebo spoilery není moc slušné? Proč kazit ostatním zábavu?

 
Nahoru Odpovědět
26.11.2013 11:58
Avatar
Odpovídá na coells
Libor Šimo (libcosenior):26.11.2013 12:01

Tak to prosím zmaž.
Myslel som si, že toto je len prvý krok a nie som si istý, že je to správne.
Napísať algoritmus bude úplne iné kafe.

Nahoru Odpovědět
26.11.2013 12:01
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Libor Šimo (libcosenior)
David Hartinger:26.11.2013 12:02

Můžeš to coellsovi poslat do PM.

Nahoru Odpovědět
26.11.2013 12:02
New kid back on the block with a R.I.P
Avatar
Odpovídá na coells
Libor Šimo (libcosenior):26.11.2013 12:46

Napísal si: " Když hodnotím řešení, rád mu trochu změním vstupní hodnoty (klidně i nesmyslně)..."
Chcem sa spýtať, či sa môže zmeniť aj počet domov(5) a počet vlastností(5*5), alebo len samotné vlastnosti?

Nahoru Odpovědět
26.11.2013 12:46
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
coells
Tvůrce
Avatar
Odpovídá na Libor Šimo (libcosenior)
coells:26.11.2013 12:55

Tím myslím, že mohu dát Aničku do pátého domu a uvidím, jak si s tím program poradí. Nebo také mohu do pátého domu dát všechny děti :-)

Klíčové ovšem je správně vyřešit původní zadání.

 
Nahoru Odpovědět
26.11.2013 12:55
Avatar
Odpovídá na David Hartinger
Libor Šimo (libcosenior):26.11.2013 13:22

Sdraco, v zadaní si napísal:" 2. Maruska si k vánocům přeje počítačovou hru"
Predpokladám, že správne má byť "Maruška" a tak to bude aj v zadaní.

Nahoru Odpovědět
26.11.2013 13:22
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
coells
Tvůrce
Avatar
Odpovídá na Libor Šimo (libcosenior)
coells:26.11.2013 14:10

To je jen překlep, správně je Maruška.

 
Nahoru Odpovědět
26.11.2013 14:10
Avatar
Michael Olšavský:26.11.2013 20:54

Zadání mě trochu popletlo, ale jinak na papíře hotovo :D Mám ještě dotaz. Máme nějaký univerzální vstup nebo můžu mít vlastní formát zadání (je možné, že se někdo ptal)

 
Nahoru Odpovědět
26.11.2013 20:54
Avatar
Odpovídá na David Hartinger
Michal Žůrek - misaz:26.11.2013 21:11

Je řešení jenom jedno?

 
Nahoru Odpovědět
26.11.2013 21:11
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Michal Žůrek - misaz
Jan Vargovský:26.11.2013 21:17

Ano. Btw zkouším to natvrdo a počítá to už 4 hodiny :`

 
Nahoru Odpovědět
26.11.2013 21:17
Avatar
Odpovídá na Jan Vargovský
Michal Žůrek - misaz:26.11.2013 21:19

a nezacyklil se náhodou?

 
Nahoru Odpovědět
26.11.2013 21:19
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Michal Žůrek - misaz
Jan Vargovský:26.11.2013 21:24

Neměl by. Vypínat to nebudu, jestli to nevypočítá do 2 rána, tak to kašlu :D

 
Nahoru Odpovědět
26.11.2013 21:24
Avatar
Odpovídá na Jan Vargovský
Michael Olšavský:26.11.2013 21:28

Vždyť řešení je jen 3125 (55) jestli se nepletu ne? :D

EDIT: Řešení je jen jedno, možností je 5, při výpočtu KOMPLETNÍ TABULKY je zde 55

Editováno 26.11.2013 21:30
 
Nahoru Odpovědět
26.11.2013 21:28
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Michael Olšavský
Jan Vargovský:26.11.2013 21:38

(5!)^5 ... když k tomu přohodíš testování podmínek, měnění atributů instancí ...

Editováno 26.11.2013 21:38
 
Nahoru Odpovědět
26.11.2013 21:38
Avatar
Odpovídá na Jan Vargovský
Michael Olšavský:26.11.2013 21:44

Pravda pravda. S tím jsem nějak nepočítal :-D Tak už to chápu :D

 
Nahoru Odpovědět
26.11.2013 21:44
Avatar
coells
Tvůrce
Avatar
Odpovídá na Michael Olšavský
coells:26.11.2013 22:26

Zadání můžete mít v libovolném formátu, žádná omezení nejsou.

 
Nahoru Odpovědět
26.11.2013 22:26
Avatar
Jan Vargovský
Tvůrce
Avatar
Jan Vargovský:26.11.2013 23:23

Tak po optimalizaci +- 200ms :)

 
Nahoru Odpovědět
26.11.2013 23:23
Avatar
Libor Šimo (libcosenior):28.11.2013 18:15

Skúšam to bez permutácií za pomoci logiky, ale zatiaľ som sa ďaleko nedostal.

Nahoru Odpovědět
28.11.2013 18:15
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
coells
Tvůrce
Avatar
Odpovídá na Libor Šimo (libcosenior)
coells:28.11.2013 18:16

Pokud to dokážeš, tak se těším na řešení.

 
Nahoru Odpovědět
28.11.2013 18:16
Avatar
tomkrata
Člen
Avatar
Odpovídá na Snorlax
tomkrata:28.11.2013 19:09

Jedno dítě nedostane dárek. Spočítej si je. :D

 
Nahoru Odpovědět
28.11.2013 19:09
Avatar
Hartrik
Tvůrce
Avatar
Hartrik:1.12.2013 17:46

Tak se mi dnes konečně podařil vypočítat výsledek, mám to pod 10 ms :)

 
Nahoru Odpovědět
1.12.2013 17:46
Avatar
Silvinios
Tvůrce
Avatar
Odpovídá na Hartrik
Silvinios:1.12.2013 18:36

V čem jsi to napsal, smím-li se ptát?

 
Nahoru Odpovědět
1.12.2013 18:36
Avatar
Hartrik
Tvůrce
Avatar
Odpovídá na Silvinios
Hartrik:1.12.2013 18:38

v Javě samozřejmě

 
Nahoru Odpovědět
1.12.2013 18:38
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 50 zpráv z 74.