Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pomoc oko otkrivanja bug-a i optimizacije koda

[es] :: Python & Zope :: Pomoc oko otkrivanja bug-a i optimizacije koda

[ Pregleda: 819 | Odgovora: 6 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

StefanJer91
Stefan Jeremic
Beograd

Član broj: 121923
Poruke: 127
*.kalik.info.



Profil

icon Pomoc oko otkrivanja bug-a i optimizacije koda28.05.2007. u 11:13

Pre nesto manje od mesec dana na jednom drugom forumu je bio mali porgraming chalenge na kome sam pobedio, a cilj je bio napraviti program koji moze da odredi koliko u kojoj casi ima sampanjca ako mu se na pocetku daju informacije koliko ima redova, zapreminu case (sve case su iste zapremine) i kolicinu sampanjca koji se sipa u prvu casu.
A case su poredjane ovako
...Y
..YY
.YYY
YYYY
Ovde Y predstavlja casu, sto znaci ako sipate u prvu casu vecu kolicinu od njene zapremine to ce se preliti u druge 2 case i tako redom. Ja sam uspeo to da napravim ali je program bo dosta spor sa vecim kolicinama, pa sam odlucio da ga optimizujem, i evo sta sam uradio ali u kodu ima neki bug koji ne mogu da nadjem pa bih molio malo iskusnije programere da mi pomognu i ako znaju da kazu u cemu je problem
Code:


#Uraditi: Napravi lepo prelivanje
class Casa:
    def __init__(self, zapremina):
        self.z = zapremina
        self.p = 0
    def prelij(self,val):
        for red in case:
            if self in red:
                try:
                    mr = case.index(red) # mesto reda u matrici                    
                    case[mr+1][case[mr].index(self)].puni(val/2.)
                    case[mr+1][case[mr].index(self)+1].puni(val/2.)
                except:pass
                break
                
    def puni(self, value):
        self.p+= value
        if self.p > self.z:
            self.prelij(self.p - self.z)
            self.p = self.z



redovi = input('Unesi broj redova: ')
V = input('Unesi zapreminu case: ')
kol = input('Unesi kolicinu sampanjca: ')
case = []
for w in range(redovi):
    case.append([Casa(V)]*(w+1))



case[0][0].puni(kol)
      
while 1:
    x = input('Unesi red u kom se nalazi casa: ')
    y = input('Unesi koja je casa po redu: ')
    print case[x-1][y-1].p



Ako neko ima bolju ideju kako ovo moze da se uradi, bio bih mu zahvalan da i on prilozi svoju skriptu
28.05.2007. u 11:13 

StefanJer91
Stefan Jeremic
Beograd

Član broj: 121923
Poruke: 127
*.kalik.info.



Profil

icon Re: Pomoc oko otkrivanja bug-a i optimizacije koda28.05.2007. u 11:19
Za svaki slucaj ostavio sam i predjasnji kod

Code:



class Casa:
    global case
    def __init__(self, zapremina, mesto):
        self.z = zapremina
        self.preliveno= 0
        self.p = 0
        self.m = mesto #red i meso napr 3 red 2 mesto
    def prelij(self): 
        for casa in case:
            if casa.m == (self.m[0]+1,self.m[1])\
               or casa.m == (self.m[0]+1,self.m[1]+1):
                casa.puni(self.preliveno/2.)
                
    def puni(self, value):
        self.p+=value
        self.preliveno = self.p-self.z
        if self.p > self.z:
            self.p = self.z
            self.prelij()


redovi = input('Unesi broj redova: ')
V = input('Unesi zapreminu case: ')
kol = input('Unesi kolicinu sampanjca: ')

sve = []
for red in range(redovi):
    sve.append(range(red+1))
brcasa = 0
for x in sve:
    brcasa+=len(x)



case = []
for red in sve:
    for poz in red:
        case.append(Casa(V, (sve.index(red), poz)))
case[0].puni(kol)
      
while 1:
    x = input('Unesi red u kom se nalazi casa: ')
    y = input('Unesi koja je casa po redu: ')
    for casa in case:
        if casa.m == (x-1,y-1):
            print casa.p
28.05.2007. u 11:19 

StefanJer91
Stefan Jeremic
Beograd

Član broj: 121923
Poruke: 127
*.mainstream.co.yu.



Profil

icon Re: Pomoc oko otkrivanja bug-a i optimizacije koda30.05.2007. u 18:59
Ahm, zar niko ne moze da izdvoji malo vremena i pruzi mi pomoc... Hajde molim vas, znam da ovde ima puno iskusnijih ljudi od mene koji bi mogli da nadju resenje za ovaj problem.
30.05.2007. u 18:59 

alex
Aleksandar Radulovic
Team/Project Manager, Software Development, Síminn hf.
Reykjavik, Iceland

Administrator
Član broj: 71
Poruke: 2106
*.siminn.is.

Jabber: maurice.chavez@gmail.com
ICQ: -1
Sajt: www.a13x.info


Profil

icon Re: Pomoc oko otkrivanja bug-a i optimizacije koda01.06.2007. u 14:45
Poceo sam detaljnije da proucavam tvoj kôd. Fundamentalna stvar koja, verujem, nije adresirana u kôdu je cinjenica da se neke od casa (konkretno unutrasnje case) pune duplo brze od spoljasnjih (jer imaju dve case iznad iz kojih se preliva sampanjac).

Malo sam kratak sa vremenom ali cu probati da posaljem svoje resenje sto pre.
Alex: My favorite site is http://localhost/
R.J. Oppenheimer: "I am become death, destroyer of worlds" (1945 AD)
01.06.2007. u 14:45 

StefanJer91
Stefan Jeremic
Beograd

Član broj: 121923
Poruke: 127
*.kalik.info.



Profil

icon Re: Pomoc oko otkrivanja bug-a i optimizacije koda01.06.2007. u 18:46
Ok, unapred hvala. Nadam se da ti nece oduzeti puno vremena.
01.06.2007. u 18:46 

StefanJer91
Stefan Jeremic
Beograd

Član broj: 121923
Poruke: 127
*.mainstream.co.yu.



Profil

icon Re: Pomoc oko otkrivanja bug-a i optimizacije koda13.06.2007. u 18:28
Alex kako napredujes, ako jos radis?
13.06.2007. u 18:28 

alex
Aleksandar Radulovic
Team/Project Manager, Software Development, Síminn hf.
Reykjavik, Iceland

Administrator
Član broj: 71
Poruke: 2106
*.siminn.is.

Jabber: maurice.chavez@gmail.com
ICQ: -1
Sajt: www.a13x.info


Profil

icon Re: Pomoc oko otkrivanja bug-a i optimizacije koda14.06.2007. u 11:06
Nadam se da cu uspeti da zavrsim kako izmene na tvom kôdu, tako i moju (concurrent) verziju sad za vikend. Izvini na kasnjenju, posao pritegao..

Alex: My favorite site is http://localhost/
R.J. Oppenheimer: "I am become death, destroyer of worlds" (1945 AD)
14.06.2007. u 11:06 

[es] :: Python & Zope :: Pomoc oko otkrivanja bug-a i optimizacije koda

[ Pregleda: 819 | Odgovora: 6 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.