keskiviikko 14. toukokuuta 2008

21. Kesä on ohjelmointiaikaa!

Tässä hieman koulukuulumisia.
Takana ovat kurssit Diff.yhtälöt II, Analyysi I ja Sähkömagnetismi I - näistä analyysi oli ainakin mennyt läpi. Perjantaina vielä ATK II:n (numeriikka) tentti ja maanantaina Johdatus suhteellisuusteoriaan.

Välipäivinä oon paneutunut Project Eulerin tehtäviin ja venäjän kielen opiskeluun.
Lainasin tänään semmosen kirjan ku Computational Recreations in Mathematica® ja sitten yhden algoritmikirjan. ATK II:lla me käytettiin Mathematicaa, joten tuosta ekasta kirjasta voi olla apua tenttiin valmistautumisessa. Lisäksi siinä oli luku Collatzin ongelmasta - se voisi auttaa PE-tehtävän 14 ratkaisemisessa. On mulla kyllä tuohon joku joskus aloitettu c-koodi valmiina, mutta katsotaan mitä kirja sanoo.

Tänään olin koululla tekemässä ongelmaa 67 Mathematicalla. Eli tarkoitus on edetä lukukolmion huipulta kannalle siten että kerää luvuista maksimisumman ja etenee kokoajan alaspäin.
Käytin siinä semmosta haistelualgortmia, että jos meillä on kolmio
a
b c                  (tässä edetään ylhäältä suoraan alas tai viistoon oikealle)
d e f,
niin algoritmi vertaa summia b+Max{d,e} ja c+Max{e,f} ja valitsee reitiksi suuremman summan.
Lisäksi kehitin algortmia kaksi kertalukua eteenpäin eli siten että se haistelee 1. tasolla ollessaan reittimaksimit 5-tasolle asti.
1. a                     
2. b c                  (Onneksi Mathematicassa on käytännöllinen
3. d e f                 Max{a,b,c,...} -funktio.)
4. g h i j
5. k l m n o

En kuitenkaan löytänyt näin maksimisummaa (ongelmassa 67 on 100-kerroksinen kolmio). Oma ennätykseni on tällä hetkellä muistaakseni 7070.

Ennen kuin haukutte algoritmini lyttyyn niin sanon etten missään nimessä väitä sitä erityisen hyväksi, mutta parempaakaan en äkkiä keksinyt, ja koska 15-kerroksinen kolmio ratkesi tuolla kolmen kerroksen haistelulla, niin ajattelin kokeilla samaa tuohon isompaan pyramidiin. Sitten ei malttanut olla kokeilematta 4. ja 5. kerroksen haisteluita.

Jos joutuisin ratkaisemaan tuollaisen ongelman kynällä ja paperilla niin tekisin varmaan seuraavalla tavalla:
1. Ympyröi kaikki luvut >= lukujen keskiarvo (tätä ei toki ihan hetkessä laske mutta jonku arvion sille saa) + k, k kokonaisluku
2. Yritä yhdistää ympyräluvuista hyvä reitti.
-> Jos reittiä ei saa, toteuta 1. kohta luvulla k-1 jne.

En vain nykyisillä ohjelmointitaidoilla osaa oikein pukea tätä tietokonemuotoon.

Jos on ideoita k.o. tehtävästä niin antaa tulla.

Ps.
Puukkoseikkailun loppulaskukin tuli, 11 euroa.

perjantai 9. toukokuuta 2008

Nyt on perjantai

Nyt voi heittää housut nurkkaan,
vääntää musiikin kovemmalle,
eikä se häiritse naapureita,
vaikka kello on jo yli kymmenen.
Nimittäin nyt on perjantai.
Voi keittää teetä eikä tarvitse pestä hampaita,
todellakin irti arjesta.
Eikä liitutaulun naputus häiritse naapureita,
vaikka kello on jo yli kymmenen,
sillä nyt on perjantai,
ja sielläkin on bileet.