#!perl -p
sub
w{s/
([@_^+-])(.*)/ $2 $1/g}sub
f{s/\(([^()]+)\)/f($_=$+)/e?&f:w~w;$_}f
s/\s//g/s/\d+/$&
/g
|
Into the double digits...
#!perl -p
s/\s//g;s/\d+/$&
/g;sub
w{s/
([@_^+-])(.*)/ $2 $1/g}sub
f{s/\(([^()]+)\)/f($_=$1)/e&&&f;w~w;$_}f
|
#!perl -p
s/\s//g;s/\d+/$&
/g;sub
w{s/
([@_^+-])(.*)/ $2 $1/g}sub
f{s/\(([^()]+)\)/f($_=$1)/e&&&f;w;w 7;$_}f
|
Of course. The true&tested method of "Can't possibly work, let's try it anyway."
#!perl -p
s/\s//g;s/\d+/$&
/g;sub
w{s/
([@_^+-])(.*)/ $2 $1/}sub
f{s-\(([^()]+)\)-$_=$1;&f-e||w||w(7)?&f:$_}f
|
#!perl -p
s/\s//g;s/\d+/$&
/g;sub
w{s/
([@_^+-])(.*)/ $2 $1/}sub
f{s-\(([^()]+)\)-local$_=$1;&f-e||w||w(7)?&f:$_}f
|
#!perl -p
s/\s//g;s/\d+/$&
/g;sub
w{s-
([@_*/])(.*)- $2 $1-}sub
f{(s-\(([^()]+)\)-local$_=$1;&f-e||w||w"^")?&f:$_}f
|
#!perl -p
s/\s+//g;s/\d+/$&
/g;sub w{s#
([@_*/])(.*)# $2 $1#}sub
f{(s#\(([^()]+)\)#local$_=$1;&f#e||w||w"-+")?&f:$_}f
|
#!perl -p
s/\s+//g;s/\d+/$&
/g;sub w{s#
([@_*/])(.*)# $2 $1#}sub
f{1while s#\(([^()]+)\)#local$_=$1;&f#e||w||w"-+";$_}f
|
climbing fast :)
#!perl -p
s/\s+//g;s/\d+/$&
/g;sub w{s#
([@_*/])(.*)# $2 $1#}sub
f{local
$_=pop;1while s#\(([^()]+)\)#f($1)#e||w||w"-+";$_}
$_=f$_
|
Slightly better tiebreaker. There must be a better way.
#!perl -lp
sub
_{bless\"@_"}use
overload
neg,sub{_"-$_[0]"},qw/nomethod
_
""/,sub{${$_[0]}};s/-/
-/g;s/\d+/_("$&")/g;$_=eval;y/ //s
|
#!perl -lp
sub
_{bless\"@_"}use
overload
neg,sub{_"-$_[0]"},'""',sub{${$_[0]}},nomethod,'_';s/-/
-/g;s/\d+/_("$&")/g;$_=eval;y/ //s
|
This should work... Third time lucky. No "Unknown filetest" errors now.
#!perl -lpX
sub _{bless\"@_"}use overload neg,sub{_"-@_"},'""',sub{${$_[0]}},nomethod,'_';s/-/ -/g;s/\d+/_("$&")/g;$_=eval;y/ //s;s/ $//
|
Alas, alas, the program fails for (18*16*16*5-1+12+15+18*1-8+6/7-6-2-(19)*(17))+8+((9/14))*16+15*11*13/20*4+16- 7-19+9+(12)+(4)+20-1*(16)+(6)+19*13/1*6*5/17-17+(2)*6*4-19*17-4*(1-20*11*3*19 +3/(8+9*20/16+(16)/8/3))-((3))*(6+2-(17)*2*2-(10))*(14-15*4+6/1
#!perl -lp s/\s//g;$n='((\B-)?\w+)';push@a,"$1 $4 $3"while s#\($n\)#$1#g||s#$n([*/])$n#a.@a#e||s#$n([-+])$n#a.@a#e;1while s#a(\d+)#$a[$1]# |
#!perl -p
s/\s+//g;s/\d+/a$&
/g;sub w{s#
([@_*/])(-?)a(.*)# $2$3 $1#}sub
f{local
$_=pop;1while
s#\(([^()]+)\)#f($1)#e||w||w"-+";$_}$_=f$_;s/a//
|
Finally, a working solution. I hope.
fail's on input (-1 + 2), outputs nothing .. check if you submitted the right one, or made a paste error
#!perl -lpX
sub a{bless\"@_"}use overload neg,sub{a('-'.shift)},'""',sub{${$_[0]}},nomethod,sub{a shift,shift,pop};s/-/ -/g;s/\d+/a("$&")/g;$_=eval
|
#!perl -p s/\s+//g;s/((? |
#!perl -p s/\s+//g;s/((? |
#!perl -lpX
use
base
B::Deparse;s/-/$:/g;s/\d+/a$&/g;sub
maybe_parens{$_=$_[1];s/ (.*) (.*)/ $2 $1/;y/ /_/;$_}$_=main->new->coderef2text(eval"sub{$_}");y/_
-';-}/ /d
|
#!perl -lp s/\s+//g;s/((? |
Here are some solutions I thought up during work today. Let's see how far I can go with this.
#!perl -lp s/\s+//g;s/((? |