paizaでスキルチェック(node.js編)

13

目次

  1. paizaとは?
  2. スキルチェック前の準備
  3. Dランクで肩慣らし

paizaとは?

paizaはシステムエンジニア向けの転職サービスとコーディング学習サービスを提供しているサイトです。
コーディングで解くクイズ(スキルチェック)が面白くて、以前こちらのサイトを利用していました。
その時はJavaでやってたのですが、最近はNode.jsをいじってるので勉強とブログのネタ作りがてらにまた初めてみようと思いました。

スキルチェック前の準備

スキルチェックは各問題分が表示されてから、コードの提出までの時間も計測され、コードで出力された結果の判定とともにスコアが算出されます。
100点満点を取るには時間も考慮しなければならないので、正しいコーディングは勿論の事、予め開発環境を準備しておく事はわりと大事です。


開発環境・エディタの準備

問題文表示画面のコード入力欄に直に入力していくのはちょっと無理があるので、ローカルPCのエディタにコーディングして出来上がったものを入力欄に張り付ける方法をお勧めします。お好きな開発環境・エディタをご使用ください。
私はVSCodeが好きなので今回こちらを使用します。

コードの雛形作成

問題文に対してコーディングでやる事はある程度決まってます。
標準入力からパラメータを受け取って、問題文に沿った処理を実施して結果を標準出力に出力させます。
各言語での標準入力、標準出力のサンプルはこちらにあるのでこのコードをコピーして雛形として使用します。
ある程度自分で使用しやすいように改修しておいた方が良いです。
以下、paizaのJavaScript/Node.jsのサンプルコード。

process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = []
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});

reader.on('line', (line) => {
  lines.push(line);
});

reader.on('close', () => {
  var N = lines[0];
  for(var i = 0; i < N; i++) {
    var line = lines[i+1].split(" ");
    console.log("hello = " + line[0] + ", world = " + line[1]);
  }
});

デバッグ準備

VSCodeでローカルデバッグの際、そのままではいつものデバッグコンソールから入出力できなかったので調べた所、以下のconsole設定が必要でした。参考までに。

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Launch app.js",
            "program": "${workspaceFolder}\\app.js",
            "console": "integratedTerminal"
        }
    ]
}

Dランクで肩慣らし

ランクがD~Sまであって、難易度がどんどん上がっていきます。
個人的にクイズを楽しみたい位ならDとC位がお勧めです。
B位から難しくて楽しむって感じではなくなってきます。
AやSを解ける人は本当に凄いと思います。

D112:工場の生産力

というわけで私のDランクのD112問題の回答コードは以下です。
1~14まではサンプルのままで15行目からがメイン処理になります。
31,32でやってる通り、parse()で入力を解析してInputObjというオブジェクトに詰めて
必要な出力に成形するという形です。この形で他の問題も対応できると思います。

process.stdin.resume();
process.stdin.setEncoding("utf8");

var lines = [];
var reader = require('readline').createInterface({
    input: process.stdin,
    output: process.stdout
});

reader.on('line', (line) => {
    lines.push(line);
});

reader.on('close', () => {
    main();
});

const InputObj = function(value1, value2){
    var count = value1;
    var time = value2;
    this.toString = () => {
        return count * time;
    };
}

const parse = () => {
    return new InputObj(lines[0], lines[1]);
}

const main = () => {
    var input = parse();
    console.log(input.toString());
}

ブロトピ:今日のブログ更新
ブロトピ:ブログ更新しました。
ブロトピ:ブログ更新しました!

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

wpmaster
  • wpmaster
  • フリーランスシステムエンジニアの鎌形です。
    鎌形システムエンジニアリングとして都内で活動中です。

%d人のブロガーが「いいね」をつけました。