PHP、166 171バイト
for(;$n<3**$e=strlen($x=$argn);eval("return $s;")-100?:$r[]=sprintf("%2d $s",strlen($s)-$e))for($i=0,$s="",$k=$n++;a&$c=$x[$i];$k/=3)$s.="+-"[$i++?$k%3:2].$c;echo min($r);
でパイプとして実行する-nR
か、オンラインでテストします。
フォーマットされた数値を使用して結果をソートします->
先行ブランクを印刷する場合があります(また、99桁を超える入力では失敗する場合があります%2d
。修正するために数値を増やしてください)。
10桁以下、161バイト
for(;$n<3**$e=strlen($x=$argn);eval("return $s;")-100?:$r[]=(strlen($s)-$e)." $s")for($i=0,$s="",$k=$n++;a&$c=$x[$i];$k/=3)$s.="+-"[$i++?$k%3:2].$c;echo min($r);
壊す
for(;$n<3**$e=strlen($x=$argn); # loop $n up
eval("return $s;")-100?: # 2. evaluate term, if 100 then
# prepend number of operations, add to results
$r[]=sprintf("%2d $s",strlen($s)-$e)
)
# 1. create term
for($i=0,$s="",$k=$n++; # init variables, increment $n
a&$c=$x[$i];$k/=3) # loop through digits/operator index
$s.="+-"[$i++?$k%3:2].$c; # prepend operator for base-3 digit (nothing for 2)
echo min($r); # print lowest result