回答してみる
昨日書いた問題をやってみる。
何も考えずただただ書きたいように書いてみた。
def usage puts "usage: #{$PROGRAM_NAME} mad_libs_templage" exit end usage unless ARGV.size == 1 result = String.new reuse_map = Hash.new stack = Array.new open(ARGV.shift).each_line do |line| line.split(/(\(\(|\)\))/).each do |token| if token == '))' prompt = stack.pop stack.pop # '(('を空読み raise "Syntax error near by '#{prompt}'" unless stack.empty? if prompt.index(/:/) tag, new_prompt = prompt.split(/:/) print "#{new_prompt} :" s = gets.chomp result << s reuse_map[tag] = s else s = reuse_map[prompt] unless s print "#{prompt} :" s = gets.chomp end result << s end elsif token == '((' or not stack.empty? stack.push token else result << token end end end print result
昨日の例題をファイルに書いてこのスクリプトに読ませると、色々聞いてくるので答えてあげると最後に'(('と'))'の部分を埋めて表示してくれる。
工夫したところは特にない、今は反省しているw
まぁあれだ書いてて思ったのは今更言うまでもないが、Rubyは便利ってこと。Javaで書いてたらこんなに簡単に作れなかったなきっと。
さてさて明日は解答を見てみよう。
どんなテクニックが使われているか楽しみ:-)
続く