Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > combinatorics via __future__ generators

Reply
Thread Tools

combinatorics via __future__ generators

 
 
Phlip
Guest
Posts: n/a
 
      11-19-2009
Python:

I have a quaint combinatorics problem. Before I solve it, or find a
solution among "generators", I thought y'all might like to show off
any solutions.

Given an array like this...

[0, 4, 3]

Produce an array like this:

[
[0, 0, 0],
[0, 1, 0],
[0, 2, 0],
[0, 3, 0],
[0, 1, 1],
[0, 2, 1],
[0, 3, 1],
[0, 1, 2],
[0, 2, 2],
[0, 3, 2],
]

The first array is the counts of options in 4 slots, and the second is
all combinations of indexes of each option, such that every option
associates once with every other option. The leading 0 simply
represents a slot with no options; the algorithm must preserve those.

This should be child's play for the generator package, right?

--
Phlip
http://zeekland.zeroplayer.com/
 
Reply With Quote
 
 
 
 
Phlip
Guest
Posts: n/a
 
      11-19-2009
On Nov 18, 4:58*pm, Phlip <phlip2...@gmail.com> wrote:
> Python:
>
> I have a quaint combinatorics problem. Before I solve it, or find a
> solution among "generators", I thought y'all might like to show off
> any solutions.
>
> Given an array like this...
>
> * [0, 4, 3]
>
> Produce an array like this:
>
> * [
> * * [0, 0, 0],
> * * [0, 1, 0],
> * * [0, 2, 0],
> * * [0, 3, 0],

[0, 0, 1],
> [0, 1, 1],
> * * [0, 2, 1],
> * * [0, 3, 1],

[0, 0, 2],
> [0, 1, 2],
> * * [0, 2, 2],
> * * [0, 3, 2],
> ]


I forgot those combinations!

>
> The first array is the counts of options in 4 slots, and the second is
> all combinations of indexes of each option, such that every option
> associates once with every other option. The leading 0 simply
> represents a slot with no options; the algorithm must preserve those.
>
> This should be child's play for the generator package, right?
>
> --
> * Phlip
> *http://zeekland.zeroplayer.com/


 
Reply With Quote
 
 
 
 
Chris Rebert
Guest
Posts: n/a
 
      11-19-2009
On Wed, Nov 18, 2009 at 4:58 PM, Phlip <> wrote:
> Python:
>
> I have a quaint combinatorics problem. Before I solve it, or find a
> solution among "generators", I thought y'all might like to show off
> any solutions.
>
> Given an array like this...
>
> Â*[0, 4, 3]
>
> Produce an array like this:
>
> Â*[
> Â* Â*[0, 0, 0],
> Â* Â*[0, 1, 0],
> Â* Â*[0, 2, 0],
> Â* Â*[0, 3, 0],
> Â* Â*[0, 1, 1],
> Â* Â*[0, 2, 1],
> Â* Â*[0, 3, 1],
> Â* Â*[0, 1, 2],
> Â* Â*[0, 2, 2],
> Â* Â*[0, 3, 2],
> ]
>
> The first array is the counts of options in 4 slots, and the second is
> all combinations of indexes of each option, such that every option
> associates once with every other option. The leading 0 simply
> represents a slot with no options; the algorithm must preserve those.
>
> This should be child's play for the generator package, right?


from itertools import imap, product

def special_range(n):
return (xrange(n) if n else [0])

def something(arr):
return product(*imap(special_range, arr))

print list(something([0,4,3]))

Cheers,
Chris
--
http://blog.rebertia.com
 
Reply With Quote
 
Phlip
Guest
Posts: n/a
 
      12-01-2009
Awesome thanks - but:

> from itertools import imap,product


Do we have a version for Python2.5? I have to support an older server
here; can't install a newer python on it...

 
Reply With Quote
 
John Yeung
Guest
Posts: n/a
 
      12-02-2009
On Dec 1, 5:55*pm, Phlip <phlip2...@gmail.com> wrote:
> Awesome thanks - but:
>
> > from itertools import imap,product

>
> Do we have a version for Python2.5? I have to support an older server
> here; can't install a newer python on it...


If you can get by with the performance of pure Python, a solution is
right in the documentation for 2.6:

###
def product(*args, **kwds):
# product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
# product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
pools = map(tuple, args) * kwds.get('repeat', 1)
result = [[]]
for pool in pools:
result = [x+[y] for x in result for y in pool]
for prod in result:
yield tuple(prod)
###

The docs for itertools are full of these definitions (for 2.6
functions) that can be used as recipes (if you don't have 2.6).

John
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Combinatorics Michael Robertson Python 12 02-13-2008 07:21 PM
Python and Combinatorics none Python 4 10-26-2007 07:41 AM
Python and Combinatorics Nic Python 4 05-16-2006 09:41 AM
[perl-python] combinatorics fun Xah Lee Python 7 02-11-2005 10:05 AM
combinatorics question Carnosaur C Programming 17 10-31-2003 03:48 PM



Advertisments