Skip to content

Instantly share code, notes, and snippets.

@jiridanek
Created October 19, 2010 10:42
Show Gist options
  • Save jiridanek/633995 to your computer and use it in GitHub Desktop.
Save jiridanek/633995 to your computer and use it in GitHub Desktop.
Program v HS co sežere všechnu paměť
Príklad 1. Z Brna vyrazí náhodne nekdy mezi polednem a ctvrtou hodinou
odpolední Honza autem do Prahy a opacným smerem nekdy ve stejném intervalu
autem Martin. Oba si dávají pul hodiny pauzu v motorestu v polovine cesty
(prístupném pro oba smery). Jaká je pravdepodobnost, že se tam potkají, jezdíli
Honza rychlostí 150 km/h, a Martin 100 km/h? (vzdálenost Brno-Praha je
200 km)
type Interval = (Integer, Integer)
prunikIntervalu :: Interval -> Interval -> Bool
prunikIntervalu a b = prunikIntervalu' a b || prunikIntervalu' b a
prunikIntervalu' :: Interval -> Interval -> Bool
prunikIntervalu' (a1, a2) (b1, b2)
| a1 >= b1 && a2 <= b1 || a1 <= b1 && a2 >= b1 = True
| a1 == b1 && a2 == b2 = True
| a1 <= b1 && a2 >= b2 || a1 >= b1 && a2 <= b2 = True
| otherwise = False
-- zvyšováním téhle konstanty značně stoupají paměťové nároky
nasobitel = 1
-- (z Prahy/Brna)
honzovy_vyjezdy = [0..240*nasobitel]
martinovy_vyjezdy = [0..240*nasobitel]
-- (do motorestu)
honzovy_dojezdy = [x + 40*nasobitel | x <- honzovy_vyjezdy]
martinovy_dojezdy = [x + 60*nasobitel | x <- martinovy_vyjezdy]
honzovy_intervaly = [(x, x+30*nasobitel) | x <- honzovy_dojezdy]
martinovy_intervaly = [(x, x+30*nasobitel) | x <- martinovy_dojezdy]
kombinace = [(x, y) | x <- honzovy_intervaly, y <- martinovy_intervaly]
-- tedy počet všech dvojic protínajících se intervalů
citatel = (fromIntegral ( length (filter fce kombinace))) :: Double
-- přežvýká to z ( (,), (,)) na (,), (,)
fce (prvni, druhy) = prunikIntervalu prvni druhy
-- počet všech dvojic
jmenovatel = (fromIntegral ( length kombinace)) :: Double
vysledek = citatel / jmenovatel
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment