programming

paizaのSランク取得とD問題の全埋め

とりあえず全提出データをPythonでスクレイピングしてまとめました

更新

2021/11/02に新しくS問題を解いたので、一部をリライトしました。 現在は緑コーダーになり、直近のABCだとパフォーマンスが1000-1200くらいをさまよっています。

D問題を埋めた

この行為に意味があるか分かりませんが、早解きすると順位が出るのでPythonに慣れた今の断面で一気にD問題を解ききりました。
たまに問題文をちゃんと読んでなくてACできなかったりするとレートが50以上ぶっ飛ぶのが厳しいポイントです(いくつか喰らいました)。

終わってみるとこれ意外と効果あって、基本処理に悩むことがほぼなくなった感じです。
いろんな言語をさわるほど「この言語だとこの処理どう書くっけ」みたいなのがありますが、少なくともPythonなら息をするように手が動くよう(な気がする程度)にはなりました。

2021/11/02追記

現在もコンテスト本番はPythonを使っていて、過去問を解く際に実行時間が厳しいとRustやC++を使うことがあります。逆に簡単な問題ではコンパクトに書けるRubyを使ったりもします。

現状の実力

一応、paizaではSランクになったものの、難しい問題だとなんのアルゴリズム使えばいいかすら見当がつかないのが普通にあります。 この記事執筆時点でのAtCoderの平均パフォが600くらいのまだまだビギナーです(執筆時点では灰でした)。

知ってるアルゴリズムとしては、以下に挙げるくらいでまだ難しいのはあんまりわかっていません。

  • BFS
  • DFS
  • GCD/LCM
  • エラトステネスの篩
  • Union-Find
  • 累積和
  • ゼータ変換・メビウス変換(多次元累積和の演算回数圧縮)
  • DP(最大・最小変換くらいまで)
  • バイナリサーチ(めぐる式)
ついでにAOJのITP1も全部埋めた

こっちはPythonでなくてC++を練習しようと思って全部埋めました。

D問題埋めをして、基本問題のノックが思った以上に効果的で、ノック終わってから1週間くらいしたコンテストで水パフォが出ました。プログラミング、完全にスポーツとか楽器の類ですね。

というか個人的には、音ゲー得意な人は競プロとか好きそうな気がします。

最短でSランクを目指すならどうするか

これからSランクを目指す人の参考になればと思い独断と偏見で書きます。

基本処理で悩むようだと厳しい

最短の方法を考えると、そもそもSに挑むにあたっては「D問題は1分切るよね」くらいには基本の入出力は出来ないとおそらくしんどいです。

とはいえ、私自身もPython始めてまだ3ヶ月ですが、普通に1位を量産できているので安心してください。全然無理な話ではないと思います。
それこそ最初はD問題を埋めたりして頑張っていけばなんとかなるんじゃないかと。

C++みたいにおまじないが多い言語と違ってPythonなら基本処理周りは超シンプルに書けるので、普通にやってれば半分も埋める頃には1分切れると思います。

問題を解くときに、解法(アルゴリズム)と記述に分かれますが、解法を考えることに集中できるだけのプログラミング力は必要でしょう。

基礎学力はやっぱり必要

あとは、基礎学力はわりと重要だとは思います。 競プロってなんだかんだプログラミング版の受験問題みたいな感じなので。

とはいえ、学力が東大レベルじゃないと無理とかいうことは全然なくて、それこそMARCHレベルくらいで全然十分な感じはします。
当たり前ですがpaizaには学力だけでなくプログラミング技能も効いてくるので、学力でSランク相当の上位2%に入る必要はありません。

今調べたら、MARCHが同世代人口比の上位10%にギリ入らないくらいの比率らしいでそんなに外れたことは言ってない気がします。 あくまでプログラミングと学力の掛け算で上位2%に入ればいいです。
(書いてから気付きましたが、AtCoder社長のchokudaiさんの記事でも同じようなことが書かれていました。)

個人的に、中学受験勢とかはめちゃくちゃ強いんじゃないかなって思ってます。

以上に挙げたくらいの素養はあるということを前提に最短でSランクを取りに行くなら、以下が結論です。

蟻本の初級編だけガチって習得したあと、S問題の番号が若い方から順に解き、運良く満点がとれればオッケー。

2021/11/02追記

今だと競プロ典型90問の★4か★5くらいまでを埋めたほうが手っ取り早いかもです。

これまでの全結果

paizaのサイトだと情報が一元化されていないので、Pythonでスクレイピングしてまとめました。

JavaScriptで提出してるやつは日付が若いですが、これはJavaScript始めたてのころにやった問題です。 どれくらい始めたてかというと「progateのJavaScript編をスライドだけ見て勉強してきたぜ!」くらいなのであまり参考にならない気がします。

提出済の問題

S問題
問題タイトル順位提出日言語回答時間ランク点数
S035動物のパーティ52021/11/02C++60′6″S100
S032回覧板の回す先462020/09/16Python336′43″B30
S028ネックレスの等分472020/09/15Python3110′57″B30
S023村人の友好関係132020/09/04Python338′38″A80
S024海面の調整402020/10/22Python365′36″B50
S013理想のタイムトラベル172020/09/04Python3161′38″A92
S011追いかけっこ412020/11/01Python396′0″B30
S009辞書順最小192020/10/23Python331′31″B70
S002最短距離を測る122020/10/22Python334′2″S100
A問題
問題タイトル順位提出日言語回答時間ランク点数
A035試験の作成442020/06/16JavaScript30′35″C30
A028武器の強化322020/06/15JavaScript57′44″B50
A023週休2日制222020/05/08JavaScript27′12″B80
A018美術館のセキュリティ142020/06/16JavaScript85′4″B72
A015敷き詰めパズル-2020/06/16JavaScript46′7″E0
A005パイザボウルゲーム42020/09/04Python332′55″A100
B問題
問題タイトル順位提出日言語回答時間ランク点数
B085宝探しの手順452020/11/25Python317′22″D20
B084オススメのお店152020/10/23Python312′12″B90
B078動画視聴スケジュール-2020/05/11JavaScript53′7″E0
B074コメントの順序82020/10/22Python331′34″B100
B073イルミネーションの調査42021/11/02Python315′37″B100
B055タクシー料金162020/05/07JavaScript23′25″B100
B043ねずみ小僧12020/10/22Python313′42″B100
B041繰り返し模様152020/10/22Python331′47″B100
B016ここはどこ?192020/05/11JavaScript35′30″B100
C問題
問題タイトル順位提出日言語回答時間ランク点数
C085壊れかけのキーボード22020/10/28Python33′4″C100
C084枠で囲む12020/10/25Python31′12″C100
C080ボタンを押すゲーム122020/06/24JavaScript13′15″C100
C078株の売買12020/10/28Python34′26″C100
C077レポートの評価32020/10/28Python37′36″C100
C075ポイント払い82020/06/16JavaScript9′48″C100
C074文章サイズ変更22020/10/28Python34′24″C100
C073うさぎとかめ492020/06/17JavaScript19′36″D10
C070簡易カードゲーム22020/10/28Python36′30″C100
C067数字の調査12020/10/28Python32′23″C100
C061繰り上がりのない足し算62020/11/05Python316′3″C100
C062回転寿司のメロン22020/10/28Python33′46″C100
C056テストの採点12020/10/28Python32′31″C100
C055ログのフィルター12020/10/28Python32′13″C100
C051カード並べ42020/10/28Python34′5″C100
C049エレベーター12020/10/28Python32′3″C100
C043使用回数の調査242020/06/16JavaScript28′0″C72
C039古代の数式192020/06/17JavaScript7′4″C100
C035試験の合格判定12020/10/28Python34′22″C100
C034先生の宿題22020/10/28Python37′17″C100
C030白にするか黒にするか32021/01/24Python35′22″C100
C024ミニ・コンピュータ22020/10/28Python35′19″C100
C019完全数とほぼ完全数52020/10/28Python35′35″C100
C016Leet文字列302020/05/07JavaScript19′26″C100
C005アドレス調査22020/10/28Python35′11″C100
D問題
問題タイトル順位提出日言語回答時間ランク点数
D007N倍の文字列12020/10/24Python30′24″D100
D187曲名の表記72021/07/28Python30′40″D100
D174栄養の摂取222021/01/24Python31′4″D100
D168日付の表記72020/10/29Python31′13″D100
D166何日後になるか22020/10/22Python30′23″D100
D167買い物袋62020/10/22Python31′6″D100
D165安全な数字32020/10/24Python31′43″D100
D164区切りの良い日52020/10/24Python32′24″D100
D163縦にする12020/10/22Python30′20″D100
D160N合目の高さ22020/10/22Python30′42″D100
D162お米の重さ22020/10/22Python30′24″D100
D161貯水タンク32020/10/22Python31′24″D100
D159短冊の大きさ12020/10/24Python31′5″D100
D157信号の組み合わせ132020/06/15JavaScript1′40″D100
D158湿度の確認382020/06/16JavaScript3′28″D100
D156密度の計算12020/10/22Python30′34″D100
D155入館料の計算32020/10/24Python31′26″D100
D154画面の構成12020/10/22Python31′0″D100
D153食材選び182020/06/17JavaScript6′0″D100
D152部分点482020/04/05C++35′56″D81
D151お菓子のプレゼント32020/10/22Python31′21″D100
D150達成の確認52020/10/22Python31′8″D100
D149文字のだるま落とし12020/10/24Python31′10″D100
D148ある試験の境目22020/10/22Python31′8″D100
D147桶の水量22020/10/24Python30′54″D100
D146単語の省略12020/10/22Python30′56″D100
D145ゲームのスタミナ32020/10/22Python30′43″D100
D1445桁の数字22020/10/22Python30′53″D100
D143制動距離の計算-2020/06/17JavaScript1′47″E0
D142イルミネーションの数32020/06/17JavaScript2′46″D100
D139少ない方の勝ち182020/06/17JavaScript5′36″D100
D140N番目の単語82020/10/22Python31′19″D100
D141縦書きと横書き72020/10/24Python31′20″D100
D138おうむ返し42020/10/22Python31′37″D100
D137契約の交渉12020/10/22Python30′36″D100
D134タイトルの長さ22020/10/22Python31′31″D100
D133株の利益42020/06/17JavaScript1′51″D100
D136空港の呼称42020/06/28JavaScript0′41″D100
D135多角形の調査12020/10/22Python30′49″D100
D132N回ゲーム62020/10/22Python30′59″D100
D131脱出ゲーム12020/10/22Python31′23″D100
D129税率の変更22020/10/22Python31′21″D100
D128略語の生成122020/10/22Python32′48″D100
D127座席番号のくじ12020/10/22Python31′3″D100
D126点数の計算292020/06/28JavaScript2′2″D100
D125万歩計22020/10/24Python31′4″D100
D124あと何日32020/10/24Python30′45″D100
D123自動でチャージ132020/06/27JavaScript1′49″D100
D121AからRへ12020/10/22Python30′47″D100
D122足して0になる数12020/10/24Python30′33″D100
D120鉛筆の数52020/10/22Python30′34″D100
D119円周率の日22020/10/24Python30′55″D100
D118こよみの変換102020/10/22Python32′46″D100
D117すごろくのサイコロ32020/10/22Python31′2″D100
D115おかしの二等分32020/10/22Python30′51″D100
D116サービス料金22020/10/24Python30′43″D100
D114税込の価格12020/10/24Python31′2″D100
D112工場の生産力42020/06/17JavaScript0′46″D100
D113初日の出42020/10/24Python32′37″D100
D111文字を切り詰める32020/06/19JavaScript1′23″D100
D1103つの数字22020/10/22Python30′33″D100
D109ゾロ目の日付52020/06/17JavaScript5′1″D100
D108薬の効き目22020/10/22Python30′59″D100
D107文字列を囲う222020/06/27JavaScript1′33″D100
D106割った余り72020/10/22Python30′47″D100
D105長さの一致172020/10/22Python31′51″D100
D104送料の計算22020/10/22Python31′3″D100
D103逆さ読み22020/10/22Python30′32″D100
D102運賃の計算12020/06/17JavaScript0′33″D100
D101偶数派と奇数派172020/06/17JavaScript4′48″D100
D100区切り文字の統一12020/10/24Python31′17″D100
D099短冊づくり12020/10/22Python30′33″D100
D098ボーナスの計算112020/06/17JavaScript1′9″D100
D097梅雨入りの予想12020/10/22Python31′21″D100
D096含んではいけない文字32020/10/24Python31′16″D100
D095ジュースの分配152020/06/17JavaScript1′56″D100
D093切りの良い番号42020/10/24Python31′55″D100
D092花見の準備192020/06/17JavaScript8′49″D100
D094犬派か猫派か12020/10/24Python31′13″D100
D091花粉の予報12020/10/22Python31′32″D100
D090下一桁はいくつ12020/10/24Python30′57″D100
D089数字の取得142020/10/22Python34′36″D100
D088温度差の計算92020/06/28JavaScript1′16″D100
D087文字をくっつける12020/10/22Python30′40″D100
D086門松の作成62020/06/17JavaScript1′23″D100
D084英語で何月?172020/06/17JavaScript5′34″D100
D083ブラックジャック12020/10/22Python30′59″D100
D0822つの単語52020/10/24Python31′45″D100
D081家族で分ける52020/06/17JavaScript1′37″D100
D080忘年会の予算32020/06/24JavaScript1′7″D100
D079同じ文字22020/10/24Python31′2″D100
D078入学試験62020/10/22Python32′17″D100
D077計算機の表示152020/06/28JavaScript2′16″D100
D076禁止ワード222020/06/17JavaScript3′45″D100
D075足りないカード32020/10/22Python31′25″D100
D074時間の表記412020/10/22Python30′24″D70
D073文字の反転12020/10/22Python30′20″D100
D072データのバックアップ12020/10/24Python30′57″D100
D071洗濯物と砂ぼこり142020/06/17JavaScript5′21″D100
D070残りのページ72020/06/17JavaScript1′0″D100
D069割り切れない平均点52020/10/22Python33′4″D100
D068雨と晴れの記録12020/10/22Python31′3″D100
D067スイッチのオンオフ42020/06/17JavaScript1′21″D100
D066スタミナの計算462020/10/24Python31′29″D60
D065エラーコードの分類22020/10/22Python31′39″D100
D064嘘つきの日22020/10/24Python30′45″D100
D062ひな祭り22020/10/24Python32′4″D100
D0613倍返し?32020/10/24Python30′50″D100
D060AボタンとBボタン62020/06/17JavaScript1′9″D100
D059トランプ占い12020/10/22Python31′13″D100
D058初詣で32020/10/22Python31′28″D100
D057プレゼント選び102020/10/22Python31′56″D100
D056かまくらづくり22020/06/28JavaScript0′58″D100
D055ワインのキャッチコピー32020/06/17JavaScript0′51″D100
D05411/1112020/10/22Python31′6″D100
D053トリック・オア・トリート32020/10/24Python31′24″D100
D052ピラミッドの作り方82020/06/28JavaScript1′49″D100
D051衣替え12020/10/24Python31′0″D100
D050お月見だんご62020/10/22Python32′12″D100
D049◯◯の秋32020/10/22Python30′52″D100
D048台風の間隔62020/06/28JavaScript2′3″D100
D047メダリストの表示22020/06/28JavaScript1′12″D100
D046不思議なタマゴ22020/10/24Python30′35″D100
D045通知票22020/10/22Python31′26″D100
D044はじめまして22020/10/24Python31′22″D100
D043天気の表示42020/10/22Python31′43″D100
D042行列42020/06/27JavaScript2′19″D100
D039正三角形かどうか172020/10/22Python32′15″D100
D040連休の天気42020/10/24Python31′18″D100
D038試合の回数122020/06/17JavaScript1′15″D100
D041本棚選び122020/06/28JavaScript2′44″D100
D037花粉症でつらい92020/10/22Python32′21″D100
D036アットマーク22020/10/22Python30′44″D100
D035日付のデータ12020/10/22Python30′55″D100
D034どれにしようかな12020/10/24Python30′59″D100
D033頭文字32020/06/17JavaScript1′25″D100
D032充電時間32020/10/22Python30′34″D100
D031分から秒へ22020/06/17JavaScript0′21″D100
D029サイコロの裏面42020/06/17JavaScript0′35″D100
D028数字の桁数22020/06/17JavaScript0′26″D100
D027nまでの和62020/06/28JavaScript1′49″D100
D026一週間の予定72020/10/22Python32′0″D100
D025数字の出力72020/10/22Python32′16″D100
D024三角形の内角の和82020/06/17JavaScript1′11″D100
D022表面積の計算12020/10/22Python30′30″D100
D023Aの個数12020/10/22Python30′33″D100
D021文字列の一致102020/10/22Python31′9″D100
D019文字列からN番目12020/10/22Python30′44″D100
D017最大と最小12020/10/22Python31′2″D100
D016N文字目まで出力82020/06/25JavaScript0′52″D100
D015カウントダウン12020/10/22Python30′43″D100
D014小文字を大文字に72020/06/28JavaScript0′59″D100
D013割り算12020/10/22Python30′43″D100
D012絶対値を求めよ52020/06/17JavaScript0′34″D100
D011アルファベットで何番目42020/10/22Python32′5″D100
D010Eメールアドレス82020/06/28JavaScript1′7″D100
D009西暦の計算162020/06/28JavaScript1′15″D100
D008奇数か偶数か312020/06/26JavaScript3′25″D100
D006単位の計算22020/10/24Python31′50″D100
D005等差数列132020/06/17JavaScript4′35″D100
D004文字列の結合52020/06/17JavaScript2′59″D100
D003掛け算のリスト32020/06/17JavaScript2′16″D100
D002数の比較62020/06/17JavaScript1′56″D100

未提出の問題

S問題
問題タイトル
S007データヒストグラム
S006ビリヤードの球突き
S039ボスの部屋
S020商品の運搬
S019テレポート
S031ボトルネックの調整
S017シートの重ね合わせ
S004積まれた文字
S033逃さない
S003嘘つき探し
S040建造物の調査
S030山はいくつある
S015ABC文字列
S038お菓子の山分け
S008サイコロで迷路
S026ジャングルに潜むもの
S016水たまり
S014直方体のマージ
S034数列の圧縮
S029住みよい国
S036カップ麺屋さん
S025乱数の課題
S012ハイライト機能
S037カードバトル
S027狭い道の案内
S022センサーをかいくぐれ
S018天気の予報
A問題
問題タイトル
A055脱出ゲーム
A052階段登り
A051板たおし
A034お菓子の詰め合わせ
A021海岸線
A057最長スワイプ
A0503人リバーシ
A053RGBの個数
A033読書の課題
A006平面上の移動シミュレーション
A046アリの巣
A029詰み防止チェック
A024アイテムの分け前
A016踏切の時刻表
A007ともだちをたどる
A008パレードを制覇せよ
A054仕事の割り当て
A010クリスマスイルミネーション
A036砂漠の旅
A037強さ比べ
A030上司と部下
A014二角取り
A027paiza諸島の侵食
A040旗あげゲーム
A045大きな家
A020文字をなぞれ
A011うなぎを蒲焼きにしたくない
A042サイクリングのコース
A019いかさまシャッフル
A032Paiza電鉄
A038観光地巡り
A022正方形の足し引き算
A012最適な練習
A025動物の体調管理
A041書類の山
B問題
問題タイトル
B099台風の接近
B095カラオケ大会
B098バズの検出
B068チョコの分割
B096爆弾の大爆発
B091山頂を探せ
B081花壇のロープ
B034ロボットの歩行実験
B040たのしい暗号解読
B019グレースケール画像の縮小
B017手役の強さ
B079相性チェック
B051汚れてしまった魔方陣
B020ネットサーフィン
B076パン屋さん
B011名刺バインダー管理
B013最遅出社時刻
B092セーブポイント
B087隠された数
B033テーブルジェネレーター
B065小さなライフゲーム
B024格子を円で切り取る
B054不思議な足し算
B053表の自動生成
B025うさぎジャンプ
B0143Dプリンタ
B044爆弾ゲーム
B038つるかめ算
B0157セグメントディスプレイ
B048理想のビンゴ
B089秘密の言葉
B096ビンゴゲーム
B090選挙の議席
B052積もる粒子
B006ダーツゲーム
B037幸運な1年
B093SNSの検索機能
B009カンファレンスのタイムテーブル作成
B028チャット記録
B061福袋詰め
B072反転スイッチ
B030氷のダンジョン
B062部屋掃除ロボット
B050有効なチケット
B067タスクの管理
B031コインのウラとオモテ
B077チケットの売り場
B097カウンター席
B010サッカーのオフサイド判定
B036大統領選挙
B060サイコロころがし
B082休暇の取り方
B047ホームポジション
B064うずを探せ
B088ロボットのデバッグ
B070駒の到達範囲
B069蟻の餌探し
B086公平な分割
B057回転寿司
B059占領区域
B004ログファイルの抽出
B075商品の表示
B042横入りするネコ
B046街の距離
B029地価の予想
B045計算ドリル
B032デジタル計算機
B035ジョギングランキング
B063支払う枚数とお釣りの枚数
B056リズムゲームの分析
B026自動販売機
B071ダンベルトレーニング
B083宝の地図
B080みんなでスゴロク
B039雨上がりの道
B066色のパズル
B023マッチ棒パズル
C問題
問題タイトル
C097プレゼント応募企画の実施
C099折り紙の貼り合わせ
C020残り物の量
C086ハンドルネームの生成
C017ハイアンドロー・カードゲーム
C098多重パス回し
C090黒電話
C021暴風域にいますか?
C023クジの当選番号
C014ボールが入る箱
C089ストラックアウト
C072モンスターの進化
C022ローソク足
C015ポイントカードの計算
C095合言葉
C013嫌いな数字
C088RPGでお買い物
C096夏休み
C010安息の地を求めて
C048タダ飲みコーヒー
C093下桁ルール
C052ゲームの画面
C040背比べ
C083売上の発表
C028単語テストの採点
C079カードを集める
C059パリティチェック
C087数字の規則
C032お得な買い物
C092工場のベルトコンベア
C091みかんの仕分け
C094国民の税金
C071直角三角形
C044手の組み合わせ
C054スピード違反の取り締まり
C058模様そろえ
C050オークションの結果
C053カードの合計
C060辞書の作成
C076給与の計算
C068秘密の手紙
C057シャボン玉飛ばし
C095バスの時間
C064paizaでお食事
C026ウサギと人参
C037アニメの日時
C041メダルランキングの作成
C025ファックスの用紙回収
C042リーグ表の作成
C066金魚すくい
C081靴下の整理
C063ガーデニング
C046書籍購入費ランキング
C036犬ぞりトーナメント
C082テストの赤点
C038お菓子の分配
C045ページネーション
C069お祭りの日付
C018何人前作れる?
C065数字あてゲーム
C006ハイスコアランキング
C029旅行の計画
C031時差を求めたい
D問題
問題タイトル
D179分け前の計算
D172イヴの日付
D189何周年の確認
D170校庭マラソン
D185時給の計算
D194カロリーの計算
D190センチをミリに
D182燃費の計算
D192感嘆符の付与
D191体温チェック
D181住所の表記
D177通信料の計算
D176文字数制限
D169気温の差
D1882枚のカード
D173単語の入れ替え
D171数当てゲーム
D193電池の本数
D186暑さの基準
D180音のうなり
D17512進数
D178逆さにする
D184縦に表示