Zmud pomoc

Forum techniczne Arkadii.
Awatar użytkownika
Werbat
Posty: 1357
Rejestracja: 12 lut 2009 21:25
Lokalizacja: Poznań
Kontakt:

Re: Zmud pomoc

Post autor: Werbat »

Super podejście, Herenvarno. Nie wpadłeś na to, że wklejając ten kawałek kodu na byle wklej.org i dając linka za tydzień kolejny niezorientowany będzie mógł skorzystać?
I aim to misbehave.
Systematycznie dążę do wyrugowania hejtu z arsenału swoich środków wyrazu.
Awatar użytkownika
Herenvarno
Posty: 809
Rejestracja: 09 mar 2010 11:22

Re: Zmud pomoc

Post autor: Herenvarno »

Werbacie, nie wpadles na to, ze byc moze sa osoby, ktorym nic nie chce dac do rak osobiscie, w zwiazku z tym nie wkleje kodu?
Re Werbat
Podziekuj i pogratuluj kolegom z forum:
Khristoff pisze:Wszystkie 805 postów które napisałeś to stek bzdur.
W koncu to stek bzdur :P.
Ostatnio zmieniony 29 maja 2015 15:47 przez Herenvarno, łącznie zmieniany 1 raz.
Nie każdy jest mile widziany w moim domu. Gdybym wszystkich traktował jednakowo, nikogo nie wyróżniłbym!
Awatar użytkownika
Werbat
Posty: 1357
Rejestracja: 12 lut 2009 21:25
Lokalizacja: Poznań
Kontakt:

Re: Zmud pomoc

Post autor: Werbat »

Tym bardziej gratuluję podejścia.
I aim to misbehave.
Systematycznie dążę do wyrugowania hejtu z arsenału swoich środków wyrazu.
Awatar użytkownika
Herenvarno
Posty: 809
Rejestracja: 09 mar 2010 11:22

Re: Zmud pomoc

Post autor: Herenvarno »

Posiadam skrypt, kontrolujacy wydatki mojej postaci. Liczac skrupulatnie wszelkie zyskane monety, jak tez wydawane.
Pieknie podlicza koszt denominacji i inne takie duperelki.
W skrocie, Zmud kontroluje jak wiele, oraz jakich monet ma przy sobie postac.
Jednak jedna rzecz wydaje mi sie strasznie nieefektywnie zaprojektowana w skrypcie.
Przypuscmy ze, postac ma przy sobie:

Kod: Zaznacz cały

; +------------------------------------+
; | Zmienne dotyczace monet przy sobie |
; +------------------------------------+
; mithrylowe monety
#var Mithryl {2}
; zlote monety
#var AUrum {7}
; srebrne monety
#var ARgentum {0}
; miedziane monety
#var CUprum {42}
Nasza postac wlasnie placi za bilet wart przykladowe 200 miedziakow.
Triger wylapuje te informacje, porownuje wielkosc 200 miedziakow ktore wlasnie zaplacono, ze zmienna @CUprum.
Orientuje sie, ze zaplata nie mogla odbyc sie przy pomocy samych miedziakow.
Tu moj skrypt przelicza - jakie monety powinny zostac po tej operacji finansowej, do dyspozycji postaci.
Niestety, sam skrypt jest bardzo "niewydajny".
Ma wiec ktos pomysl na lekkie, wydajne oskryptowanie takiego obliczenia?
Nie każdy jest mile widziany w moim domu. Gdybym wszystkich traktował jednakowo, nikogo nie wyróżniłbym!
Awatar użytkownika
Artak
Posty: 247
Rejestracja: 15 kwie 2015 16:40
Kontakt:

Re: Zmud pomoc

Post autor: Artak »

Ale jak dla mnie masz algorytmowo dwa podejścia (zależy co tak na prawdę chcesz mieć na wyjściu).
Jeśli chcesz mieć ilość monet, które postaci zostało, to niestety algorytm idzie po kolei:
Najpierw wydaje wszystkie miedziaki
Sprawdza czy zostało coś do zapłacenia
Wydaje srebrne monety przeliczone na miedziaki
Sprawdza czy zostało coś do zapłacenia
...
Jak nie zostało nic do zapłacenia, to sprawdza ile pozostało ostatnio wydanych monet i do posiadanego majątku dolicza resztę, którą postać powinna otrzymać po wydaniu monet.
Jednak, jeśli by liczyć jaki majątek ma postać (nie patrząc na to jakie nominały aktualnie znajdują się w sakiewce), to imho najlepszym sposobem byłoby przetrzymywanie wszystkiego w ilości miedziaków i w tym momencie przy wyrzucaniu na ekran po prostu przeliczyć na bardziej sensowne nominały.
Kjell
Posty: 70
Rejestracja: 23 kwie 2015 11:01

Re: Zmud pomoc

Post autor: Kjell »

No nie zamiesciłeś skryptu, więc cięzko powiedzieć, dlaczego jest niewydajny.
Orientuje sie, ze zaplata nie mogla odbyc sie przy pomocy samych miedziakow.
Na podstawie tego zdania zakładam, że stosujesz instrukcje warunkowe, w wyniku czego skrypt jest bardziej rozbudowany, niż byś chciał. Dobrze zgaduję?

Spróbowałbym tak: posiadany stan monet zamienić na miedź, odjąć wydane miedziaki, z powrotem zamienić na mt/zl/dr/md. Wg mnie ta zasada ma sens dla każdej transakcji, nawet jeśli do triggera lecą nie tylko miedziaki. Zeby nie przeliczac za kazdym razem w obie strony uzywalbym nie 4 zmiennych przechowujacych stan przy sobie, a 5. Piąta to kwota całkowita w miedzi. Jej używasz do obliczeń, pozostałe 4 do wyświetlania stanu posiadanych pieniędzy.

Wyliczenie calkowitej ilosci miedzi
TotalMd = md + sr * 12 + zl * 240 + mt * 24000

Wydatek
TotalMd = TotalMd - WydatekMd

Wyliczenie wartosci dla poszczegolnych jednostek
x = TotalMd
mt = x / 24000
x = x \ 24000
zl = x / 240
x = x \ 240
sr = x / 12
x = x \ 12
md = x

Wg https://www.zuggsoft.com/zmud/help6/Expressi.htm znak "/" to dzielenie z odrzuceniem części ułamkowej, natomiast '\" to dzielenie ze zwróceniem modulo (reszty z dzielenia). Nie jestem matematycznym "miszczem", ale mam nadzieję, że jest ok.

Może ktoś będzie miał lepszy pomysł. ;)
Awatar użytkownika
Artak
Posty: 247
Rejestracja: 15 kwie 2015 16:40
Kontakt:

Re: Zmud pomoc

Post autor: Artak »

Kjell problem tego rozwiązania jest przy danych wejściowych. Jeśli na wejściu masz monety, które nie do końca są najlepiej ułożone nominałami (czyli przykładowo 1mt, 120zł, 40sr, 5mdz) to przeliczanie całości na miedź da Ci błędny wynik (w momencie jeśli interesuje Cię dokładna ilość monet danego rodzaju, jak napisałem w poprzednim poście)
Kjell
Posty: 70
Rejestracja: 23 kwie 2015 11:01

Re: Zmud pomoc

Post autor: Kjell »

No jak to?
1mt, 120zl, 40sr, 5md to jest to samo co 2mt 22zl 0 sr 5 md, zgadza sie? Podstaw jedno i drugie do wzoru:

x = md + sr * 12 + zl * 240 + mt * 24000

5 + 40 * 12 + 120 * 240 + 1 * 24000 = 5+ 480 + 28800 + 24000 = 53285
5 + 0 * 12 + 22 * 240 + 2 * 24000 = 5 + 0 + 5280 + 48000 = 53285

Wynik ten sam. I teraz mozesz wykonac operacje dodawania/odejmowania (lub nie, jesli nie ma takiej potrzeby) i zamienic z powrotem na mt/zl/sr/md wg wzoru w moim poprzednim poscie.
Awatar użytkownika
Artak
Posty: 247
Rejestracja: 15 kwie 2015 16:40
Kontakt:

Re: Zmud pomoc

Post autor: Artak »

Kjell teoretycznie to samo, ale mając 2mt 22zl 0 sr 5 md masz 29 monet w sakiewce, a mając 1mt, 120zl, 40sr, 5md masz 166 monet w sakiewce. Mając małą sakiewkę i dostając jakieś nowe monety w pierwszym przypadku spokojnie je wrzucasz, w dugim przypadku nagle monety Ci się nie mieszczą :) I dlatego napisałem w swoim poście, że wszystko zależy od tego co pytający chce osiągnąć (czy chce wiedzieć jakie monety ma, czy chce wiedzieć jaki ma majątek :) )
Awatar użytkownika
Herenvarno
Posty: 809
Rejestracja: 09 mar 2010 11:22

Re: Zmud pomoc

Post autor: Herenvarno »

Chodzi wlasnie by znac dokladna ilosc kazdego nominalu.
Nie każdy jest mile widziany w moim domu. Gdybym wszystkich traktował jednakowo, nikogo nie wyróżniłbym!
ODPOWIEDZ