"Dan Klose" schreef:
> Hi list,
>
> I am having a bad day and would really like some help (the coffee
> hasn't).
>
> I have a list that looks like:
> my @list = (1,2,3,4);
>
> I would like to generate all patterns that follow:
> 1
> 2
> 3
> 4
> 12
> 123
> 23
> 34
> 234
> 1234
>
>
> The list can be of any length and the next number in the list must be
> the current number +1 ( i am not working with numbers - i think it is
> easier to explain this way).
>
> How do I do this? I did look at the Combinatorics module however it
> does not impose fixed ordering as far as I can see.
Compare it to this list:
0000 .... X
0001 ...1
0010 ..2.
0011 ..21
0100 .3..
0101 .3.1 X
0110 .32.
0111 .321
1000 4...
1001 4..1 X
1010 4.2. X
1011 4.21 X
1100 43..
1101 43.1 X
1110 432.
1111 4321
It seems you want to filter out the all-empty and disconnected variants
(marked with X).
perl -wle'
print for grep /\S/ && !/\S\s+\S/,
map {
$_ = reverse sprintf("%b", $_);
tr/0/ /;
s/1/$-[0]+1/eg;
$_;
} 0..2**4-1
;
'
1
2
12
3
23
123
4
34
234
1234
Alternative:
$ perl -wle'
print for grep /\S/ && !/\S\s+\S/,
map {
($_ = reverse sprintf("%b", $_)) =~ tr/01/ 7/;
$_ &= "1234";
} 0..15
;
'
1
2
12
3
23
123
4
34
234
1234
--
Affijn, Ruud
"Gewoon is een tijger."
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/