To golf it a little to make it into an actual one-liner (even if a
rather long one!)

#!/usr/bin/perl -l
$n=pop;$"=$/;print"@{[w($n)]}";sub
w{my($n)=pop;[EMAIL PROTECTED]"":[EMAIL 
PROTECTED]"()":a;if($n>1){for$k(0..--$n){for$p(w($k))[EMAIL 
PROTECTED],"($p)$_"for
w($n-$k)[EMAIL PROTECTED]

-- jas

On Nov 15, 2007 2:05 PM, Phil Carmody <[EMAIL PROTECTED]> wrote:
> I saw this on sci.math, and thought "one liner" ;-)
> I even think a DP non-recursive approach should be quite quick.
> Keeping the output in the logical order might cost a few strokes.
>
>
> #!/usr/bin/perl
>
> $count = $ARGV[0];
>
> print join "\n",  pren($count), "";
>
> sub pren
> {
>     my @list = ();
>
>     (my $n) = @_;
>     if   ($n == 0) {push(@list, "")}
>     elsif($n == 1) {push(@list, "()")}
>     elsif($n > 1)
>     {
>         foreach $k (0 .. $n-1)
>         {
>             foreach $p1 (pren($k))
>             {
>                 foreach $p2 (pren($n - 1 - $k))
>                 {
>                     push @list, sprintf "(%s)%s", $p1, $p2;
>                 }
>             }
>         }
>     }
>     return @list;
> }
> ________________________
>
>
> $ ./parens.pl 5 | cat -n
>      1  ()()()()()
>      2  ()()()(())
>      3  ()()(())()
>      4  ()()(()())
>      5  ()()((()))
>      6  ()(())()()
>      7  ()(())(())
>      8  ()(()())()
>      9  ()((()))()
>     10  ()(()()())
>     11  ()(()(()))
>     12  ()((())())
>     13  ()((()()))
>     14  ()(((())))
>     15  (())()()()
>     16  (())()(())
>     17  (())(())()
>     18  (())(()())
>     19  (())((()))
>     20  (()())()()
>     21  (()())(())
>     22  ((()))()()
>     23  ((()))(())
>     24  (()()())()
>     25  (()(()))()
>     26  ((())())()
>     27  ((()()))()
>     28  (((())))()
>     29  (()()()())
>     30  (()()(()))
>     31  (()(())())
>     32  (()(()()))
>     33  (()((())))
>     34  ((())()())
>     35  ((())(()))
>     36  ((()())())
>     37  (((()))())
>     38  ((()()()))
>     39  ((()(())))
>     40  (((())()))
>     41  (((()())))
>     42  ((((()))))
>
>
> ()  ASCII ribbon campaign      ()    Hopeless ribbon campaign
> /\    against HTML mail        /\  against gratuitous bloodshed
>
> [stolen with permission from Daniel B. Cristofani]
>
>
>       
> ____________________________________________________________________________________
> Never miss a thing.  Make Yahoo your home page.
> http://www.yahoo.com/r/hs
>



-- 
Jasvir Nagra
http://www.cs.auckland.ac.nz/~jas

Reply via email to