採用活動のためにpaizaのプログラミングスキルチェックをやってみたので概要と感想を書きます

[Supership](https://supership.jp/)の名畑です。「[映画『THE FIRST SLAM DUNK』宮城リョータの誕生日（7月31日）に興行収入150億円を突破！](https://www.animatetimes.com/news/details.php?id=1690872331)」「[映画『コナン』シリーズ初の興収100億円突破 26年目で待望の大台…記念イラスト公開](https://www.oricon.co.jp/news/2278128/full/)」「[『劇場版アイドリッシュセブン』興収20億円&動員117万人突破](https://www.oricon.co.jp/news/2288223/full/)」どの作品も映画館でかなり楽しませていただきましたが、最近の劇場版アニメ、勢いありますね。

## はじめに

前に「[採用活動のために競技プログラミング（AtCoder）を始めて一年経ったので感想を書きます](https://qiita.com/nabata/items/44fa3995e476b12b9860)」という記事を書きました。エンジニアの採用活動で頻繁に競技プログラミング、中でも特に[AtCoder](https://atcoder.jp/)の話題が出るため、その内容を知るという目的でAtCoderを緑までやり、その感想をまとめた記事です。

採用活動をしているとエンジニア向けの転職・就職・学習プラットフォームである[paiza](https://paiza.jp/)の[プログラミングスキルチェック](https://paiza.jp/challenges)についてもよく見かけます。

ということで、めちゃくちゃ有名なサービスのため今更感が半端ありませんが、今回は**paizaのプログラミングスキルチェック**について「**どのような流れで進むのか**」「**実際にやってみた感想**」を記事にします。

## 記事の前提

[paiza(パイザ) 利用規約](https://paiza.jp/guide/kiyaku)に下記の記載があります。

> ブログ・SNS等の各種媒体（インターネット媒体に限られず、不特定多数が閲覧可能なものを全て含む。）上において、当社がpaizaで出題した問題の内容、当該問題に対する解答、解答へのヒント等の示唆およびカンニング等の不正を助長する内容等を掲載する行為。

これに従い、今回の記事では各問題の内容には触れません。
コードは登場しません。

## ランク

スキルチェックでは問題を解き、その結果に応じてランクが決まります。

このランクが[paizaの求人情報](https://paiza.jp/career/job_offers)での応募条件になっていたり、また、企業がpaiza経由でスカウトを送るときの判断材料にもなります。
paizaを用いた就職活動ではなくとも、自己PRなどに書かれる方もいるでしょう。

ランクは**S、A、B、C、D、E**です。

![image01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/869934/07316bf7-18a5-bda7-f2f1-71168b5175f4.png)

今回、Sランクまで取得してみました。
**paiza査定**として**年収**が表示されますが、β版らしいので今回の記事ではノータッチとします。

私は2021年の秋頃にAtCoderで緑になり、それからもちょくちょく問題を解いてはいますが、緑になったときよりコーディング力は下がっていると思います。

そんな私でも苦労なくSランクがとれましたので、**paizaのSがAtCoderの茶色**といったレベルでしょうか。問題によって難易度も異なるでしょうし、両サービスで出題傾向も異なるので、一概には言えませんが。そもそも、かなりの時間をかけないとレートを上げづらいAtCoderと比較するのもおかしいですし。

ランク毎のレベルは「[paiza転職とは](https://paiza.jp/guide/career#outline)」のページにまとまっています。レーティングについて詳しくは「[レーティングとはなんですか？](https://paizasupport.zendesk.com/hc/ja/articles/900000513106-%E3%83%AC%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%81%A8%E3%81%AF%E3%81%AA%E3%82%93%E3%81%A7%E3%81%99%E3%81%8B-)」をご覧ください。

| ランク | 比率 | レーティング目安 | 概要 |
| :---: | :--- | :--- | :--- |
| S | 上位2% | 2000以上 | **高い実装力とアルゴリズムスキル**<br>計算機科学に精通し、処理量を見積もった上で最適なアルゴリズムを設計、実装するスキルがあります。 |
| A | 上位8% | 1800~2000ぐらい | **高度な実装スキル**<br>複雑なロジックを限られた時間内で設計、実装できる。あらゆる実装ができるスキルを持っています。 |
| B | 上位30% | 1400~1800ぐらい | **実装スキル**<br>実用的なロジックを時間内に実装するスキルがあります。 |
| C | 上位60% | 1000~1400ぐらい | **基本的な実装スキル**<br>コードを書く基本スキルがあります。比較的簡単なロジックであれば時間内に実装できます。 |
| D | - | - | **基礎知識**<br>プログラミングの基礎知識を学んだ状態です。実装できるロジックは限定的です。 |
| E | - | - | **チュートリアル終了**<br>チュートリアル(標準入力での値の取得)終了時に取得できるランクです。実装スキルは未知数です。 |

**※比率はCランク以上のユーザーでの概算数値**

なにをもって**実装スキル**と呼ぶかは悩ましいですが、仮に「**用意されたロジックを実現するためにコードを書く**」ということに限定した場合、個人的な感覚としては、各ランクにおいて**概要**に記載されているレベルが高すぎる気はします。ここまでの能力があるとは言いづらいのではないかと。

ただ、競プロをやる前の私だったらもっと手こずったと思うので「**競プロ慣れてしているかどうか**」でかなり左右されるかもしれません。まあ、競プロ経験も一種の実装スキルではあるので、切り離して考えられるものでもないですが。

## 問題の内容

先述した「[paiza転職とは](https://paiza.jp/guide/career#outline)」のページにある通りです。

> 基本構文をベースにしたデータ入出力処理問題から探索ロジックやツリー構造などのアルゴリズムを使って計算量を効率化させる問題が揃っています。

## サンプル問題

「[プログラミングスキルチェック(練習問題)](https://paiza.jp/challenges/practice#samplesubject)」としてサンプル問題が公開されています。アカウント登録をせずとも試すことが可能です。

問題文を読んで言語を選択してコードを書いて提出するという流れです。英語への切り替えボタンはないので、問題文は日本語だけのようです。

![image02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/869934/6c7c799f-8651-9fa4-546a-1651a63fd5b0.png)

このサンプル問題では対応していないですが、本番のスキルチェックでは入力例に対しての出力結果をブラウザ上で確認可能ですので、そういう点においてはAtCoderよりもほんの少しだけ「**ブラウザ上で完結させやすい**」と言えます(良し悪しに言及したいわけではありません)。

## 使用できるプログラミング言語

「[各言語のバージョン、環境情報](https://paiza.jp/guide/language)」にまとまっています。

ただ、実際のスキルチェックのページにある下記の記載と一致しません。

> 対応言語はJava、PHP、Ruby、Python2、Python3、Perl、C、C++、C#、JavaScript、Objective-C、Scala、Go、Swift、Kotlinです。問題は共通です。

なぜだろう？

ということで確認してみたのですが、**Haskell、CoffeeScript、Bash、Erlang、R、COBOL、VB、F#、Clojure、D、Elixir、Rust、Scheme**は**β**のようです。

超余談ですが、AtCoderで対応しているプログラミング言語は「[ルール - C&#43;&#43;入門 AtCoder Programming Guide for beginners (APG4b)](https://atcoder.jp/contests/APG4b/rules)」のページで確認できますが、**2023/8/6から2023/8/12**の期間でついに更新予定ですね。アップデート後の言語などは「[使用できる言語とライブラリの一覧](https://img.atcoder.jp/file/language-update/language-list.html)」で確認できます。

## ルール

> 以下のルールを守って受験してください。
> 
> ・問題及び提出コード、ヒントをブログやSNS等に掲載しない
> ・解答やヒントを教えてもらったり他人のコードを利用しない
> ・複数アカウントで事前に問題を見るなどの不正行為をしない
> 
> 以下の行為は、禁止行為となります。
> ・ウェブ検索にて、他の受験者の解答コードを検索して閲覧する行為
> ・解答後においても、他者と問題について相談等する行為

とあります。

下記は許可されているそうです。

> ・標準ライブラリ関数の利用方法を確認するために、プログラミング言語の公式リファレンス等を参照する。
> ・一般的なアルゴリズムについての解説記事をウェブで検索して参照する、例えばバブルソートの実装方法など。
> ・過去に自分で作成したコードを参考にする。(もちろん、複数アカウント等で事前に問題を閲覧してコードを作成するのは不正行為です)
> ・paizaラーニング( https://paiza.jp/works/ )の解説動画を確認する。(ぜひご活用ください)

詳しくは「[スキルチェックについて](https://paizasupport.zendesk.com/hc/ja/categories/360002299911-%E3%82%B9%E3%82%AD%E3%83%AB%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)」をご覧ください。


## アカウント登録

スキルチェックに挑むにはアカウントが必要です。

[アカウント登録](https://paiza.jp/sign_up/services)で下記の4つのうちの1つを「**主に利用するサービス**」として選んで、アカウントを作成します。各サービス内からアカウントを作成する場合は選択不要です。

- [paiza転職](https://paiza.jp/career)
	- エンジニアのための転職サービス
- [paiza新卒](https://paiza.jp/student)
	- 学生のための就職サービス
- [EN:TRY](https://paiza.jp/en_try)
	- 未経験や若手のための転職サービス
- [paizaラーニング](https://paiza.jp/works)
	- プログラミング学習サービス


**Facebook、GitHub、Twitter、Google**連携での登録も可能となっています。Twitter連携、無事に動くかな？

## スキルチェックへのチャレンジ

Sランク〜Dランクのそれぞれに多数の問題が用意されています。
現時点ではSとAが50問以上、BとCが100問以上、Dが250問近くです。

問題は**毎週木曜日に追加**されるようです。履歴を見ていると木曜以外に追加されることもあるみたいではあります。

チュートリアルをやるとEランクに、Dランク問題を1問解けばDランクに、Cランク問題を1問解けばCランクに……Sランク問題を1問解けばSランクになれるようです。ただしランクアップするには**テストケースの通過数**や**解答時間**も影響します。
今は一度上がったランクが下がることはないです。

今回、私はE、D、C、B、A、Sと順番に問題を解いていきましたが、いきなりS問題にチャレンジすることもできるのではないかと思います。

下記のルールがあるため、同じ問題では一度しか**評価判定対象**になりません。

> 各問題は制限時間があり、ランクアップへのチャレンジは各問題1度のみ可能。
> 同じ問題への再チャレンジが可能となっており(※ランクアップはできません)練習をして新着問題へ挑戦できます。
> 新着問題は毎週追加されます。

つまりは、スキルチェックは、**用意された問題数**が**チャレンジ可能回数**です。
私がこの記事を書いている時点ではSランク問題は**54問**なので、Sランクになるためのチャレンジは**54回**しかできません。「54回できます」とも言えますね。

## 問題の選び方

問題の選択画面では問題毎に下記が記されています。

- 問題のタイトル
- 解答時間中央値
- 正解率
- 平均スコア
- 受験者数
- 難易度(レーティングの増減に影響)

これらの情報を元にして、どの問題を解くかを選びます。

「**正解率が高いものはひっかけ要素が少なそうだからこれにしよう**」「**さっさと終わらせたいから解答時間中央値が短いものにしよう**」など、各々の考え方でどうぞご自由にお選びください。

## 採点方法

- 用意されたテストケースで正しい出力がされるか：50点
- 解答時間：50点

の合計100点です。

解答時間は**想定解答時間内**が基準とされるので、ランクアップ目的であれば、競プロのようにシビアなスピード勝負ではないです。

**想定解答時間**とは別に**制限時間**も設けられており、それを上回ると0点です。

## 解答コードの提出

![image03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/869934/99f58218-0d74-1258-fb19-7a5a8fa096c3.png)

このような画面において

- 解答コードを提出する
- 用意されたテストケースについて、一つずつ、通過するかチェックされる

という流れです。
これについてはAtCoder同様です。
結果はすぐに出ます。

私は使っていないですが、入力値をブラウザ上で変更する手段として[paiza.ioの実行環境](https://paiza.io/ja/projects/new)へのリンクが張られています。

「**提出が一度しかできない**」のがAtCoderとの大きな違いですね。AtCoderではペナルティ(提出時間に5分加算)はあるものの再提出ができますが、paizaのスキルチェックでは一度提出して間違えていたらその問題についてはアウトです。
厳密には、同じ問題を再度解くことはできるのですが、ランクへの反映はもうされません。

ですので、実装において「**このパターンを考慮し忘れてた！**」という場合は、ショックが大きいです。

## 最後に

いつでも挑戦できるのが大きいですね。

問題数も多いですし、難易度も幅広いので、エンジニアの成長に強く寄与してくれそうです。

## 宣伝

[SupershipのQiita Organization](https://qiita.com/organizations/supership-inc)を合わせてご覧いただけますと嬉しいです。他のメンバーの記事も多数あります。

Supershipではプロダクト開発やサービス開発に関わる方を絶賛募集しております。
興味がある方は[Supership株式会社 採用サイト](https://supership.jp/recruit/)よりご確認ください。