ToDo:
http://d.hatena.ne.jp/Gimite/20060725/1153803035
なんか再帰で sub に勝てる気がしたんだけど。
とりあえず sub の方を安易に縮めると
$_="- + 1 / 2 2 + 3 * 4 5" 0while sub! /(\W) (\d\S*) (\d\S*)/,'\2_\3_\1' p$_.tr'_',' '
とか
$_="- + 1 / 2 2 + 3 * 4 5" sub /(\W) (\d\S*) (\d\S*)/,'\2_\3_\1'while/ / p$_.tr'_',' '
になると思う。
で再帰の方。 空白が無いならこんな感じのは結構短いしまだ少し縮みそう。
_="-+1/22+3*45"
f=proc{|$_|/^\d/?$&:/./?(s=$&;f[$']+f[$']+s):''}
p f[_]
出力に空白入れるのは色々難しい… 入力に空白が入るだけなら
_="- + 1 / 2 2 + 3 * 4 5"
f=proc{|$_|/ /?(_=$`)[0]<?0?f[$']+f[$']+_:_:$_}
p f[_]
こんな感じで短くなったりするし
$_="- + 1 / 2 2 + 3 * 4 5"
f=proc{|_|$'=~/ /&&(_=$`)[0]<?0?f[]+f[$']+_:_}
p f[~//]
こんな感じの別解とかも考えられたりとか。
元の問題通りの動作となると、
$_="- + 1 / 2 2 + 3 * 4 5"
f=proc{|_|$'=~/ /&&(_=$`)[0]<?0?f[]+f[$']+[_]:[_]}
p f[~//]*' '
_="- + 1 / 2 2 + 3 * 4 5"
f=proc{|$_|/^\d /?$&:/. /?(s=$&;f[$']+f[$']+s):''}
p f[_+' '].chop
のあたりを考えたんだけど、やはり最後の空白難しいよなーという。
(18:43)
$_="- + 1 / 2 2 + 3 * 4 5" 0while sub! /(\W) (\d\S*) (\d\S*)/,'\2\3\1' p scan(/./)*' '
もアリか。もちろん scan は split('') でも。
(19:02)
| 前 | 2007年 4月 |
次 | ||||
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
| 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 | |||||
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。
よくわかりませんが買えるようです。
http://www.nintendo.com/gamemini?gameid=IkiUaINsV1VDcc7mfIcMUJoK-jpwo4_Q
6/4以降なら。
なかなか微妙すぎる時期ですね…