From: Mike Harris Date: 2006-11-09T02:18:39+09:00 Subject: Re: [QUIZ] Bytecode Compiler (#100) My 2nd solution, it's the same as the first except i stole the pack/unpack stuff. class Compiler def self.compile(s) eval(s.gsub(/(\d+)([^\d])/,'\1.bc\2').gsub(/([^\d])(\d+)$/,'\1\2.bc')) end end class Fixnum def bc lead,pt = ( (-2**15...2**15)===self ? [1,'n'] : [2,'N'] ) [lead].concat([self].pack(pt).unpack('C*')) end end class Array {:+ => 10,:- => 11,:* => 12,:** => 13,:/ => 14,:% => 15}.each do |op,code| define_method(op) { |x| self.concat(x).concat([code]) } end end