使用言語は Ruby です。画像クリックで詳細が出ます。
会社の入社試験
コード。
num = gets.to_i data = [] num.times {data << gets.to_i} 7.times do |day| sum = 0 (num / 7).times {|i| sum += data[i * 7 + day]} puts sum end
ここでレナちゃんか、ミナミちゃんのいずれかを選ばないといけない!
ミナミを選んでみる
問題はこれ。
これもやさしい。
コード。
x, y = gets.split.map(&:to_i) field = [] y.times {field << gets.split.map(&:to_i)} result = [] field.transpose.each do |line| ar = Array.new(y, 0) result << ar.fill(1, 0, line.count(1)) end result.transpose.reverse_each {|x| puts x.join(' ')}
transpose, fill, count, reverse_each など、僕が普段あまり使わない Array の便利な組み込みメソッドを使って解きました。Ruby の表現力の高さが出ているのではないか知らん。
レナを選んでみる
問題はこれ。
うーん、大して工夫していないのに…。判定は条件分岐(if文など)を使わず、ビット演算でやったのが工夫したくらい。
コード。
x, y, num = gets.split.map(&:to_i) table, area = [], [] y .times {table << gets.split.map(&:to_i)} num.times {area << gets.split.map(&:to_i)} MaskValue = 2 ** 10 - 1 @mask = Array.new(y) {Array.new(x, 0)} def make_mask(x1, y1, x2, y2) y1.upto(y2) do |y| x1.upto(x2) {|x| @mask[y][x] |= MaskValue} end end area.each do |ar| make_mask(ar[0] - 1, ar[1] - 1, ar[2] - 1, ar[3] - 1) end y.times do |y1| x.times {|x1| table[y1][x1] &= @mask[y1][x1]} end puts table.flatten.inject(&:+)
今回も特にむずかしいことはなし。