Výuka a školení Excelu Výuka a školení Excelu Výuka a školení Excelu
Výuka a školení Excelu Výuka a školení Excelu

středa 26. září 2012

První hádanka - simulace (rybička a žralok)

Das ganze tschechische Volk ist eine Simulantenbande! Otázka však je, jestli to platí i pro použití simulačních metod v Excelu.
Jestli vyřešíte tenhle problém, umíte opravdu dobře pracovat s Excelem.
Upozorňuji, že řešení může mít více variant - já uvedu řešení jen jedné z nich.
Úkol jde nepochybně řešit i pomocí maker, není to ale nutné.

Zadání

Máme bazén, který má 10 krát 10 metrů. Má i nějakou hloubku, ale tu zanedbáme. Do bazénu pustíme rybičku a žraloka, kteří se v něm budou pohybovat. Když se žralok potká s rybičkou, sežere jí. V takovém případě dáme do bazénu hned další rybičku.
Otázka je, kolik rybiček budeme muset do bazénu doplnit za 100 000 sekund? Jinými slovy, kolikrát se žralok s rybičkou potká?
Protože se v úkolu pracuje s náhodnými čísly, budou se řešení pokaždé trochu lišit. Neměla by se ale lišit řádově.
Platí, že:
Rybička i žralok se pohybují rychlostí jednoho metru za sekundu. Pohybují se (pro zjednodušení) v pravých úhlech - tedy doleva, doprava, dopředu, dozadu.
Rybička i žralok se pohybují naprosto náhodně. V jednom směru se mohou pohnout doleva, doprava nebo zůstat na místě (se stejnou pravděpodobností všech tří pohybů) a současně se mohou v druhém směru pohnout dopředu, dozadu nebo zůstat na místě (se stejnou pravděpodobností všech pohybů). Takže např. ze souřadnic (0,0) se mohou pohnout na (-1,1), (-1,0), (0,1) atd., ale nemohou se pohnout na (0,-2).
Kdyby se chtěla rybička nebo žralok dostat za hranici bazénu, zůstane na místě a v příští sekundě se bude rozhodovat znova. Jsou tedy možné pouze pohyby, které nevedou za hranici bazénu.
Tak hodně štěstí při řešení.
Další hádanky si můžete vyzkoušet tady.

3 komentáře:

  1. Hazet rybicku zralokovi k tlame mi neprislo moc ferove :)
    Diky za ty opravy. Bude se mi to hodit.

    OdpovědětVymazat
  2. Mně to nefér nepřijde, minimálně z pohledu žraloka... :)

    OdpovědětVymazat
  3. Chtěl jsem si trochu procvičit VBA a zplodil jsem tohle - funguje to, ale nejspíš by se to dalo napsat nějak elegantněji...

    Sub zralok()
    Dim hrana As Integer
    hrana = Application.InputBox("zadejte, v jak velkém bazénu rybička a žralok plavou", "šířka bazénu")

    sirka_zraloka = Round(Rnd() * hrana)
    vyska_zraloka = Round(Rnd() * hrana)
    sirka_rybicky = Round(Rnd() * hrana)
    vyska_rybicky = Round(Rnd() * hrana)

    Do Until a = 100000
    a = a + 1

    posun_sirky_zraloka = Round(Rnd() * 2) - 1
    posun_sirky_rybicky = Round(Rnd() * 2) - 1
    posun_vysky_zraloka = Round(Rnd() * 2) - 1
    posun_vysky_rybicky = Round(Rnd() * 2) - 1

    If (sirka_zraloka + posun_sirky_zraloka > 0 And sirka_zraloka + posun_sirky_zraloka < hrana) Then sirka_zraloka = sirka_zraloka + posun_sirky_zraloka
    If (sirka_rybicky + posun_sirky_rybicky > 0 And sirka_rybicky + posun_sirky_rybicky < hrana) Then sirka_rybicky = sirka_rybicky + posun_sirky_rybicky
    If (vyska_zraloka + posun_vysky_zraloka > 0 And vyska_zraloka + posun_vysky_zraloka < hrana) Then vyska_zraloka = vyska_zraloka + posun_vysky_zraloka
    If (vyska_rybicky + posun_vysky_rybicky > 0 And vyska_rybicky + posun_vysky_rybicky < hrana) Then vyska_rybicky = vyska_rybicky + posun_vysky_rybicky

    List1.Cells(sirka_zraloka, vyska_zraloka).Select
    With Selection.Interior
    .Color = RGB(0, 100, 0)
    End With
    List1.Cells(sirka_rybicky, vyska_rybicky).Select
    With Selection.Interior
    .Color = RGB(100, 0, 0)
    End With

    If (sirka_rybicky = sirka_zraloka And vyska_rybicky = vyska_zraloka) Then pocet_sezrani = pocet_sezrani + 1

    Loop
    MsgBox (pocet_sezrani)

    End Sub

    OdpovědětVymazat