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以降なら。
なかなか微妙すぎる時期ですね…