標準入力からスペース区切りで値を拾うEnumerableな何か
競技プログラミングで与えられる入力は半角スペース・改行の両方で区切られることが多い.
そこで,半角スペース・改行で区切って値を拾ってくるEnumerableなクラスを書いた.
class In include Enumerable def initialize(io) @io = io @buff = [] self end def shift return @buff.shift unless @buff.empty? return nil unless l = @io.take(1).first return (@buff = l.chomp.split).shift end def line b = @buff; @buff = []; b end def each r = shift while r yield r r = shift end end end Cin = In.new(STDIN) @n,@m = Cin.take(2) @w = Cin.take(@n.to_i) @e = @m.to_i.times.map{Cin.take(2)} instance_variables.each do |v| puts "#{v} => " p instance_variable_get v end
動いている. IOクラスのwrapperっぽい実装になっているのは,なんとなく.