- Timestamp:
- 04/27/09 23:04:26 (3 years ago)
- Location:
- trunk/sandbox/jhb/oc2
- Files:
-
- 2 modified
-
coinsplitting.py (modified) (2 diffs)
-
wallet.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/sandbox/jhb/oc2/coinsplitting.py
r285 r286 4 4 tokens = [] 5 5 i = 0 6 max_i = len(denominations) 6 7 while sum(tokens)<amount: 7 if i>= len(denominations):8 i = len(denominations)-18 if i>=max_i: 9 i = max_i -1 9 10 d = denominations[i] 10 11 rest = amount - sum(tokens) 11 12 if d == 1: 12 #print 'append %s' % d13 13 tokens.append(1) 14 14 i +=1 15 15 elif d <= rest-d + denominations[i-1]+1: 16 #print 'append %s' % d17 16 tokens.append(d) 18 17 i +=1 … … 30 29 picked.append(token) 31 30 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 31 if __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) 38 49 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 4 4 import occrypto 5 5 import messages 6 import coinsplitting 6 7 7 8 class Wallet(Entity): … … 166 167 def deleteCurrency(self,id): 167 168 del(self.storage[id]) 168 169 169 170 170 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) 181 172 182 173
