"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/


Reply via email to