shonen.hateblo.jp

やったこと,しらべたことを書く.

標準入力からスペース区切りで値を拾う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っぽい実装になっているのは,なんとなく.