はじめに
最近競技プログラミングを始めて、己の数学的素養の無さに愕然としている佐々木です。
今回のブログでは当社が手掛けている製品の1つであるTOPSICについてご紹介したいと思います。
TOPSICとは
TOPSICとは当社がプログラミング版TOEICを目指して作ったプログラミングスキル判定サービスです。
プログラミングコンテストの運営を行うAtCoder株式会社と提携して問題を提供しています。
他のプログラミングコンテストサービスとの違いは問題が非公開であることです。
最終目標はプログラミング版TOEICであり、問題文を検索して解答が出る状況では資格試験としての信頼性に欠けてしまうため、問題は非公開になっています。
Java, C#, Python, C++, Scalaなど、現在主流のプログラミング言語に対応しているため、自分が得意な言語で挑戦することができます。
参加者内での相対的なプログラミングスキルを判定することができるため、自分のプログラミングスキルの証明や確認に用いられています。
当社での活用
当社では定期的にプログラミングコンテストを開催しており、自分のプログラミングスキルを確認することができます。
好成績を残した社員は月初ミーティングや納会で発表されるため、モチベーションの維持に繋がります。
また、中途採用ではTOPSICによってプログラミングスキルを判定しており、スキル面でのミスマッチの減少にも活用されています。
実際にどんな問題が出るか
プログラミングコンテストについてあまりご存知でない方もいると思うので、問題を作ってみました。
実際にこの問題が出題されるわけではないので、あくまで雰囲気を感じていただければ幸いです。
プログラミング経験のある方はぜひ挑戦してみてください。
問題
ある数N(0<N<=100)が与えられます。N以下の整数において、素数はいくつありますか。
解答例
#include <bits/stdc++.h>
using namespace std;
int main() {
int N; // int型の変数Nを宣言
cin >> N; // 標準入力を用いてNを受け取る
// ある数Aが素数か調べるにはA以下の数で割り切れるか調べればよい
int cnt = 0; // 素数が何個あるかを保持する変数
// 1は素数ではないため2からスタート
for(int A=2; A<=N; A++){
bool flag = false; // 割り切れる数があるか
// 割る数を2からスタートして割り切れたらループから抜ける。
for(int i=2; i<A; i++){
if(A % i == 0){
flag = true;
break;
}
}
if(!flag) cnt++; // 割り切れる数がなかった時は素数なのでcntの値を+1する。
}
cout << cnt << endl;
}
おわりに
高い技術力を持ったエンジニアになるにはプログラミングスキルは必須であるため、TOPSICを活用してプログラミングスキルの向上に努めたいと思います。
同期内でも何人か競技プログラミングを始めているので、私も負けないようにプログラミング力を鍛えていきたいです。
まずは中学、高校の数学から復習します……