KSI FI MUNI ročník 2014

Programovacie jazyky, rady, poradňa...
Mr-Freek
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 469
Registrovaný: 14 júl 2014, 13:23

KSI FI MUNI ročník 2014

Príspevok od používateľa Mr-Freek »

Zdravíčko, tento rok sa chystám riešiť KSI FI MUNI tak som sa rozhodol vyriešiť minuloročné zadanie. Prvá úloha bola bez zádrhelu ale problem spočíva v tom že neviem sám posúdiť či je to riešenie naozaj efektívne ako by to posudzovali študenti ktorý to organizujú :) preto zakladám toto vlákno kde budem pridávať svoje riešenia a niekto skúsený sa hádam zlutuje a poriadne ma dodr*** za logistické chyby.

Tak úloha jedna bola vymyslieť algoritmus na hádanie čísla v zadanom rozsahu.

Funkcia na výpočet rozdielu čísel:
Spoiler

Kód: Vybrať všetko

def diff(num1,num2):
    ans = ((abs(num1 - num2))/2)
    if ans == 0:
           ans += 1
    return ans
Funkcia na hádanie čísla:
Spoiler

Kód: Vybrať všetko

def guess(answer):
    global old_g, new_g
    if answer == "more":
        help = new_g + diff(old_g, new_g)
    elif answer == "less":
        help = new_g - diff(old_g, new_g)
    old_g = new_g 
    new_g = help
    return new_g
od štartu majú premenné hodnotu new_g = range; old_g = new_g/2 za predpokladu že najprv sa vypíše prvý typ new_g a až potom sa spustí po prvej odpovedi nižšie/vyžšie celý algoritmus.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: KSI FI MUNI ročník 2014

Príspevok od používateľa audiotrack »

zaujímavá téma, škoda že som ju našiel až teraz. Neviem ako sa mohlo stať že mi unikla :) Ak to je ešte aktuálne, tak skúsim opripomienkovať. Vyzerá to na python? V tom nerobím, tak neviem ako má riešené niektoré veci ohľadom pamäte, ale lepšie je vyhnúť sa globálnym premenným. Hlavne ak ide o tú optimalizáciu. Tiež by som upravil názvy tých premenných. old_g a new_g mi nič nehovoria (až po čase mi napadlo že to je asi old_guess?). Chcelo by to niečo viacvravné. Pri tej počiatočnej inicializácii new_g nastaviť na range/2. Je to viac hovoriace ako odvolávať sa na premennú ktorá ukazuje na ďalšiu premennú. To sú ale len také drobnosti. K algoritmu:
netuším prečo je parameter tej funkcie nejaký reťazec. Answer ako parameter je nejednoznačné. AK niekto chce použiť túto funkciu, musí ju celú prečítať aby vedel aké hodnoty môže nadobúdať. A tiež neviem ako tam chceš vyriešiť ak na prvýkrát uhádne, keď máš len možnosti viac a menej.
new_g a old_g ma tiež metie. Netreba mi pamätať nejaké staré a nové tipy, treba mi pamätať maximálne minimum a minimálne maximum aby som interval zužoval. V tej vetve "more" by bolo min += new_g a v tej vetve "less" by bolo max -= new_g. Tým si interval zužujem. Nový tip (tá tvoja premenná help, čo tiež netuším prečo sa volá help keď je to nový tip) by bola min + diff(min, max)
funkcia diff bude bez toho delenia, teda iba return abs(num1 - num2)
Mr-Freek
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 469
Registrovaný: 14 júl 2014, 13:23

Re: KSI FI MUNI ročník 2014

Príspevok od používateľa Mr-Freek »

Ďakujem za pripomienky, presne tie chyby ktoré si mi opravil ma práve učia nerobiť profesory na coursere. Už tie pravidlá aj aplikujem a mám pocit že mi to neskutočne zprehladnilo programy a aj sa mi ľahšie hľadajú vlastné chyby. Inak je to aktuálne ale úprimne poviem že sa neviem presne vyjadriť k tvojím pripomienkam pretože som ten kód písal dávno a sám po sebe musím lúštiť. Odvtedy som spravil len jedno ďalšie zadanie lebo som sa tomu extra nevenoval ale v počas nudnejších hodín v škole si určite budem na papier čarbať algoritmy a potom to hodím sem a poteším sa presne takémuto komentáru :) btw je to python
Napísať odpoveď