Bomberman

Úvod

Hry mě baví. Koho taky ne. Teď mám na mysli ale ty počítačový. Nikdy mě nebraly věci typu GTA, Counter Strike, Call of Duty, WOW, LOL, OMG, WTF. 😀 Jasně, Duke Nukem 3D jsme pařili za základce všichni, ale srdcovka pro mě byly jednoznačně RPG. Mít vlastního hrdinu z fantasy světa, kterej začíná z úplný nuly, zabíjí rozličný divný příšery, za který dostává kromě zlaťáků taky zkušenosti, postupně vylepšuje svoje dovednosti, brnění a odhaluje příběh, kterej vydá na X knížek, bylo neskutečně BOŽÍ!

Ne, že bych na to měl čas – to poslední dobou skoro vůbec, ale mám období, kdy si potřebuju vyčistit hlavu. Je až neskutečný, že už je to skoro 16 let (!), kdy vyšel The Elder Scrolls III: Morrowind. Asi první hra, která mě fakt chytla u srdíčka, a již mám doma originál na CD. Pravověrní fandové mě teď ukamenujou, protože Oblivion jsem nikdy nehrál, nicméně na pátý díl Skyrim už jsem se opět těšil jako malej Jarda. Abyste pochopili, tady si můžete dělat úplně vše, co se vám zlíbí – od vymýcení všech dungeonů, přes hon na veškeré králíky, lišky a medvědy s lukem a šípy, po vyvraždění celýho městaTo byl omyl, přísahám! 🙂. Jak je ctěná libost. O to víc potěšilo, když jsem tohle monstrum konečně po necelých 100 hodinách tenhle týden dohrál.

Bomberman

Proč o tom vlastně ale vůbec mluvím? Jednoho dne jsme se v práci rozhodli, že zkusíme propojit příjemné s užitečným – rozuměj hry s Excelem – a za domácí úkol něco vymyslíme. A tak vzniknul Bomberman. Dohrát se dá tak za 5 minut, ale hodin spálených programováním a laděním kolem tý stovky klidně bude. Vymyslet bludiště, celou logiku hry, ujasnit si pravidla, nastavit ovládání pohybu. Myslím, že pár hodin jsem strávil jenom googlením. 🙂 Největší sranda byla naprogramovat hledání optimální cesty. Algoritmus znám zpaměti, ale udělat to tak, aby to fungovalo, dělalo, co dělat má, a ještě jezdilo v reálným čase, no potěš!

Má prvotina. Najdeš cestu?

Šest kol, tři obtížnosti. Náhodně generovaný levely. Vždycky se dají splnitProto jsem se taky páral s tou optimální cestou, neasi! 🙂 – ale když na to přijde, je tam i nápověda. Sbíráš kytičky pro radost (a body). A umí to i zvukís.

Excel

Grafika dětská, ale z pohledu využití Excelu to vypadá následovně:

  • Znaky v bludišti jsou tvořeny písmem Wingdings.
  • Celý obarvení je udělaný podmíněným formátováním.
  • WASD, šipky a další klávesy jsou namapovány pro hru.
  • Logika hry je komplet v makrech. Pohyb, odpočet času, pokládání bomb, vyhodnocení skóre…
  • Vlastní dialogová okna. To až zjistíte, že jste prohráli.
  • V určitých situacích se přehraje WAV zvuk.

PS: Nějaký nápady, připomínky, co by se dalo zlepšit/doplnit?

 

Zahraj si mě.

  • Musíš povolit makraBuď to riskneš a zahraješ si, nebo smůlka. 😉 Můžeš bejt ale v klidu., neasi.
  • Frčí to jenom pod Win 7+ a Excel 2013+. Pravěk negarantuju a na Macu to (zatím) nedávám…

Fermiho problém

TLDR: Kvalifikovaný odhad jako způsob výpočtu, který není náročný ani na vstupní informace, ani na výpočetní výkon.

O čem to je

Jedná se o způsob určování míry výskytu daného jevu na základě pravděpodobnosti výskytu dílčích komponent. Hlavní pointa je v tom, že zjišťovaný jev se velmi pravděpodobně buď na přímo zjistit nedá (zdroj informace chybí úplně), nebo bude vyžadován takový výpočetní výkon, že se to rozhodně nevyplatí (projít všechny varianty by bylo nereálné). Na tohle bude ale asi potřeba příklad. 🙂

Kolik je v Chicagu ladičů pian?

  1. Kolik obyvatelV metropolitní oblasti žije
    přibližně 9’000’000 obyvatel.
    má Chicago?
  2. Průměrný počet obyvatel jedné domácnosti2 je…
  3. Podíl domácnostíCca 1 domácnost z 20., které mají piano, jež je laděno pravidelně.
  4. Piano se ladí průměrně jak častoPravidelná údržba pian se provádí průměrně jednou ročně.?
  5. Ladění jednoho piana trvá … hodinPředpokládejme dvě hodiny., včetně cesty.
  6. Pracovní doba ladiče pian je 8 hodin denně, 5 dní v týdnu, 50 dní v roce.

Výpočet

Z těchto předpokladů je možné sestavit výpočet odhadovaného počtu ladičů pian. Začněme počtem potřebných ladění v průběhu roku.

(1)    \begin{equation*} N = \frac{po \v{c} et\ obyvatel}{velikost\ dom\'{a} cnosti} \cdot P(piano) \cdot f_{lad \v{e} n \'{\i} }} = \frac{9000000}{2} \cdot \frac{1}{20} \cdot 1 = 225000 \end{equation*}

Tímto jsme získali počet pian, které je potřeba za rok naladit. Dále pokračujme roční výkonností ladiče.

(2)    \begin{equation*} k = \frac{ro\v{c}n \'{\i} \ pracovn \'{\i} \ doba\ v\ hodin\'{a}ch}{doba\ trv\'{a}n\'{\i} }} = \frac{8 \cdot 5 \cdot 50}{2} = 1000 \end{equation*}

Teď již stačí jen zjistit, kolik je potřeba ladičů pro daný objem při této výkonnosti a dojdeme k číslu:

(3)    \begin{equation*} n = \frac{N}{k} = \frac{225000}{1000} = 225 \end{equation*}

Tímto výpočtem jsme dospěli k odhadu, že v oblasti Chicaga by se mělo živit cca 225 lidí jako ladiči pian.

Odhad vs. Skutečnost

Podíváme-li se na záznamy z US census, zjistíme, že v roce 2009 bylo v oblasti Chicaga registrováno 290 ladičů pian. Náš odhad byl o 22 % nižší. Je to velký rozdíl nebo malý? Vezmu-li do úvahy, že sám nemám ani ponětí, kolik ladičů je v ČR, natož v Chicagu – a klidně by jich mohlo být i 50000, pokud by to bylo lukrativní povolání, myslím, že napočítaný odhad je velmi přesný.

Poznámky

  • Všechna čísla v předpokladech jsou značně zaokrouhlena a zjednodušena. To je ovšem celá podstata výpočtu. Znalost přesných čísel totiž vyžaduje výrazně vyšší znalosti, které však nemusí být zdaleka tak jednoduché získat.
  • Například počet obyvatel se mění každý den, každé piano se ladí jinak dlouho, atp.
  • Důležitý je tedy řád (rozuměj: míra incidence), tedy jestli je ladičů 10, 100, 1000, …
  • Naopak, pokud používáte nějakou sofistikovanou metodu, může se takto vytvořený odhad použít jako „sense check“.

Cílem je získat představu o velikosti, rozsahu problému ideálně bez náročného použití výpočetní techniky. Zjednodušit si problém na dílčí prvky, které se dají vzájemně kombinovat. Jistě, základní znalost tématu a všeobecný přehled se hodí a celkově zvyšují přesnost. Správně odhadovat se však nedá naučit během 5 minut, to chce praxi, resp. pravidelný trénink.

Zkuste začít třeba tak, že příště, až půjdete nakoupit do obchodu, tak aniž byste koukali na cenovky, tipnete si, kolik vás ten obsah košíku bude stát.

Pochlubte se pak s přesností do komentářů, zprávy, …

Narozeninový paradox, část druhá – Excel

Minule jsme si popsali první matematický problém – Narozeninový paradox. Cílem bylo zjistit, při jak velké populaci bude pravděpodobnější, že alespoň dva jedinci budou mít narozeniny ve stejný den. Ukázali jsme si názorně, jak tuto pravděpodobnost v několika krocích spočítat. Nabízí se využít Excel, abychom nemuseli vše počítat postupně, ručně.

Krok první – počet dní v roce

Nejprve si spočítejme podíl, kolik ze dní v roce může slavit n-tý jedinec narozeniny. Pravidlo pro výpočet zní:

  • n-tý jedinec může mít narozeniny ve kterýkoli den vyjma v den narozenin předcházejících jedinců.

Tímto dostaneme následující předpis:

(1)    \begin{equation*} p_{dny}(n) = \frac{365-(n-1)}{365}  \end{equation*}

Vyrobíme si proto v Excelu tabulku, kde v prvním sloupci bude počet jedinců a ve druhém pravděpodobnost, resp. podíl dní v roce. Doplnit přirozená čísla 1, 2, 3, \ldots je jednoduché, do buňky B2 pak zapíšeme =(365-A2+1)/365. Následně stačí tento vzorec „roztáhnout“Např. tažením myši za pravý dolní roh buňky B2, či dvojklikem tamtéž. dolů. Výsledek v prvním kroku může vypadat například takto:

Celý článek

Narozeninový paradox

Kolik je potřeba lidí, aby bylo pravděpodobnějšíTedy, že pravděpodobnost je větší než 50 %., že alespoň dva jedinci budou mít narozeniny ve stejný den, než každý v jiný den?

Popis problému

Mějme skupinu  n jedinců, u nichž porovnáváme data narození. Cílem je zjistit, při jak velké populaci dochází k tomu, kdy je více pravděpodobné, že více jedinců slaví narozeniny ve stejný den. Není však důležité, zda v konkrétní populaci tento jev nastane, či nikoli. Jistě tedy existuje malá skupina, v níž více jedinců bude slavit narozeniny ve stejný den, a naopak velká skupina (maximálně H=365 jedinců), kteří slaví narozeniny každý v jiný den.

Celý článek