Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- # DIPLOMI-INSINÖÖRI- JA ARKKITEHTIKOULUTUKSEN YHTEISVALINTA, 28.5.2013
- # (http://dia.fi/media/20742/insmat2013malli.pdf)
- #
- # Tehtävä: A6/B6/C6/D6 (Harri Potteri ylittää katua)
- #
- # Tehtävänanto kuului hiukan muokattuna ja yksinkertaistettuna näin:
- # Todennäköisyydellä 0,6 otetaan 60cm askel ja todennäköisyydellä 0,4 otetaan 30cm askel
- # (tosin tämä oli oikeasti muotoiltu 'viistoina' askelina, jotka vievät 30cm eteenpäin).
- # Millä todennäköisyydellä päästään tien toiselle puolelle (610cm) ottamatta 13. askelta?
- # Ohjelman selitys: Suoritetaan 10 sarjaa 50000 toistolla kukin, katsotaan millä todennäköisyydellä kussakin
- # sarjassa edettiin vähintään 610cm ja lasketaan näin saaduista 10 tuloksesta keskiarvo.
- # Tulokset: Tällä mallinnuksella tulokseksi saadaan suorituskerrasta riippuen noin 0,225 tai 0,226
- # Tulos laskemalla: Binomitodennäköisyyttä hyödyntäen laskemalla saadaan neljällä desimaalilla 0,2253
- # (eli: p9 + p10 + p11 + p12, missä pk tarkoittaa MAOL-taulukon binomitodennäköisyyden
- # kaavaa; kaavassa n = 12 ja p = 0,6). Pidempiä askelia on oltava väh. 9, jotta päästään
- # kadun toiselle puolen.
- #
- # Author: janne.cederberg@opetus.tv
- # Date: 28.5.2013
- # Licence: Public domain
- # Disclaimer: Koodi on sikäli hiukan rumaa, että luo_askellus(...) mm. sisältää nuo rajat
- # eikä rajoja pyydetä parametreina. Mut anyways, have fun :)
- import random
- def luo_askellus(askelia):
- pituus = 0
- for i in range(askelia):
- if ( random.randint(1,10) <= 4 ):
- pituus += 30
- else:
- pituus += 60
- return pituus
- def todnak_etta_askellus_yli(raja, askellus):
- ylitykset = 0
- for i in askellus:
- if ( i >= raja ):
- ylitykset += 1
- return 1.0 * ylitykset / len(askellus)
- def todnak_etta_n_toistolla_yli(raja, toistoja):
- askellukset = []
- for i in range(toistoja):
- askellukset.append(luo_askellus(12))
- return todnak_etta_askellus_yli(raja, askellukset)
- def keskiarvo(lista):
- return 1.0 * sum(lista) / len(lista)
- # MAIN
- if __name__ == "__main__":
- koesarjoja = 10
- todennakoisyydet = []
- for k in range(koesarjoja):
- todennakoisyydet.append(todnak_etta_n_toistolla_yli(610, 50000))
- print keskiarvo(todennakoisyydet)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement