My own accounting python euler problem

Robert P. J. Day rpjday at crashcourse.ca
Sun Nov 8 07:14:00 EST 2009


On Sun, 8 Nov 2009, Ozz wrote:

>
> Hi,
>
> > My first question is:
> > 1. given a list of invoives I=[500, 400, 450, 200, 600, 700] and a
> > check Ch=600
> > how can I print all the different combinations of invoices that the
> > check is possibly cancelling
>
> Incidentally, I'm currently learning python myself, and was working
> on more or less the same problem as an exercise;
>
> For listing all different subsets of a list (This is what I came up
> with. Can it be implemented shorter, btw?):
>
> def subsets(L):
>         S = []
>         if (len(L) == 1):
>                 return [L, []]
>         else:
>                 for s in subsets(L[1:]):
>                         S.append(s)
>                         S.append(s + [ L[0]])
>         return S
>
> Now, to use the above piece of code (after 'import subset'):
>
> >>> subset.subsets([4,7,8,2])
> [[2], [2, 4], [2, 7], [2, 7, 4], [2, 8], [2, 8, 4], [2, 8, 7], [2, 8, 7, 4],
> [], [4], [7], [7, 4], [8], [8, 4], [8, 7], [8, 7, 4]]
> >>> map(sum,subset.subsets([4,7,8,2]))
> [2, 6, 9, 13, 10, 14, 17, 21, 0, 4, 7, 11, 8, 12, 15, 19]
>
> It's not a real solution yet, and as others have pointed out the
> problem is NP complete but it might help to get you going.

  does your solution allow for the possibility of different invoices
of equal amounts?  i would be reluctant to use the word "subset" in a
context where you can have more than one element with the same value.

rday
--


========================================================================
Robert P. J. Day                               Waterloo, Ontario, CANADA

            Linux Consulting, Training and Kernel Pedantry.

Web page:                                          http://crashcourse.ca
Twitter:                                       http://twitter.com/rpjday
========================================================================



More information about the Python-list mailing list