Limbo a hrátky s čísly

Dungeon Limbo se nám do hry dostal spolu s patchem 1.4 a obsahuje sadu hádanek, které souvisí s celkovým "moderním" pojetím dungeonu, tedy hlavně s odkazem na technologii, která se v něm ukrývá. Svým způsobem to není nic složitého, ale vyžaduje to již určité znalosti, obzvláště pokud to chcete řešit bez kousku vlastní technologie :) Pokud vás zajímá jen řešení, přeskočte rovnou na poslední kapitolku článku.

Trocha teorie neuškodí ...

Číselná soustava je způsob, jakým provádíme zápis čísel. Každé číslo sestává z jedné nebo více číslic, jejichž pořadí nám umožňuje každé číslo snadno interpretovat (tzv. poziční číselná soustava). Pozice číslice pak určuje váhu pro výpočet výsledné hodnoty čísla. Váha obvykle roste zprava doleva, což lze demonstrovat např. na dvojici čísel 10 a 100, kdy bez váhání do vztahu doplníme 10 < 100. Zápis čísla 10 si totiž můžeme také představit jako 010. Při porovnání 010 a 100 pak jednoduše porovnáme hodnoty číslic na patřičných pozicích.

Odtud už je jen krůček k obecnému vztahu pro výpočet hodnoty libovolného čísla, který lze vyjádřit ve formě polynomu. Začneme desítkovou soustavou, pro kterou platí:

a omezíme se na celá čísla.

Navenek to může vypadat děsivě, ale ve skutečnosti se jedná o celkem přirozený způsob práce s čísly, který jsme běžně používali už ve škole, jen to nebylo podáno takto sofistikovaně :) Uvedeme si proto hned příklad. Vemte si číslo 1124 a zkuste se zamyslet nad tím, jak jsme k němu vůbec došli. Správné je to úplně nejjednodušší řešení, číslo 1124 vzniklo postupným součtem hodnot jednotlivých řádů, tedy jednotek, desítek, stovek a tisíců:

1124 = 1000 + 100 + 20 + 4 neboli detailněji 1124 = 1.1000 + 1.100 + 2.10 + 4.1

Odtud plyne, že každé číslo v desítkové soustavě je součtem násobků jednotlivých číslic se svými váhami (to jsou ty jednotky, desítky, stovky, tísíce atd.). A jak z toho dostaneme mocninný tvar?

1124 = 1.103 + 1.102 + 2.101 + 4.100

Protože se jedná o desítkovou soustavu, je základem mocniny logicky číslo 10, které pak umocňujeme příslušnou váhou, která odpovídá pozici číslice minus 1.

Analogicky pak funguje práce i v dalších číselných soustavách. Číselnou soustavu totiž určuje právě použitý základ mocniny a rozsah použitelných číslic (vysvětlím později). Pokud tedy umíme pracovat s desítkovou soustavou, není práce v dalších soustavách o nic složitější. V desítkové soustavě jsme si zvykli, že počítáme číslice na dané pozici od 0 do 9 a pak zvyšíme řád - k jedničce přidáme nulu atd., tedy 0, 1, ... 9, 10, 11, 12, ... 99, 100 a postupně dále. Každá pozice tedy může nabývat jen číselných hodnot v rozsahu 0 až 9.

Práce s desítkovou soustavou je pro nás přirozená, dokonce natolik, že jsme ji velice umně naroubovali i na prezentaci času, který je ve skutečnosti počítán v šedesátkové soustavě :) Tady se vracíme zpět k problematice množství použitelných číslic, resp. obecně znaků (symbolů). Pokud jsme v číselných soustavách "pod" desítkovou soustavou, můžeme být v klidu, ale jakmile se dostaneme "nad", dojdou nám použitelné číslice. Potřebných znaků je v každé soustavě tolik, kolik činí hodnota základu, tedy např. pro pětkovou soustavu je to 5 znaků a protože vždy začínáme nulou, tak jsou to 0, 1, 2, 3, 4. Pro třináctkovou soustavu je to už 13 znaků, takže si musíme vypomoci jinak, což se dělá písmeny - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C.

Tak a pokud jste doposud dávali dobrý pozor a nemáte v tom ještě maglajz, napadne vás na příkladu pětkové soustavy hned jiný problém. Dá se při omezeném počtu znaků napsat v pětkové soustavě každé číslo z desítkové soustavy? Kupodivu dá ;) Problém je jen v tom, že se díky omezenému počtu číslic velice rychle dostanete k rozsáhlým zápisům, např. č. 9 má v pětkové soustavě hodnotu 14. Čím níže se základem jdete, tím rychleji bude délka zápisu narůstat a tím se dostáváme k dalšímu bodu článku.

Dvojková (binární) soustava

Dvojková soustava má ve světě, zejména v tom moderním, vyjímečné postavení. K zápisu čísel využívá z podstaty svého základu jen dvě možné hodnoty (0 a 1) a v tom právě tkví její kouzlo. Obě hodnoty totiž mohou být snadno interpretovány pomocí dvou mezních stavů. Proto se uchytla zrovna ve světě elektrotechniky, kde se obě hodnoty dají vyjádřit ve formě stavu elektrického obvodu - zapnuto (1) vs vypnuto (0) (proud teče vs proud neteče). Bohužel to sebou nese i negativní jev popsaný výše, tedy že díky omezenému množství znaků velmi rychle narůstá velikost výsledného čísla a tím pádem rychle roste nepřehlednost. Poměrně efektivně se to řeší používáním dalších soustav, které jsou na dvojkovou soustavu snadno převoditelné, tedy mají základ (Z) odvozený od mocniny dvojky (Z = 2n). Patří sem osmičková (23) a šestnáctková soustava (24). Ale těm se věnovat nebudeme.

Pro úplnost dodám obecný vzoreček pro výpočet hodnoty čísla ve dvojkové soustavě:

a opět se omezíme na celá čísla.

Z praktického hlediska je pro nás důležité, naučit se vzájemně převádět čísla z desítkové do dvojkové soustavy a naopak. Pokud jde o převod z dvojkové soustavy do desítkové, je to o něco jednodušší, protože využijeme obdobný způsob, jaký byl použit pro rozklad čísla 1124 v desítkové soustavě. Namísto základu 10 bude ovšem základ 2. A začneme hned příkladem.

Máme číslo 110011 ve dvojkové soustavě a chceme ho převést do desítkové soustavy. V první řadě si spočítáme počet číslic (6) a podle toho sestavíme příslušný polynom:

110011 = 1.25 + 1.24 + 0.23 + 0.22 + 1.21 + 1.20 = 1.32 + 1.16 + 0.8 + 0.4 + 1.2 + 1.1 = 51

Opačný způsob je poněkud náročnější, protože musíme převáděné číslo rozkládat od nejvyšší možné mocniny. S trochou cviku se to dá naučit, ale my si pomůžeme jednoduchým zápisem ve formě tabulky:

Pozice číslice zprava (n) 9 8 7 6 5 4 3 2 1
Příslušná mocnina (n-1) 28 27 26 25 24 23 22 21 20
Číselná hodnota mocniny 256 128 64 32 16 8 4 2 1

Tabulka by samozřejmě mohla pokračovat i nad osmou mocninu, ale pro naše účely a hlavně pro pochopení postupu, je zcela dostačující.

Abychom neřešili jen číslo 51, tak si vezmeme číslo 146 v desítkové soustavě a pokusíme se ho převést do dvojkové soustavy. Jak na to? Podíváme se na tabulku a v číselných hodnotách najdeme nejvyšší číslo, které se svou hodnotou blíží tomu převáděnému, ale není přitom vyšší. Číslo 256 už je moc, ale číslo 128 vyhovuje. Co to pro nás znamená? Nyní víme, že výsledek ve dvojkové soustavě bude obsahovat 8 číslic a protože číslo 128 je v tom našem obsaženo, zapíšeme na pozici č. 8 hodnotu 1 (viz tabulka níže). Pokračujeme dále. Teď číslo 128 od čísla 146 odečteme. Získáme číslo 18 a pokračujeme stejným způsobem. Číslu 18 je z tabulky nejblíže číslo 16. Na pozici č. 5 napíšeme 1 a číslo 16 od 18 odečteme. Zbyde číslo 2 a to se shoduje s tabulkou na pozici č. 2 (zapíšeme na ní 1). Na všechny zbylé pozice pak dopíšeme 0, protože tyto hodnoty jsme při rozkladu čísla 146 nepoužili. Výsledkem je číslo 10010010 ve dvojkové soustavě.

Pozice číslice zprava (n) 9 8 7 6 5 4 3 2 1
Příslušná mocnina (n-1) 28 27 26 25 24 23 22 21 20
Číselná hodnota mocniny 256 128 64 32 16 8 4 2 1
Číslo ve dvojkovém formátu nic 1 0 0 1 0 0 1 0

Analogicky lze tabulku použít i pro převod z dvojkové do desítkové soustavy, kdy prostě jen příslušné hodnoty mocnin označené jedničkou mezi sebou sečtete. Je to opravdu jen jiný způsob vyjádření původního vzorečku. Podobně si lze sestavit tabulku i pro jiné číselné soustavy.

Zpět k hádankám

Uvnitř dungeonu máte možnost prošmejdit řadu místností, ale část jich pro vás zůstane zavřená. Jediným vodítkem bude kód 6945472381, který naleznete v jedné z místností. Pomocí něj se dostanete za dveře s drakem, od něhož pro změnu obdržíte kód 127.0.0.1, což je tzv. loopback. Kód 127.0.0.1 využijete k otevření dveří do místnosti, před nimiž leží na zemi papírová vlašťovka. Uvnitř místnosti uvidíte na zdi 8 pák, které lze přepínat do dvou poloh, přičemž se u nich rozsvítí červené nebo modré světlo. Neříká vám to něco? ;) V tuto chvíli začíná ta pravá legrace.

Ten tzv. loobback je speciální adresa, která se používá k vytvoření lokální smyčky. Zápis ve formě 127.0.0.1 je ve skutečnosti IP adresa v desítkové soustavě, přičemž z definice IP adresy vychází, že se jedná o 32-bit číslo (prokol IPv4) zapsané dekadicky po jednotlivých oktetech (osmicích bitů). Protože jsme ve sféře elektrotechniky, tak těch 8 bitů představuje zápis příslušného čísla ve dvojkové soustavě. V místnosti máte 8 pák (každá představuje 1 bit) a každou lze nastavit do dvou poloh (zapnuto vs vypnuto), jak jsem již zmínil. Tohle by vás mělo navést na správné řešení, kterým je převádění získaných čísel pomocí pák do dvojkové soustavy. Pokud je číslo kratší, doplníte před něj nuly. Postupně si tak otevíráte dveře k dalším kódům atd. Orientace je nastavena tak, že se postavíte zády k truhle a začínáte zleva od dveří proti směru hodinových ručiček. Modrá = 1, červená = 0. Převod je opravdu jednoduchý a doporučuji si ho vyzkoušet.

Řešení: