⌨️

paizaのコード問題を手元でTypeScriptで解きたい

2020/12/21に公開

tl:dr;

このコードで解いて tsc でJavaScriptコード作って回答に貼り付ければOK

const lines: Array<string> = [] // 入力バッファ
const isStaging: boolean = true;    // 手元環境(true) か提出環境(false) かのスイッチ

// ココで問題解く
const mainRoutine = (lines: string[]) => {
    const N: number = parseInt(lines[0]);
    for (let i: number = 0; i < N; i++) {
        const line: Array<string> = lines[i + 1].split(" ");
        console.log("hello = " + line[0] + ", world = " + line[1]);
    }
};

if (isStaging) {
    // 手元環境 入力行ごとの配列
    const inputLine: Array<string> = [
        "2",
        "2 5",
        "3 4"
    ];
    mainRoutine(inputLine);
} else {
    // 提出環境 入力待ちにぶん投げる
    process.stdin.resume();
    process.stdin.setEncoding('utf8');
    const reader: any = require('readline').createInterface({ input: process.stdin, output: process.stdout });
    reader.on('line', (line: string) => lines.push(line));
    reader.on('close', () => mainRoutine(lines));
}

やりかた

開発中は上記コードを .ts として保存し、 isStaging = true にしておいて npx ts-node <script> として実行する
isStaging = true の場合は inputLine のArrayに標準入力から入れるデータを列記しておき、それを擬似入力として使用できる
提出時は isStaging = false にしてから、 npx tsc <script> としてJavaScriptへ変換し、その内容をそのまま解答欄にコピペすればOK

あとがき

paizaの問題を解く際にTypeScriptは選べないが、どうしてもTypeScriptで手元環境で解きたかったので色々してみた結果
手元だとvscode使ったりeslintかけたり色々出来るので、paizaのコードエディタ使うより捗って嬉しい
クラス使いたい時とかどうすんだよとも思うけど、今の所Paizaの問題でクラス欲しくなる問題出てきてないんで、たぶん大丈夫

Discussion