in reply to How can I improve this?
#!/usr/bin/perl -w use strict; my (@a, @b, @c, @d, @e, $i1, $i2, $i3, $i4, $i5); @a = @b = @c = @d = @e = (0, 1, 2); # or whatever my (@unsorted, @sorted); for ($i1 = 0; $i1 <= $#a; $i1++) { for ($i2 = 0; $i2 <= $#b; $i2++) { for ($i3 = 0; $i3 <= $#c; $i3++) { for ($i4 = 0; $i4 <= $#d; $i4++) { for ($i5 = 0; $i5 <= $#e; $i5++) { push @unsorted, [$i1, $i2, $i3, $i4, $i5]; } } } } } @sorted = sort { non_zeros($b) <=> non_zeros($a) || ${$b}[0] <=> ${$a}[0] || ${$b}[1] <=> ${$a}[1] || ${$b}[2] <=> ${$a}[2] || ${$b}[3] <=> ${$a}[3] || ${$b}[4] <=> ${$a}[4] } @unsorted; print map "@$_\n", @sorted; sub non_zeros { my @arr = @{$_[0]}; scalar grep { $_ != 0 } @arr; }
I'm not a big fan of any of the permutation generators (including mine) listed so far; I'll try to think of something cleaner and more general.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
RE: Re: How can I improve this?
by lhoward (Vicar) on Jul 25, 2000 at 07:51 UTC | |
by merlyn (Sage) on Jul 25, 2000 at 07:57 UTC | |
by gryng (Hermit) on Jul 25, 2000 at 17:01 UTC | |
by Anonymous Monk on Oct 03, 2004 at 18:45 UTC |