2012年5月4日金曜日

文字列のリスト化、ruby編

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
ruby編。pythonよりスパッと解けているのは問題をより把握したため。

eval使うバージョン

s = "ab[cd]ef"
s = "ab[c[d]][e]f"
#expected = ['a', 'b', ['c', 'd' ], 'e', 'f']


s = s.gsub(/([\]a-z])/, '\1,')
s = s.gsub(/([a-z])/, '"\1"')
s = s.gsub(/,\]/, ']')
#puts s


p eval('[' + s +']')

    

eval使わないバージョン

s = "ab[cd]ef"
expected = ['a', 'b', ['c', 'd' ], 'e', 'f']




def parse(xs)
  result = []

  while not xs.empty?
    x = xs[0]
    xs.slice!(0, 1)
    if x == '['
      got = parse(xs)
      result.push(got)
    elsif x == ']'
      return result
    else
      result.push(x)
    end
  end
  return result
end


p parse("[][]")
p parse(s)

    

0 件のコメント: