Zmud pomoc

Forum techniczne Arkadii.
Awatar użytkownika
Tercoral
Posty: 712
Rejestracja: 30 sty 2013 13:44

Re: Zmud pomoc

Post autor: Tercoral » 18 maja 2015 21:33

OMG!

A myslalem, ze ja glupie skrypty wymyslam...

wez monety z sakiewki
wez monety z plecaka
liczbamonet = 0
policz miedziane monety
miedziakiON
doliczyles sie XX miedzianych monet
miedziaki off
policz srebrne monety
srebrneON
doliczyles sie XX srebrnych monet
srebrne x 12(?) <- nie wiem
srebrne + miedziaki = liczbamonet
srebrne off

itp
...
zapakuj monety do pojemnika

liczbamonet - wydatek = liczbamonet
echo liczbamonet
TA DA !!
Tęczowe serce... :oops:

Awatar użytkownika
Herenvarno
Posty: 809
Rejestracja: 09 mar 2010 11:22

Re: Zmud pomoc

Post autor: Herenvarno » 18 maja 2015 21:43

Przy trzech tysiącach+ monet, mój skrypt jest szybszy o niebo od twego pomysłu.
Gdyby zależało mi na czasochłonnym liczeniu, stojąc jednocześnie w miejscu, pewnie stosowałbym to rozwiązanie.
Jedyna potrzeba zliczania na ten sposób monet, jest dla mnie przeliczenie kasy po treningach.
Nie każdy jest mile widziany w moim domu. Gdybym wszystkich traktował jednakowo, nikogo nie wyróżniłbym!

Awatar użytkownika
Kargrim
Posty: 12
Rejestracja: 06 kwie 2015 22:46

Re: Zmud pomoc

Post autor: Kargrim » 18 maja 2015 21:56

Jedyne optymalne co mi przychodzi do głowy to:

1 etap:

- wydajesz wszystkie miedziaki aż spłacisz należność
jeśli nie wystarczyło
- wydajesz wszystkie srebrne aż spłacisz należność
jeśli nie wystarczyło
- wydajesz wszystkie złote aż spłacisz należność
jeśli nie wystarczyło
- wydajesz wszystkie mithrylowe aż spłacisz należność

2 etap:

obliczasz różnicę pomiędzy tym co zapłaciłeś a ceną (np ujednoliconą w miedziakach) i robisz modulo na nominały

edit:

no i potem dodajesz to do swoich ilości monet, które wcześniej pomniejszyłeś o to ile jakich wydałeś przed otrzymaniem reszty

Awatar użytkownika
Herenvarno
Posty: 809
Rejestracja: 09 mar 2010 11:22

Re: Zmud pomoc

Post autor: Herenvarno » 18 maja 2015 22:07

W ten sposob dziala moj skrypt, w petlach %while.
Jak wspomnialem, jest to baaaardzo "zasobozerny" sposob, moze dlatego, ze liczac od srebrnych w "gore", odejmuje po jednej monecie - na poczatku srebrnej, az do wyczerpania itp.
Spowodowane jest to tym, ze kazdy rodzaj monet posiada inna wartosc w miedziakach, i nie jest to system dziesietny. Dlatego zapytalem, czy ktos ma pomysl na "zgrabne rozwiazanie".



Chyba wpadlem na pomysl jak to rozwiazac. Na chwile obecna zawieszam temat. Jesli bedzie dzialalo zgodnie z przewidywaniami, poinformuje jak to zrobilem.
Dziekuje wszystkim za chec pomocy.
Nie każdy jest mile widziany w moim domu. Gdybym wszystkich traktował jednakowo, nikogo nie wyróżniłbym!

Awatar użytkownika
Kargrim
Posty: 12
Rejestracja: 06 kwie 2015 22:46

Re: Zmud pomoc

Post autor: Kargrim » 18 maja 2015 22:18

W porządku. Ale znając cenę, możesz przedstawić ją w miedziakach. Odejmujesz tyle ile masz. Resztę dzielisz przez 12 i zaokrąglasz w górę (tyle brakuje srebra). Odejmujesz ile masz i resztę dzielisz przez 20 znów zaokrąglając w górę (tyle brakuje złota). To samo z mithrylem. W drugą stronę robisz to samo tylko rozdzielasz po nominałach to co zapłaciłeś z nadwyżką.

Masz 8 warunków z 8 sumami. Bez żadnej pętli.

edit up: powodzenia ;)

Awatar użytkownika
Herenvarno
Posty: 809
Rejestracja: 09 mar 2010 11:22

Re: Zmud pomoc

Post autor: Herenvarno » 18 maja 2015 23:08

Kod: Zaznacz cały

#Math Miedz_Mith {@VMith*24000} 
#Math Miedz_Gold {@VGold*240}
#Math Miedz_Silv {@VSilver*12}
#if (@VMiedz<@Naleznosc) {
                          #math VMiedz {@VMiedz+@Miedz_Silv}
                          #var Miedz_Silv {0}
                          #if (@VMiedz<@Naleznosc) {
                                                    #math VMiedz {@VMiedz+@Miedz_Gold}
                                                    #var Miedz_Gold {0}
                                                   }
                          #if (@VMiedz<@Naleznosc) {
                                                    #math VMiedz {@VMiedz+@Miedz_Mith}
                                                    #var Miedz_Mith {0}
                                                   }
                          #if (@VMiedz<@Naleznosc) {
                                                    #ec "Blad w obliczeniach, przelicz w tradycyjny sposob"
                                                   } {
                                                      #Math VMith {%eval(@Miedz_Mith*24000)} 
                                                      #Math VGold {%eval(@Miedz_Gold*240)}
                                                      #Math VSilv {%eval(@Miedz_Silver*12)}
                                                      #VMiedz {@VMiedz-@Naleznosc}
; ponizej alias przeliczajacy miedziaki na najwyzsze nominaly.
; zwracajacy  wynik Math_NOMINAL= ilosc sztuk
                                                      Przelicz_Na_Najwyzszy_Nominal @VMiedz
                                                      #Math VMith {@Math_Mith+@VMith}
                                                      #Math VGold {@Math_Gold+@VGold}
                                                      #Math VSilv {@Math_Silv+@VSilv}
                                                      #Var VMiedz {@Math_Miedz}
                                                  }
                     } {#Math VMiedz {@Math_Miedz-@Naleznosc}}
Nie każdy jest mile widziany w moim domu. Gdybym wszystkich traktował jednakowo, nikogo nie wyróżniłbym!

Awatar użytkownika
Talisa
Posty: 144
Rejestracja: 21 kwie 2015 23:40
Lokalizacja: Skellige IRL

Re: Zmud pomoc

Post autor: Talisa » 18 maja 2015 23:23

Kod: Zaznacz cały

#if @bilet - @cu < 0 
{
@cu = @cu - @bilet
}{
 @bilet = @bilet - @cu
 #if @bilet - @ar*12 < 0
 {
 @cu = %mod((@ar*12-@bilet),12)
 @ar = (@ar*12-@bilet)/12
 }{
  #if
itd...
Ostatnio zmieniony 19 maja 2015 07:00 przez Talisa, łącznie zmieniany 2 razy.
Everyone is fighting their own battle to be free from their past, to live in the present, and create a meaningful future for themselves. Don't judge, have a heart.

Awatar użytkownika
Herenvarno
Posty: 809
Rejestracja: 09 mar 2010 11:22

Re: Zmud pomoc

Post autor: Herenvarno » 19 maja 2015 00:14

Tez dobre.
Nie każdy jest mile widziany w moim domu. Gdybym wszystkich traktował jednakowo, nikogo nie wyróżniłbym!

Awatar użytkownika
Artak
Posty: 246
Rejestracja: 15 kwie 2015 16:40
Kontakt:

Re: Zmud pomoc

Post autor: Artak » 19 maja 2015 08:27

A odnośnie samego liczenia monet, to też jest szybszy sposób niż przez "policz", który można robić w trakcie wykonywania innych czynności :P (bo jednak "policz" niestety blokuje wszystko).
Wystarczy brać z sakiewki po n+1 monet, gdzie n+1 to minimalna ilość monet w których dostajesz komunikat "wziales wiele monet". Później po prostu przemnożyć ilość iteracji wyciągnięcia przez n+1, dodać ostatnią iterację i jest policzone (przez skrypt w ułamku sekundy).

Awatar użytkownika
Kargrim
Posty: 12
Rejestracja: 06 kwie 2015 22:46

Re: Zmud pomoc

Post autor: Kargrim » 20 maja 2015 11:53

Tylko jak ktoś wejdzie wtedy na lokację to mu monitor eksploduje :P

ODPOWIEDZ