paiza をやってみた感想
◆ 面白いけど難しい
◆ ランクは 1 回クリアでいいので簡単に上げやすい
◆ 時間制限があって 1 回しか提出できないので考慮不足で失敗することが多め
◆ ランクは 1 回クリアでいいので簡単に上げやすい
◆ 時間制限があって 1 回しか提出できないので考慮不足で失敗することが多め
少し前の転職したいなぁとか言ってた頃 いくつかのサイトに登録してみたのですが その中のひとつが paiza です
プログラミングクイズができるところですね
少しだけですがやってみました
問題の内容やヒントはネットに書くの禁止というルールがあるので 使ってみたことすらも何も書かないつもりだったのですが 「やってみた」「Sランク取れた」みたいな記事はいくつかネットで見かけたので 私もそれくらいのことは書いておこうかなと思って書くことにしました
ちなみに転職の方はもうすでに面倒だし こんな暑い時期に面接に行くなんてやってられないということで特に何もしてません
もう 10 年くらい前 プログラミングのクイズが流行ってたのか目にすることがけっこうあって いくつかのサイトを趣味でやっていてそのひとつが paiza でした
10 年も経つのでシステムが一緒なのかは覚えてませんし 当時は転職として登録したわけじゃないので色々違ってそうです
ただ 問題の系統とチェック方法はこんな感じだった気がします
その時やっていたサービスで paiza 以外のものはたしかサービス終了していたはずですが paiza は今でも残っているどころか 転職支援系サービスでは実力を測れるという他にないポジションにいますね
S, A, B, ... という感じで S が一番上です
ランク付けの方法は結構緩めです
そのランクの問題に正解したらそのランクに上がります
A ランクの問題に 1 回成功したら A ランクになる
S ランクの問題に 1 回成功したら S ランクになる
という感じです
順番に上げなくてもいきなり S ランクに挑戦ということもできます
説明を読んだところ 1 度上がればその後に失敗することがあってもランクのダウンは発生しないそうです
正解率は関係ないので 1 回でも正解できればいいというものです
同じランクの問題でも正解率はばらつきがあって簡単なものもあるので 簡単なものを選べば楽にランクを上げられます
S ランクは 50 問以上あるのでチャンスは多いです
ただ 同じ問題にリトライしてもランクは変動しないので いきなり簡単な問題に挑んで失敗だと残りは難しいのばかりになるので難易度は上がってしまいます
慣れて自信がつくまでは簡単そうなのは温存したほうがいいかもですね
このシステムだと S と A ランクのユーザーがいっぱいいそうと思ったのですが あまりいないそうです
ある程度経験があって実務もやってるような人が真剣にやれば十分 S ランクに行けそうに思いますけど
とっつきやすい分 クイズ目的とか未経験の人とか学生とかが軽い気持ちでやってる分 割合的に上位が減っているとかでしょうか?
転職を考えていなければ 能力の高い人は忙しくてこういうので遊んでいないというのもあるかもです
能力高い人たちって知名度もあって人脈とかで転職していてこういうサービスはあまり使わなそうな印象もありますし
高ランクの問題は難しいので ある程度プログラミングに慣れてないとクリアするのは難しいです
アルゴリズムを考えて効率よく処理するスキルが必要になります
アルゴリズムの教科書的なのにありそうな感じでした
C などの低レイヤー言語でアルゴリズムの実装をしたことがある人の方が向いてると思います
逆にいうとスクリプト言語でアルゴリズム系は組み込み関数やライブラリ任せで深く考えないって人にはつらいです
そういう問題なので ウェブサービスとかを作る上では高ランクは必要ないと思います
ゲームを作るのなら使いそうなものが多いですけどね
実際に求人に書かれてる必要ランクは C や B が多くて A や S を要求するのは少なめでした
ただこの手の問題ってパターンがある程度限られてくるので いくつかやってると前の問題で考えてたものが有効利用できたりして 慣れが強みになります
最初にこんなの無理と思ってもいくつかやってみるといいと思います
他の人はどう考えて解いてるのか気になります
でも 問題の内容やヒントをネットに書けないという制限があるのでネットを探しても書いてる人はいないのですよね
クリア後には他の人の回答や模範回答を見れるような機能がほしいです
とはいえ paiza のシステム上で動かしてテストケースをパスするかチェックするのである程度言語は限られます
それでもメジャーどころは網羅されています
他の人の使用言語を見ると Python と C/C++ が多いようです
スクリプト言語だと便利メソッドが揃ってたり 型やバッファサイズみたいなところの考慮も不要だしで難易度は下がると思います
その代わり実行時間が遅いので制限にかかりやすいのがデメリットかなと思いましたが 言語ごとに制限時間は設定されているようでスクリプト言語は長めでした
C/C++ を使うメリットなんてあるのでしょうか
好きだから使ってるみたいなものなんでしょうかね
それなのに C/C++ や Rust を使っている人の回答の速度がかなり速くて驚きます
実行にかかった時間じゃなくてコードを提出するまでにかかった時間です
コードを書くのに時間がかかりそうな言語なのに 楽にかける言語を使っている人よりも遥かに上って……ゲームでハードモードを好んで遊ぶようなタイプの人たちなのでしょうか
遊び半分でやってるのとは違い本物って感じがします
一応 無制限ではあるのですが最初の 1 回以外はスコアやランクに影響せず自己満足にしかならないものです
事前にテストケースがいくつか用意されていて試すことはできますが 提出後に実際にテストされる項目はもっとあります
事前のテストケースは通っていたのに提出後のテストのパターンが考慮できていなくて失敗となることがあります
これが結構あるのですよね
制限時間内なら何度か提出できたらいいのですけど
逆に各数値の条件をちゃんと読んでないと 実際にありえない無駄なパターンまで考慮してしまうこともあったりします
制限時間以内でもある程度時間が経つと減点が始まるので あまりゆっくりとしてられません
高ランクの問題だといい方法が思いつかないと ギリギリになることも十分ありえます
このせいで「考慮漏れ」のところに書いたような事が起きやすくなり 難易度が上がるのですよね
また時間制限があるので 他のことをしながら軽い気持ちでとりあえずやってみる みたいなことができず 試験のような気分になって疲れます
あとは 高ランクの問題だと試行錯誤してコードを書いてる状態なので あまりきれいにならないです
ロジック的に大丈夫そうとなったあとできれいに書き直したいなーとか思うのですが 時間制限があります
それに今後メンテするわけでもない使い捨てコードです
諦めて汚いままで提出してますが気持ち悪さが残ります
そもそもコードって中の人やスカウトする人が見れる(見てる)のでしょうか?
https://paiza.jp/guide/language
C や Go などのネイティブ系は 3 秒で
C# や Java などの中間言語系は 5 秒で
Python や JavaScript などのスクリプト言語は 16 秒みたいですね
と思ったら Bash, R, VB, F# は 3 秒らしいです
C# も F# も .NET の IL に変換されるので速度変わらなそうですけど
むしろ F# のほうが追加の dll が必要になったので遅そうな印象があります
R は特に速かったような覚えはありませんし VB もスクリプト言語じゃなかったですっけ
基準があまりよくわからないですが ある程度効率を考えていたらスクリプト言語でも 1 秒かからないことが多いと思うのでそこまで気にしなくていいのかもしれません
とはいえ 効率の良いアルゴリズムを考えないといけないところで 面倒だからと総当りさせると普通に制限時間をオーバーします(経験済み)
新しい値を作り直すより既存の値を上書きしていくほうが効率は良いです
また ループ変数を基に前後に参照できたほうがいいので foreach 系があまり有効活用できません
スクリプト言語でも C とかの言語を書いていたときを思い出すようなコードになります
書いていて気持ちの良いものではないです
そういうことがあるので ある程度やったら満足して最近は新しい問題をやってないです
総合/社会人/言語別の区分でそれぞれのランキングを見れます
ただこれってあまり意味のあるランキングではなさそうです
総合が 10 位で言語別が 3 位だったら 総合の 1 ~ 9 位に同じ言語の人が 2 人いたと考えられます
でもそうじゃないようです
総合 5 位なのに言語別も 5 位で 1 ~ 4 位は自分とは別言語ということがあります
回答にかかった時間も違うので 別の人みたいです
総合と社会人で比べても 総合より社会人のほうが下がってることがありました
「総合 = 学生 + 社会人」 で総合の方がランクが下になると思うのですけど
どういう集計なのかわからないので説明を探すと下の方の注意書きに
※ このランキングは最大50名を抽出して判定しています
というのがありました
つまりそれぞれのランキングでランダムに 50 人抽出して その中でのランキングということでしょうか
それってあまり意味のないものに思えます
せっかく 1 位を取っても 選ばれた残りの 49 人が運良く自分より下だっただけで スキルよりも運が良かった状態です
1 位をとっても特に喜べないです
希望条件を指定してるのにこんなに会社あるの?って思うほどです
そこでよく見てみると 条件に一致してないのもありました
というか一致しているのはごく一部だけです
条件に一致するのは一致しているラベルがついていて それ以外は一致していないみたいです
紛らわしいですね
必須条件を満たしてないならせっかく送ってくれても無視することになるだけなのに 必須条件って相手には公開されてないのでしょうか
興味があるのが来ても埋もれてしまうのでもう少し改善されるといいなという感想です
難しいものでも もっと実際に役に立ちそうなのがあるといいなと思います
ジャンルで「ウェブフロントエンド」「ウェブバックエンド」「デスクトップアプリ」「モバイルアプリ」「SQL」「AI」みたいなので分けてそれぞれの条件での問題とか
他にも自分で 1 から作る物に限らず 既存コードがあってバグを見つけたり 機能を追加するとかもありかなと思ってます
ただ そういうのになると言語ごとに問題が限られてきますし準備も大変そうです
実現はされなそうですね
実用的に寄せすぎても楽しさは減りそうなので個人的には できるだけ少ないコード量にするとか 使える機能に制限がある状態で解くというのも好きですが 転職サイト兼用みたいなところじゃ好まれなさそうです
プログラミングクイズができるところですね
少しだけですがやってみました
問題の内容やヒントはネットに書くの禁止というルールがあるので 使ってみたことすらも何も書かないつもりだったのですが 「やってみた」「Sランク取れた」みたいな記事はいくつかネットで見かけたので 私もそれくらいのことは書いておこうかなと思って書くことにしました
ちなみに転職の方はもうすでに面倒だし こんな暑い時期に面接に行くなんてやってられないということで特に何もしてません
懐かしい
paiza は今回が初めてではないですもう 10 年くらい前 プログラミングのクイズが流行ってたのか目にすることがけっこうあって いくつかのサイトを趣味でやっていてそのひとつが paiza でした
10 年も経つのでシステムが一緒なのかは覚えてませんし 当時は転職として登録したわけじゃないので色々違ってそうです
ただ 問題の系統とチェック方法はこんな感じだった気がします
その時やっていたサービスで paiza 以外のものはたしかサービス終了していたはずですが paiza は今でも残っているどころか 転職支援系サービスでは実力を測れるという他にないポジションにいますね
ランク
paiza にはランクというのがありますS, A, B, ... という感じで S が一番上です
ランク付けの方法は結構緩めです
そのランクの問題に正解したらそのランクに上がります
A ランクの問題に 1 回成功したら A ランクになる
S ランクの問題に 1 回成功したら S ランクになる
という感じです
順番に上げなくてもいきなり S ランクに挑戦ということもできます
説明を読んだところ 1 度上がればその後に失敗することがあってもランクのダウンは発生しないそうです
正解率は関係ないので 1 回でも正解できればいいというものです
同じランクの問題でも正解率はばらつきがあって簡単なものもあるので 簡単なものを選べば楽にランクを上げられます
S ランクは 50 問以上あるのでチャンスは多いです
ただ 同じ問題にリトライしてもランクは変動しないので いきなり簡単な問題に挑んで失敗だと残りは難しいのばかりになるので難易度は上がってしまいます
慣れて自信がつくまでは簡単そうなのは温存したほうがいいかもですね
このシステムだと S と A ランクのユーザーがいっぱいいそうと思ったのですが あまりいないそうです
ある程度経験があって実務もやってるような人が真剣にやれば十分 S ランクに行けそうに思いますけど
とっつきやすい分 クイズ目的とか未経験の人とか学生とかが軽い気持ちでやってる分 割合的に上位が減っているとかでしょうか?
転職を考えていなければ 能力の高い人は忙しくてこういうので遊んでいないというのもあるかもです
能力高い人たちって知名度もあって人脈とかで転職していてこういうサービスはあまり使わなそうな印象もありますし
高ランクの問題は難しい
簡単そうに書きましたが あくまでランクアップのシステム上の話です高ランクの問題は難しいので ある程度プログラミングに慣れてないとクリアするのは難しいです
アルゴリズムを考えて効率よく処理するスキルが必要になります
アルゴリズムの教科書的なのにありそうな感じでした
C などの低レイヤー言語でアルゴリズムの実装をしたことがある人の方が向いてると思います
逆にいうとスクリプト言語でアルゴリズム系は組み込み関数やライブラリ任せで深く考えないって人にはつらいです
そういう問題なので ウェブサービスとかを作る上では高ランクは必要ないと思います
ゲームを作るのなら使いそうなものが多いですけどね
実際に求人に書かれてる必要ランクは C や B が多くて A や S を要求するのは少なめでした
ただこの手の問題ってパターンがある程度限られてくるので いくつかやってると前の問題で考えてたものが有効利用できたりして 慣れが強みになります
最初にこんなの無理と思ってもいくつかやってみるといいと思います
他の人の回答が見たい
そういう難しさがあるので クリアはできてももっといい方法がありそうと思うことがあります他の人はどう考えて解いてるのか気になります
でも 問題の内容やヒントをネットに書けないという制限があるのでネットを探しても書いてる人はいないのですよね
クリア後には他の人の回答や模範回答を見れるような機能がほしいです
言語
アルゴリズム的な問題なので 言語を問わない問題ですとはいえ paiza のシステム上で動かしてテストケースをパスするかチェックするのである程度言語は限られます
それでもメジャーどころは網羅されています
他の人の使用言語を見ると Python と C/C++ が多いようです
スクリプト言語だと便利メソッドが揃ってたり 型やバッファサイズみたいなところの考慮も不要だしで難易度は下がると思います
その代わり実行時間が遅いので制限にかかりやすいのがデメリットかなと思いましたが 言語ごとに制限時間は設定されているようでスクリプト言語は長めでした
C/C++ を使うメリットなんてあるのでしょうか
好きだから使ってるみたいなものなんでしょうかね
それなのに C/C++ や Rust を使っている人の回答の速度がかなり速くて驚きます
実行にかかった時間じゃなくてコードを提出するまでにかかった時間です
コードを書くのに時間がかかりそうな言語なのに 楽にかける言語を使っている人よりも遥かに上って……ゲームでハードモードを好んで遊ぶようなタイプの人たちなのでしょうか
遊び半分でやってるのとは違い本物って感じがします
考慮漏れ
難しい理由の一つが提出が 1 回しかできないところです一応 無制限ではあるのですが最初の 1 回以外はスコアやランクに影響せず自己満足にしかならないものです
事前にテストケースがいくつか用意されていて試すことはできますが 提出後に実際にテストされる項目はもっとあります
事前のテストケースは通っていたのに提出後のテストのパターンが考慮できていなくて失敗となることがあります
これが結構あるのですよね
制限時間内なら何度か提出できたらいいのですけど
逆に各数値の条件をちゃんと読んでないと 実際にありえない無駄なパターンまで考慮してしまうこともあったりします
回答時間制限
ゆっくりちゃんと問題を読んで 色々なパターンを考慮しましょう と言っても回答には制限時間があります制限時間以内でもある程度時間が経つと減点が始まるので あまりゆっくりとしてられません
高ランクの問題だといい方法が思いつかないと ギリギリになることも十分ありえます
このせいで「考慮漏れ」のところに書いたような事が起きやすくなり 難易度が上がるのですよね
また時間制限があるので 他のことをしながら軽い気持ちでとりあえずやってみる みたいなことができず 試験のような気分になって疲れます
あとは 高ランクの問題だと試行錯誤してコードを書いてる状態なので あまりきれいにならないです
ロジック的に大丈夫そうとなったあとできれいに書き直したいなーとか思うのですが 時間制限があります
それに今後メンテするわけでもない使い捨てコードです
諦めて汚いままで提出してますが気持ち悪さが残ります
そもそもコードって中の人やスカウトする人が見れる(見てる)のでしょうか?
実行時間制限
制限時間は実行時間にもありますhttps://paiza.jp/guide/language
C や Go などのネイティブ系は 3 秒で
C# や Java などの中間言語系は 5 秒で
Python や JavaScript などのスクリプト言語は 16 秒みたいですね
と思ったら Bash, R, VB, F# は 3 秒らしいです
C# も F# も .NET の IL に変換されるので速度変わらなそうですけど
むしろ F# のほうが追加の dll が必要になったので遅そうな印象があります
R は特に速かったような覚えはありませんし VB もスクリプト言語じゃなかったですっけ
基準があまりよくわからないですが ある程度効率を考えていたらスクリプト言語でも 1 秒かからないことが多いと思うのでそこまで気にしなくていいのかもしれません
とはいえ 効率の良いアルゴリズムを考えないといけないところで 面倒だからと総当りさせると普通に制限時間をオーバーします(経験済み)
コード
上に書いた リファクタリングできてない微妙なコードになるというのに近い話ではありますが アルゴリズム系でパフォーマンスも必要となると イミュータブルや foreach/for-of ループと相性が悪いです新しい値を作り直すより既存の値を上書きしていくほうが効率は良いです
また ループ変数を基に前後に参照できたほうがいいので foreach 系があまり有効活用できません
スクリプト言語でも C とかの言語を書いていたときを思い出すようなコードになります
書いていて気持ちの良いものではないです
そういうことがあるので ある程度やったら満足して最近は新しい問題をやってないです
ランキング
自分が解いた問題のランキングを見える機能がありました総合/社会人/言語別の区分でそれぞれのランキングを見れます
ただこれってあまり意味のあるランキングではなさそうです
総合が 10 位で言語別が 3 位だったら 総合の 1 ~ 9 位に同じ言語の人が 2 人いたと考えられます
でもそうじゃないようです
総合 5 位なのに言語別も 5 位で 1 ~ 4 位は自分とは別言語ということがあります
回答にかかった時間も違うので 別の人みたいです
総合と社会人で比べても 総合より社会人のほうが下がってることがありました
「総合 = 学生 + 社会人」 で総合の方がランクが下になると思うのですけど
どういう集計なのかわからないので説明を探すと下の方の注意書きに
※ このランキングは最大50名を抽出して判定しています
というのがありました
つまりそれぞれのランキングでランダムに 50 人抽出して その中でのランキングということでしょうか
それってあまり意味のないものに思えます
せっかく 1 位を取っても 選ばれた残りの 49 人が運良く自分より下だっただけで スキルよりも運が良かった状態です
1 位をとっても特に喜べないです
スカウト
S ランクになるとスカウトがいっぱい届きました希望条件を指定してるのにこんなに会社あるの?って思うほどです
そこでよく見てみると 条件に一致してないのもありました
というか一致しているのはごく一部だけです
条件に一致するのは一致しているラベルがついていて それ以外は一致していないみたいです
紛らわしいですね
必須条件を満たしてないならせっかく送ってくれても無視することになるだけなのに 必須条件って相手には公開されてないのでしょうか
興味があるのが来ても埋もれてしまうのでもう少し改善されるといいなという感想です
もっと実用的な問題が欲しい
かなり久々にやってみて楽しくはありましたが やっぱりアルゴリズム系のは疲れます難しいものでも もっと実際に役に立ちそうなのがあるといいなと思います
ジャンルで「ウェブフロントエンド」「ウェブバックエンド」「デスクトップアプリ」「モバイルアプリ」「SQL」「AI」みたいなので分けてそれぞれの条件での問題とか
他にも自分で 1 から作る物に限らず 既存コードがあってバグを見つけたり 機能を追加するとかもありかなと思ってます
ただ そういうのになると言語ごとに問題が限られてきますし準備も大変そうです
実現はされなそうですね
実用的に寄せすぎても楽しさは減りそうなので個人的には できるだけ少ないコード量にするとか 使える機能に制限がある状態で解くというのも好きですが 転職サイト兼用みたいなところじゃ好まれなさそうです