情報オリンピック日本委員会

PHPを使うか、ブラウザのコンソール画面でJavaScript実行させるか、node.jsを使うかで悩んだ末、勉強もかねてnode.jsを使いました。

結果はかなり微妙でしたが、node.jsの勉強になったと思うので、よしとします。
予選通過するかしないかギリギリのラインですが、どっかでミスってる可能性大なので、たぶん通過しません。

残ってるコードはこんな感じ

– Q1

var fs = require('fs'),
sys = require('sys');
var result = function (file) {
fs.readFile(file, "utf-8", function (err, data) {
time = 0;
data = data.split('\n').forEach(function (val, i) {
time += +val
})
r = parseInt((time/60))+'\n'+(time%60)
fs.writeFile(file, r);
});
}
result('2011-yo-t1-in1.txt')
result('2011-yo-t1-in2.txt')
result('2011-yo-t1-in3.txt')
result('2011-yo-t1-in4.txt')
result('2011-yo-t1-in5.txt')
view raw joi-2010-1.js hosted with ❤ by GitHub

– Q2

var fs = require('fs'),
sys = require('sys');
var result = function (file) {
fs.readFile(file, "utf-8", function (err, data) {
err && sys.print(err)
var search = '';
var r = 0;
data.split('\r\n').forEach(function (val, i) {
if (i == 0) {
search = val;
} else if (i >= 2 && (val+val).indexOf(search) != -1) {
r++;
}
})
fs.writeFile(file, r+"");
});
}
result('2011-yo-t2-in_s1.txt')
view raw joi-2010-2.js hosted with ❤ by GitHub

– Q3

var fs = require('fs'),
sys = require('sys');
var result = function (file) {
fs.readFile(file, "utf-8", function (err, data) {
err && sys.print(err)
r = '';
n = +data.split('\r\n')[0];
max = +data.split('\r\n')[1];
data.split('\r\n').forEach(function (val, i) {
if (i < 2 || i > max+1) {
return false;
}
var xy = val.split(' '),
x = +xy[0],
y = +xy[1],
color = check(x, y, n);
r += color+'\n';
})
fs.writeFile(file, r);
});
}
function check (x, y, n) {
if (y > n/2) y = n-y+1;
if (x > n/2) x = n-x+1;
return (x >= y+1 && x <= n-y) ? (y%3 || 3) : (x%3 || 3);
}
result('2011-yo-t3-in1.txt')
result('2011-yo-t3-in2.txt')
result('2011-yo-t3-in3.txt')
result('2011-yo-t3-in4.txt')
result('2011-yo-t3-in5.txt')
view raw joi-2010-3.js hosted with ❤ by GitHub

Q4は二問ほどを総当り(ブルートフォース的に)解いて、残りを解くために改良していたところで、バグに見舞われてしまい、終了となりました。
Q5もはじめの一問を解いたけど、たぶん点数に加算されない気がするなあ。

Q2を解き始めたところから、「split(‘n’)」で一行ずつ取得という処理ができなくなり、そこでも時間を潰したかな。
rnでsplitしても、また別の問題が浮上してくるのですごく戸惑いました。
最終的にはダウンロードした入力データを、エディタで改行を除くなどして応急処置をほどこしました。

向こうの想定するC,C++ではなくて、node.jsで解いた罰かもしれんねー

まあこれで、アリ本を買うことなんかは今後もないでしょう