sekai013's blog

JavaScriptとかを勉強する

paiza Online Hackathon #5

paiza.jp

これやった。競技プログラミングっぽい感じがするけど入門者向けという感じで簡単に解ける。

競技プログラミングっぽいというのはイメージで実際に競技プログラミングの問題を見たことはないです。

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(''));
});

素直に解ける

f:id:sekai013:20150423025630p:plain

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

さくさく解ける

f:id:sekai013:20150423025704p:plain

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

どんどん解ける

f:id:sekai013:20150423025721p:plain

レナルート

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

バンバン解ける

f:id:sekai013:20150423025803p:plain

適当にキャッシュっぽいのを作った。2次元配列 table のインデックスと指定される座標が1ずれてるのに注意した。

書ける人はどれくらいのタイム出せるものなんだろう。

エクストラステージもある。

paiza.jp

15パズル解くやつ。ヒューリスティック関数とかの話を今大学で聞いてるのでやってみたい。

あとがき

1問目を慣れてるJSで書いたせいでミスって JavaScript の答案としてこの記事が取り上げられてしまったので全部JSで書き直した。

paiza Online Hackathon #5 in JavaScript - sekai013's blog