From: Shane Emmons Date: 2006-05-08T20:46:13+09:00 Subject: [SOLUTION] Bracket Packing (#78) #!/usr/bin/ruby -w # Author: Shane Emmons # # Bracket Packing (#78) # # This is a pretty simple solution. I didn't want to be # to complicated on the English translation, so instead # of describing the packaging, I wrote out the instructions # to manually pack the bracket(s). Thanks for a fun quiz! class PackagingValidator PACKAGING_DESC = { '[' => "Insert a cardboard box.\n", '{' => "Insert a wooden box.\n", '(' => "Insert some soft wrapping.\n", ']' => "Close the cardboard box.\n", '}' => "Close the wooden box.\n", ')' => "Seal the soft wrapping.\n", 'B' => "Insert a brace.\n" } def initialize( packaging ) @packaging = packaging end def validate packaging_stack, brace_found = Array.new, false instruction_text = '' @packaging.split(//).each do |piece| case piece when '[', '{', '(' brace_found = false packaging_stack.push(piece) when ']', '}', ')' return 1 unless brace_found return 1 if piece.eql?(']') and not packaging_stack[-1].eql?('[') return 1 if piece.eql?('}') and not packaging_stack[-1].eql?('{') return 1 if piece.eql?(')') and not packaging_stack[-1].eql?('(') packaging_stack.pop when 'B' return 1 if packaging_stack.empty? brace_found = true else return 1 end instruction_text << PACKAGING_DESC[piece] end return 1 unless brace_found and packaging_stack.empty? print instruction_text.sub(/^Insert/, 'Start with') return 0 end end if $0 == __FILE__ print PackagingValidator.new('[{(B)}{(B)(B)}]').validate, "\n" end -- Posted via http://www.ruby-forum.com/.