I don't think recursion is the way to go, but I can't think of any other way.
#!perl -l
sub p{return$_ if length($_=shift)<2;/^./;my($a,$o,$b)=pop=~/(.*)($&)(.*)/;my($c,$d)=$_=~/$o([$a?$a]*)([$b?$b]*)/;return p($c,$a).p($d,$b).$o}print p(shift,shift)
|
#!perl -l
sub p{$_=shift;return$_ if length$_<2;/^./;my($a,$o,$b)=pop=~/(.*)($&)(.*)/;my($c,$d)=$_=~/$o([$a?$a]*)([$b?$b]*)/;return p($c,$a).p($d,$b).$o}print p(shift,shift)
|
#!perl -l
sub p{return $_[0]if length$_[0]<2;$_[0]=~/^./;my($a,$o,$b)=pop=~/(.*)($&)(.*)/;my($c,$d)=pop=~/$o([$a?$a]*)([$b?$b]*)/;return p($c,$a).p($d,$b).$o}print p(shift,shift)
|
I see a lot of crufty spots, but I don't know how to optimize them :(
#!perl -l
sub p{return $_[0]if length$_[0]<2;$_[0]=~/^./;my($a,$o,$b)=pop=~/(.*)($&)(.*)/;my($c,$d)=pop=~/$o([($a?$a:" "]*)([($b?$b:" "]*)/;return p($c,$a).p($d,$b).$o;}print p(shift,shift);
|
#!perl -l
sub p{return $_[0]if length$_[0]<2;$_[0]=~/^./;(my$a,my$o,my$b)=pop=~/(.*)($&)(.*)/;pop=~/$o([($a?$a:" "]*)([($b?$b:" "]*)/;(my$c,my$d)=($1,$2);return p($c,$a).p($d,$b).$o;}print p(shift,shift);
|
#!perl -l
sub p{return $_[0]if length($_[0])<2;$_[0]=~/^./;(my$a,my$o,my$b)=pop=~/(.*)($&)(.*)/;pop=~/$o([($a?$a:" "]*)([($b?$b:" "]*)/;(my$c,my$d)=($1,$2);return p($c,$a).p($d,$b).$o;}print p(shift,shift);
|