Zdá se, že tato hádanka dosti lidí popletla, asi proto že jsem se snažil dát příběh jednoduché programátorské úloze.
Na druhou stranu ohlas je dle komentářů veliký...
Sejdou se dva kamarádi, přijde řeč na všechno možné, i na hudbu. Oba dva mají sebou flashku plnou až po okraj toho, co se jim líbí.
Bylo by fajn, kdyby si mohli hudbu vyměnit, aby si ji mohli doma poslechnout. Neboli nahrát obsah jedné flashky na druhou a obsah druhé na první.
Přidou k počítači ve škole, že svůj plán zrealizují. Problém, je že na žádném z flash disků není volné místo. Neboli pokud chtějí na kterýkoliv něco nahrát, pak musí smazat/přepsat původní obsah.
Chtělo by to hudbu jednoho z nich prozatimně uložit na pevný disk počítače. Pak by se jeho flashka mohla smazat, zaplnit obsahem té druhé, a na tu by se pak přokopírovala hudba z počítače.
Co čert nechtěl, bezpečností posedlý správce sítě nedovolí zapisovat data na školní počítač - data nelze nikam dočasně uložit.
Správce sítě ale na počítač nainstaloval speciální software, který umožní tuto výměnu dat provést. Tím mají kamarádi po problému, ale vzniká nám tu otázka:
Jak tento program funguje?
Aby úloha nebyla jednoduchá, tak ani
tento software si neukládá žádná pomocná data jinam (ani do RAM), než na média, mezi nimiž výměna probíhá.
Na flash discích není ani drobek místa navíc, oba mají stejnou kapacitu.
Dokážete vymyslel algoritmus, jak výměnu dat provést?
Na tuto hádanku mě přivedla stará úloha z programování: Máte prohodit obsah dvou proměných bez použití třetí.
Možná se vám budou hodit logické spojky.
Existuje několik možností. Vtip je v tom, že se na datech musí použít fce, která je přepíše, ale přesto se ale nestratí původní informace.
A = A XOR B
B = A XOR B
A = A XOR B
nebo:
A = A+B
B = A-B
A = A-B
To vše modulo délkou dat
Líbí se Vám tato stránka? Přidejte si ji k oblíbeným.