Changeset 286 for trunk

Show
Ignore:
Timestamp:
04/27/09 23:04:26 (3 years ago)
Author:
ocjhb
Message:

wallet is now using the coinsplitting tokenizer

Location:
trunk/sandbox/jhb/oc2
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/sandbox/jhb/oc2/coinsplitting.py

    r285 r286  
    44    tokens = [] 
    55    i = 0 
     6    max_i = len(denominations) 
    67    while sum(tokens)<amount: 
    7         if i>=len(denominations): 
    8             i = len(denominations) -1 
     8        if i>=max_i: 
     9            i = max_i -1 
    910        d = denominations[i] 
    1011        rest = amount - sum(tokens) 
    1112        if d == 1: 
    12             #print 'append %s' % d 
    1313            tokens.append(1) 
    1414            i +=1 
    1515        elif d <= rest-d + denominations[i-1]+1: 
    16             #print 'append %s' % d 
    1716            tokens.append(d) 
    1817            i +=1 
     
    3029            picked.append(token) 
    3130    return picked             
    32  
    33 dl = [[1,2,5,10,20,50,100],[1,3,9,27],[1,3,5,7,11,13,17,19,23],[1,17,33]] 
    34 dl = dl[0:1] 
    35 problems = 0 
    36 for denominations in dl: 
    37     print 'DENOMINATIONS %s' % denominations 
     31if __name__ == '__main__': 
     32    dl = [[1,2,5,10,20,50,100],[1,3,9,27],[1,3,5,7,11,13,17,19,23],[1,17,33]] 
     33    problems = 0 
     34    for denominations in dl: 
     35        print 'DENOMINATIONS %s' % denominations 
     36        print 
     37        for i in range(1,max(denominations)*10): 
     38            print 'Tokenize %i, ' % i, 
     39            tokens = tokenizer(denominations,i) 
     40            print 'tokens %s (%s)' % (tokens,sum(tokens)) 
     41            if sum(tokens) != i: 
     42                print 'fuckup' 
     43                break; 
     44            for j in range(1,i+1): 
     45                picked = testspend(tokens,j) 
     46                if sum(picked) != j: 
     47                    problems += 1 
     48                    print 'testing: %s, picked %s, sum %s, worked: %s' % (j,picked,sum(picked),sum(picked)==j) 
    3849    print 
    39     for i in range(1,max(denominations)*2): 
    40         print 'Tokenize %i, ' % i, 
    41         tokens = tokenizer(denominations,i) 
    42         print 'tokens %s (%s)' % (tokens,sum(tokens)) 
    43         if sum(tokens) != i: 
    44             print 'fuckup' 
    45             break; 
    46         for j in range(1,i+1): 
    47             picked = testspend(tokens,j) 
    48             if sum(picked) != j: 
    49                 problems += 1 
    50                 print 'testing: %s, picked %s, sum %s, worked: %s' % (j,picked,sum(picked),sum(picked)==j) 
    51 print 
    52 print 
    53 print 'Problems: %s' % problems 
    54                  
    55  
     50    print 
     51    print 'Problems: %s' % problems 
     52                     
     53    amount = 137 
     54    print tokenizer(dl[0],amount) 
  • trunk/sandbox/jhb/oc2/wallet.py

    r280 r286  
    44import occrypto 
    55import messages 
     6import coinsplitting 
    67 
    78class Wallet(Entity): 
     
    166167    def deleteCurrency(self,id): 
    167168        del(self.storage[id]) 
    168  
    169  
     169     
    170170    def tokenizeForBuying(self,amount,denominations): 
    171         denominations = [int(d) for d in denominations] 
    172         denominations.sort() 
    173         denominations.reverse() 
    174  
    175         out = [] 
    176         for d in denominations: 
    177             while amount and amount >= d: 
    178                 out.append(d) 
    179                 amount -= d 
    180         return out                 
     171        return coinsplitting.tokenizer([int(d) for d in denominations],amount)                    
    181172 
    182173