中安拓也のブログ

プログラミングについて書くブログ

【競プロ】TypeScriptでAtCoderをやる

はじめに

仕事でいつも使っているTypeScriptを競技プログラミング(AtCoder)でも使う方法について調べました。

AtCoderのTypeScriptの対応状況

AtCoderはTypeScriptに対応しているため、言語のセレクトボックスでTypeScript(3.8)を選択してあげればOKです。

f:id:l08084:20200906185552p:plain
AtCoderはTypeScriptに対応している

標準入力をどうやるか

競技プログラミングだと必須である標準入力をTypeScriptでどうやればいいのか調べました。 C++だとcinで済む標準入力ですが、TypeScriptだと下記のように書いてあげる必要があります。

import * as fs from 'fs';

const input = fs.readFileSync("/dev/stdin", "utf8");

標準入力の仕方がわかれば、あとは計算結果をおなじみのconsole.logで出力するだけになります。続いて、実際に簡単な問題を解いてみます。

実際に問題を解いてみる

提出の練習として出題される問題であるA - Welcome to AtCoderをTypeScriptで解いてみます。

f:id:l08084:20200906193209p:plain
該当問題の標準入力と標準出力の形式

C++でこの問題を解くと下記のようになります。

#include <iostream>

using namespace std;

int main()
{
  int a, b, c;
  string s;
  
  cin >> a;
  cin >> b >> c;
  cin >> s;
  
  cout << a + b + c << " " << s;
}

TypeScriptでこの問題を解くと次のようになります。

import * as fs from 'fs';

const input = fs.readFileSync("/dev/stdin", "utf8");

const a = +input.split('\n')[0];
const b = +input.split('\n')[1].split(' ')[0];
const c = +input.split('\n')[1].split(' ')[1];
const s = input.split('\n')[2];

console.log(`${a + b + c} ${s}`);

fs.readFileSync("/dev/stdin", "utf8")で取得した標準入力の文字列から、split('\n')split(' ')を使って整数と文字列を取り出しています。

参考サイト

Node.jsの標準入力と - Qiita

TypeScriptでAtCoderに挑戦してみる - Qiita