Very cool - I'm going to take a look at this.  Thanks!  And thanks to all
for the feedback.

To answer the question as to why this problem came up in the first place -
its exactly the reason that Ian mentioned.  The challenge I was given was
essentially:  If you knew that the next lottery ticket would contain a value
from a given set - how many lottery tickets would you need to purchase?


 - Ken



On 9/26/07, Brian Swartzfager <[EMAIL PROTECTED]> wrote:
>
> Hi, Ken,
>
> I recently had to build a permutation generator to generate all the unique
> combinations of a set of
>
> data where (just as in your case) order was not a factor.  So given the
> data set "A,B,C", I needed
>
> to get out:
>
> A,B,C
> A,B
> B,C
> A,C
> A
> B
> C
>
> I looked at my code and was able to modify it to (hopefully) suit your
> purpose.  It requires using recursion, so most of the work is done in a CFC
> function.
>
> Here's the code for the CFC:
>
> <cfcomponent displayname="Permutations" hint="I generate the
> permutations."
> output="false">
>
>         <cffunction name="generatePermutations" output="true"
> returntype="string" hint="I return a list of all possible combinations of a
> list of items where the order of the items is constant but one or more items
> can be missing">
>         <cfargument name="starting_list" type="string" required="yes"
> hint="The starting list of items.  The list will grow smaller via
> recursion." />
>         <cfargument name="permutation_list" type="string" required="yes"
> hint="The current list of permutations, which will grow longer." />
>         <cfargument name="start_delimiter" type="string" required="yes"
> hint="The list delimiter." />
>         <cfargument name="perm_delimiter" type="string" required="yes"
> hint="The delimiter for the final list.  Should be different from
> start_delimiter" />
>         <cfset var temp= "">
>         <cfset var p_list= arguments.permutation_list>
>
>         <!---Determine if the full list of items is already in the
> permutations list.  If not, add it--->
>         <cfif Not ListFind(p_list,arguments.starting_list,
> arguments.perm_delimiter) AND ListLen(arguments.starting_list,",") EQ 6>
>                 <cfset p_list= ListAppend(p_list,arguments.starting_list,
> arguments.perm_delimiter)>
>         </cfif>
>
>         <!---If starting_list length is not 6, loop and call the function
> for each iteration of the loop--->
>         <cfif ListLen(arguments.starting_list,arguments.start_delimiter)
> GT 6>
>                 <cfloop index="gone" from="1" to="#ListLen(
> arguments.starting_list,arguments.start_delimiter)#">
>                         <cfset temp= ListDeleteAt(arguments.starting_list
> ,gone,arguments.start_delimiter)>
>                         <cfinvoke component="Permutations"
> method="generatePermutations" returnvariable="p_list" starting_list="#temp#"
> permutation_list="#p_list#" start_delimiter="#arguments.start_delimiter#"
> perm_delimiter="#arguments.perm_delimiter#"></cfinvoke>
>                 </cfloop>
>         </cfif>
>
>         <cfreturn p_list />
>
>         </cffunction>
>
> </cfcomponent>
>
>
> ....And here's the code for a page that you can use to test it:
>
> <cfsetting requesttimeout="600">
> <cfoutput>
>
>         <cfset inputValues1= '1,2,3,4,5,6,7,'>
>         <cfset inputValues2= '1,2,3,4,5,6,7,8,9,10,11,12'>
>
>         <p>
>                 inputValues1 is:  #inputValues1#
>         </p>
>
>         <cfinvoke component="Permutations" method="generatePermutations"
> starting_list="#inputValues1#" permutation_list="" start_delimiter=","
> perm_delimiter="|" returnvariable="fullPermutationList"></cfinvoke>
>
>         <p>List the permutations:</p>
>         <ul>
>           <cfloop index="combo" list="#fullPermutationList#"
> delimiters="|">
>              <li>#combo#</li>
>           </cfloop>
>         </ul>
>
> </cfoutput>
>
>
> ....It can render your "1,2,3,4,5,6,7" example pretty quickly, but it
> takes a pretty long time to do something larger like a 12-item set (hence
> the <cfsetting> tag to increase the timeout), and I didn't have the time to
> figure out how much time it would take to process a full 20-item list.
>
> Maybe there's a better way to do it, but hopefully this at least provides
> a starting point.
>
> --
> Brian Swartzfager
> [EMAIL PROTECTED]
>
>
>
> 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Get the answers you are looking for on the ColdFusion Labs
Forum direct from active programmers and developers.
http://www.adobe.com/cfusion/webforums/forum/categories.cfm?forumid-72&catid=648

Archive: 
http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:289698
Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm
Unsubscribe: 
http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4

Reply via email to