Moderators SmOke_N Posted August 5, 2005 Moderators Share Posted August 5, 2005 How could I make an array to go thru all possible combinations of: 12345 ? Like so: 12345 21345 3's down 4's down 5's down 12354 21354 12435 21435 12453 21453 12534 21534 12543 21543 13245 23145 13254 23154 13425 23415 13452 23451 13524 23514 13542 23541 14235 24135 14253 24153 14325 24315 14352 24351 14523 24513 14532 24531 15234 25134 15243 25143 15324 25314 15342 25341 15423 25413 15432 25431 I don't need them displayed like this, I only want to be able to find every combination. Thanks, Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
/dev/null Posted August 6, 2005 Share Posted August 6, 2005 How could I make an array to go thru all possible combinations of: 12345 ?you need an algorithm to calculate the permutions of 12345. Below I posted a link with a pretty good explanation and some C++ sample code. Use this to create an AutoIT function.http://www.codeguru.com/Cpp/Cpp/algorithms...icle.php/c7605/CheersKurt __________________________________________________________(l)user: Hey admin slave, how can I recover my deleted files?admin: No problem, there is a nice tool. It's called rm, like recovery method. Make sure to call it with the "recover fast" option like this: rm -rf * Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted August 6, 2005 Author Moderators Share Posted August 6, 2005 Thanks /dev/null ... Although I don't know C++ , it's at least a start in some direction. Off to see how much more I can confuse myself. Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
hgeras Posted August 6, 2005 Share Posted August 6, 2005 I'll give you some hints about how to transcode the source.It's been a while since i've dealt with C== so i'll try my best In C++ When you create a new variable you usually declare the type.in autoit that is not needed most of the times.when you see a variable with an * before it ,it's a pointer.There is nothing like this in autoit. So this code in C++ void circularPrint(char *str) { int len = strlen(str); char *mystr = new char [len +1]; int i,j; for(i=0; i <len; i++ ) { for(j=0;j<len; j++ ) mystr[j] = str[(i+j)%len]; mystr[j] =0; totCount++; // comment the line below to supress the string output cout << mystr << endl; } delete []mystr; return; } would be like this in AutoIt Func circularPrint($str) $len=StringLen($str) $mystr=$len+1 for $i=0 to $len -1 for $j=0 to $len -1 mystr[$j]=str[($j+$i)%$str] <--This doesnt exist in Autoit and i'm not sure what it does to explain it.... mystr[$j]=0 msgbox(0,"",$mystr) Next Next endfunc As you can see there is a diffent approach in working with arrays in C++ cos $mystr and $str are arrays.You have to change it according to the autoit approach. The 2 sources above dont do the same thing (the autoit one doesnt even work) but i was just trying to clarify some of the symbology of C++. I hope someone more experienced than me will tell you more.... Good Luck. Useful information about COM/Objects referenceMy Scripts:PapDefragNvidia Temperature Logger V3.0 with graph analyzerAutoiIt Update Checker And Downloader V1.0ArrayPush UDF Link to comment Share on other sites More sharing options...
/dev/null Posted August 6, 2005 Share Posted August 6, 2005 Thanks /dev/null ... Although I don't know C++ , it's at least a start in some direction.Off to see how much more I can confuse myself.<{POST_SNAPBACK}>Try this. I found my own algorithm for this problem....expandcollapse popupfunc rotate($sString, $nRotateLevel) local $aStringArray = StringSplit($sString,"") local $nStartRotate = $aStringArray[0] - $nRotateLevel + 1 local $n, $tempchar, $tempstr = "", $retval = "" for $n = 1 to $nStartRotate - 1 $tempstr= $tempstr & $aStringArray[$n] next $tempchar = $aStringArray[$nStartRotate] for $n = $nStartRotate+1 to $aStringArray[0] $retval = $retval & $aStringArray[$n] next $retval = $tempstr & $retval & $tempchar return $retval endfunc func permute_internal($sString, $nRotateLevel, byref $permutations) local $n, $str dim $arr[$nRotateLevel] if $nRotateLevel = 2 then $permutations = $permutations & ":" & rotate($sString,$nRotateLevel) return endif $str = $sString for $n = 0 to $nRotateLevel -1 $str = rotate($str,$nRotateLevel) $arr[$n] = $str ;--- special check, to stop a level beeing printed twice --- if not (($n = 0) AND (StringLen($sString) > $nRotateLevel)) then $permutations = $permutations & ":" & $arr[$n] endif permute_internal($arr[$n],$nRotateLevel-1,$permutations) next endfunc func permute($sString) global $permutations = "" permute_internal($sString,StringLen($sString),$permutations) $permutations = StringTrimLeft($permutations,1) return StringSplit($permutations,":") endfunc ;----------------------------------------------------------------------------- ;-- MAIN ;----------------------------------------------------------------------------- $permutarray = permute("1234") $msg = "" for $n = 1 to $permutarray[0] $msg = $msg & $permutarray[$n] & @CRLf next msgbox(0,"", $msg)CheersKurt __________________________________________________________(l)user: Hey admin slave, how can I recover my deleted files?admin: No problem, there is a nice tool. It's called rm, like recovery method. Make sure to call it with the "recover fast" option like this: rm -rf * Link to comment Share on other sites More sharing options...
hgeras Posted August 6, 2005 Share Posted August 6, 2005 (edited) /dev/null gave you what you need from what i see.Last night when i saw your post I had a different approach with a simple 2-dimensional array.I'm not goin to write the code cos i didnt finish it since your issue is solved.But i'd like it posted so as to see if that indeed works....I'm goin to explain the logic behind this...This logic is used when you make truth tables in logical circuits....The possible combinations are 5^5=3125 so you make this array $numbers[3126][6] .I use one more to exclude 0's.... So we have a matrix...A\B 0 | 1(5^4) | 2 (5^3) | 3(5^2) | 4(5^1) | 5(5^0)0 | - - - - - -1 | - 1 1 1 1 12 | - 1 1 1 1 23 | - 1 1 1 1 34 | - 1 1 1 1 45 | - 1 1 1 1 56 | - 1 1 1 2 17 | - 1 1 1 2 2..3125And I'm explaining.The powers indicate every when a digit increases. So the 5th digit changes every 5^0=1 digit the 4th one every 5^1=5 digits ,the 3rd one every 5^2=25 digits and so on.So if you fill the 5th element with numbers from 1 to 5 so many times that it reaches 3125 (that is 3125\(5*1)=625 times), the 4th element with 1 to 5 and every number repeating itself (5^1)=5 times before increasing until it reaches 3125 (that is 3125\(5*5)=125 times), the 3rd element with numbers 1 to 5 with every number repeating for (5^2)=25 times before increasing until it reaches 3125 (that is 3125\(5*25)= 25 times) and so on then you will fill the array with all possible combinations.To access that - let's say combination #234 a simple for is needed:For $i = 1 to 5 $combination&=$number[234][$i] Next MsgBox(0,"","Combination #234 : " & $combination)If you want to access all possible combinations then what you need is a double For with $i=1 to 5 and $j=1 to 3125 and you are done...That's all. I hope i made the concept clear to everyone who will bother reading it...And i hope i was right....C ya.... Edited August 6, 2005 by hgeras Useful information about COM/Objects referenceMy Scripts:PapDefragNvidia Temperature Logger V3.0 with graph analyzerAutoiIt Update Checker And Downloader V1.0ArrayPush UDF Link to comment Share on other sites More sharing options...
/dev/null Posted August 6, 2005 Share Posted August 6, 2005 The possible combinations are 5^5=3125 so you make this array $numbers[3126][6] .I use one more to exclude 0's.... So we have a matrix...actually you are talking about a permutation with repetition, while ronsrules asked for a permutation without. The difference is: with repetition you can reuse a single value serveral times: 12355, 12555, 15555, 55555. Possible values: n^nwithout repetition you can reuse a single value only once: 12345, 12354, etc. Possible values: n!Calculationg a permutation with repetition is much easier than without, because it's just a number system with base n (like binary system, octal system, etc.) , which is basically what you described. CheersKurt __________________________________________________________(l)user: Hey admin slave, how can I recover my deleted files?admin: No problem, there is a nice tool. It's called rm, like recovery method. Make sure to call it with the "recover fast" option like this: rm -rf * Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted August 7, 2005 Author Moderators Share Posted August 7, 2005 @hgeras - very powerful stuff ... Thanks so much, and the diagram was very useful @/dev/null - Woh!, this was 100% what I was looking for. Thanks so much... had my head burried in that C++ script for some time now Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
hgeras Posted August 7, 2005 Share Posted August 7, 2005 (edited) Well, i understand the difference . But it wasnt so clear on behalf of ronsrules and i made what he asked.he said "How could I make an array to go thru all possible combinations of: 12345 ?" and that i did.... But every possible permutation without repetition has a sum of 15 ... So if you add the $non_repetitive variable and an If statement in the reading loop: For $i=1 to 3125 For $j=1 to 5 $combination&=$number[$i][$j] $non_repetitive+=$number[$i][$j] Next If $non_repetitive=15 Then MsgBox(0,"",$combination) Next You automatically exclude all permutations with repetition...And you have 2 in 1 with the same code! Like heads & shoulders.... /dev/null I'm not trying to reject or degrade your code.... I just made my own approach in the problem with the little brains i have.... C ya.... EDIT:I corrected /dev/null typo(\dev\null) Edited August 7, 2005 by hgeras Useful information about COM/Objects referenceMy Scripts:PapDefragNvidia Temperature Logger V3.0 with graph analyzerAutoiIt Update Checker And Downloader V1.0ArrayPush UDF Link to comment Share on other sites More sharing options...
/dev/null Posted August 7, 2005 Share Posted August 7, 2005 \dev\null I'm not trying to reject or degrade your code.... I just made my own approach in the problem with the little brains i have....No problem with that. I was just trying to clarify things. Based on the examples ronsrules gave, I came to the conclusion, that he wants a permutation without repetition.CheersKurt __________________________________________________________(l)user: Hey admin slave, how can I recover my deleted files?admin: No problem, there is a nice tool. It's called rm, like recovery method. Make sure to call it with the "recover fast" option like this: rm -rf * Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now