| | 22 | def prepare_for_exchange(denominations,oldcoins,newcoins): |
| | 23 | """returns ([value to keep,..],[value for paying,...],[value for blank,...]), |
| | 24 | assumes that all newcoins are exchanged anyhow""" |
| | 25 | |
| | 26 | oldcoins = list(oldcoins) |
| | 27 | oldcoins.sort() |
| | 28 | oldcoins.reverse() |
| | 29 | |
| | 30 | newcoins = list(newcoins) |
| | 31 | newcoins.sort() |
| | 32 | newcoins.reverse() |
| | 33 | |
| | 34 | amountold = sum([int(o) for o in oldcoins]) |
| | 35 | amountnew = sum([int(n) for n in newcoins]) |
| | 36 | amount = amountold + amountnew |
| | 37 | |
| | 38 | targettokens = tokenizer(denominations,amount) |
| | 39 | targettokens.sort() |
| | 40 | targettokens.reverse() |
| | 41 | keepold = [] |
| | 42 | makenew = [] |
| | 43 | for tt in targettokens: |
| | 44 | try: |
| | 45 | keepold.append(oldcoins.pop(oldcoins.index(tt))) |
| | 46 | except ValueError: |
| | 47 | makenew.append(tt) |
| | 48 | |
| | 49 | return (keepold,oldcoins,makenew) |
| | 50 | |
| | 51 | |
| 32 | | if __name__ == '__main__': |
| 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]] |
| | 62 | |
| | 63 | def test_tokenizer(): |
| | 86 | |
| | 87 | def test_prepare_for_exchange(): |
| | 88 | denominations = dl[0] |
| | 89 | startvalue = max(denominations) |
| | 90 | for i in range(1,startvalue * 2 +1): |
| | 91 | print '#'*20,' i: %s ' % i, '#' * 20 |
| | 92 | start = tokenizer(denominations,i) |
| | 93 | for j in range(1,i*3 +1): |
| | 94 | print 'j: %s - ' % j, |
| | 95 | newcoins = tokenizer(denominations,j) |
| | 96 | keepold,paywith,makenew = prepare_for_exchange(denominations,start,newcoins) |
| | 97 | sumkeep = sum(keepold) |
| | 98 | sumnew = sum(makenew) |
| | 99 | total = sumkeep + sumnew |
| | 100 | print "keep: %s, tomake: %s, paywith: %s, %s, sum: %s" % (keepold,makenew,paywith,newcoins,total) |
| | 101 | |
| | 102 | if __name__ == '__main__': |
| | 103 | |
| | 104 | dl = [[1,2,5,10,20,50,100],[1,3,9,27],[1,3,5,7,11,13,17,19,23],[1,17,33]] |
| | 105 | #test_tokenizer() |
| | 106 | #test_prepare_for_exchange() |
| | 107 | print "keep: %s, paywith: %s, makenew: %s" %prepare_for_exchange(dl[0],[10],[5,2]) |
| | 108 | |
| | 109 | |
| | 110 | |
| | 111 | |