paiza Online Hackathon #5
これやった。競技プログラミングっぽい感じがするけど入門者向けという感じで簡単に解ける。
競技プログラミングっぽいというのはイメージで実際に競技プログラミングの問題を見たことはないです。
Mission 01
なんとなく JavaScript を選んだ。
process.stdin.on('data', function (chunk) { var line = chunk.toString(); console.log(line.split('').filter(function(val, index, array) { return (index % 2 === 0) ? true : false; }).join('')); });
素直に解ける
Mission02
JavaScript で書いたけど出力がうまくいってない気がしたので Ruby で書き直した。
line_number = gets.to_i result = [0] * 7 (0...line_number).each do |index| result[index % 7] += gets.to_i end puts result
さくさく解ける
Mission03
Mission03 でミナミルートとレナルートに分岐する。ぼくはミナミ派ですが両方解きました。
ミナミルート
column, row = gets.split(' ').map {|v| v.to_i} columns = [] (0...column).each {|n| columns[n] = [] } (0...row).each {|n| input = gets.split(' ').map {|v| v.to_i} input.each_with_index {|value, index| if value != 2 columns[index].push value end } } columns.each_with_index {|column_array, index| columns[index] = [0] * (row - column_array.size) + column_array } (0...row).each do |n| result = '' columns.each {|column_array| result += "#{column_array[n]} " } puts result.chop end
どんどん解ける
レナルート
column_count, row_count, range_count = gets.split(' ').map{|v| v.to_i} table = [] (0...row_count).each {|n| row = gets.split(' ').map{|v| v.to_i} table.push row } cache = '' result = 0 (0...range_count).each {|n| x_1, y_1, x_2, y_2 = gets.split(' ').map{|v| v.to_i} (x_1..x_2).each {|x| (y_1..y_2).each {|y| if cache.include? "(#{x},#{y})" next else cache += "(#{x},#{y}) " result += table[y-1][x-1] end } } } puts result
バンバン解ける
適当にキャッシュっぽいのを作った。2次元配列 table
のインデックスと指定される座標が1ずれてるのに注意した。
書ける人はどれくらいのタイム出せるものなんだろう。
エクストラステージもある。
15パズル解くやつ。ヒューリスティック関数とかの話を今大学で聞いてるのでやってみたい。
あとがき
1問目を慣れてるJSで書いたせいでミスって JavaScript の答案としてこの記事が取り上げられてしまったので全部JSで書き直した。