sekai013's blog

JavaScriptとかを勉強する

paiza Online Hackathon #5 in JavaScript

paiza.jp

これやったポスト が 5問中 4問 Ruby で書いたのに ミスって JavaScript の答案として取り上げられてしまった ので反省して全部 JavaScript で解いた。

Mission #1

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

これだけもともと JavaScript で書いてた。

Mission #2

process.stdin.on('data', function (chunk) {
    var lines = chunk.toString().split('\n');

    lines.shift();

    var result = [0,0,0,0,0,0,0];

    lines.forEach(function(value, index) {
        result[index % 7] += +value;
    });

    for(var i = 0; i < result.length; i++) {
        console.log(result[i]);
    }
});

Mission #3 Minami

process.stdin.on('data', function (chunk) {
    var lines = chunk.toString().split('\n').map(function(line) {
        return line.trim();
    });
    var columns = [];
    var info = lines.shift().split(' ');
    var columnSize = info[0], 
        rowSize = info[1];

    for(var i = 0; i < columnSize; i++) {
        columns[i] = [];
    }

    var pushUnexplodedBomb = function(value, index) {
        if (value === "1") {
            columns[index].push(value);
        }
    }

    for(i = 0; i < rowSize; i++) {
        data = lines[i].split(' ');
        data.forEach(pushUnexplodedBomb);
    }

    for(i = rowSize - 1; i >= 0; i--) {
        result = ''
        for(var j = 0; j < columnSize; j++) {
            result += (columns[j][i] ? columns[j][i] : '0') + ' ';
        }
        console.log(result.trim());
    }

});

Mission #3 Rena

process.stdin.on('data', function (chunk) {
    var lines = chunk.toString().split('\n');
    var info = lines.shift().split(' ');
    var rowSize = info[0], 
            columnSize = info[1],
            rangeSize = info[2];
    
    var table = [], ranges = [];
    var decrement = function(value) {
        return value - 1;
    };

    for(var i = 0; i < lines.length; i++) {
        if (i < columnSize) {
            table.push(lines[i].split(' '));
        } else {
            ranges.push(lines[i].split(' ').map(decrement));
        }
    }
    
    var result = 0;
    var cache = '';
    
    for(i = 0; i < ranges.length; i++) {
        var x1 = ranges[i][0], y1 = ranges[i][1], x2 = ranges[i][2], y2 = ranges[i][3];

        for(var j = y1; j <= y2; j++) {
            for(var k = x1; k <= x2; k++) {
                var coordinate = '(' + k + ',' + j + ')';

                if (cache.indexOf(coordinate) === -1) {
                    result += +table[j][k];
                    cache += coordinate;
                }
            }
        }
    }
    
    console.log(result);
});

エクストラステージ の15パズル解く奴はマンハッタン距離を評価関数にした最良優先探索とか反復深化で探索とかしようとして書いたけど途中でループしてうまくいかなかった。
ゴールデンウィークだけどプロセッサを書かないといけなかったりレポートを書かないといけなかったりでいろいろ忙しいのでいろいろが片付いたらまた書きなおしたい。