大学内プロコンで最下位を取ってしまった僕でもAtCoder緑になれました!

こんにちは、osumi_kyopuroです。

今回の記事は私が緑コーダーになるためにやったことについて書きました。参考に出来ることはあまりないかもしれませんが読んでいただけると幸いです。

atcoder.jp

osumiのページ

 

自己紹介

名前:osumi_kyopuro

年齢:22歳

最終学歴:現役で室蘭工業大学 情報電子工学系学科卒業

職業:Web Application Engineer

会社:都内アプリ開発会社(上場)

 

競プロを始めたきっかけ

競プロを始めるきっかけになった理由として二つあります。

一つ目はコンプレックスを解消したいと思ったからです。大学1年生の講義でプログラミングコンテストに参加しました。当時標準入力すら受け取れなかった私は学部内最下位を取ってしまいました。ショックが大きくこのまま情報系にいきプログラマーになれるのかすごく心配になりました。さらに私は人と比べて何をするにも遅く思考が浅くてよくクラスメイトや親から「ノロマ」と馬鹿にされたりしました。このプログラミングコンプレックスとスピードコンプレックスを解消するにはプログラミングコンテストが最適だと考えたので競プロをすることにしました。

 

二つ目は問題を解けると楽しかったからです。最初に解いていた問題はただ「Hello,World!」と標準出力するだけなのですがそれが出来たとき脳汁のようなものが出てくるのがわかりました。無我夢中で問題を解いていた気がします。この気持ちがやはり一番のモチベーションになっていると思います。このような理由から続けています。

 

緑コーダーになるためにやったこと

緑コーダーになるためにやったこととして四つあります。

一つ目はAtCoder Problemsの問題をたくさん解き、本番で時間がかかったり解けなかった問題は必ず復習をしたことです。AtCoder Beginner ContestのAB問はすべて、CD問のdiff1000以下の問題はほぼ解き累計1200問解いています。ただ解くだけではなく本番で30分以上かかってしまった問題はメモして再度復習するようにしました。そのおかげもあって早解きを安定させることができました。

AtCoder Problemsのページ

ABCでの解いた問題数

復習メモ

今まで習得したデータ構造とアルゴリズム

二つ目はバーチャルコンテストに参加することです。必要なアルゴリズムやデータ構造を自分で取捨選択して実装する力をつけるにはこれが最適でした。本番以外でも本番に近い形式で練習すると本番でも焦らず考える事が出来るようになるのですべての競プロerにおすすめです。

実施中のバーチャルコンテスト

 

三つ目は競プロ仲間を作り、コンテスト終了後に感想戦をすることをしました。これにより違う人の別の解法を知ることが出来たり、モチベーションをあげる事が出来ます。僕は実際にABC263(入緑したABC)でD問題を考えているときに、友人の会話を思い出して正解にたどり着く事が出来ました。さらに頑張っているのは私だけではないと奮い立たせることでより頑張ることが出来ました。

 

四つ目は謎解きパズルや中学受験用の算数文章題の問題集を解いて粘り強く考える癖をつけるようにしました。私自身、今まで数学や算数でわからない問題が出てきたらすぐに答えを見る癖があって考えることを避けてきて考える事が苦手でした。解決策として友人がパズルや算数を提案してくれました。直接的には競プロに影響していないようにみえますが、間接的に問題を粘り強く考える癖がついてきました。いつもABC3完程度で茶色停滞していて考察が得意ではない人に是非勧めたい勉強法です。

パズルの本

算数文章題集



個人的には粘り強く考える力を養う練習をしてD問題がだんだん解けるようになったので四つ目の勉強法を実践して頂きたいです。

 

最後に

この記事を読んであなたの競プロ生活に役立てられたら幸いです。

ここまで読んで頂きありがとうございました。

 

Tic Tac Tosumi完成!!

こんにちは、osumi_kyopuroです。今回は自分がゲームを作って多くの人に触ってもらえたのでそのことについて記事にしてみました。最後まで読んで頂けるとうれしいです!

 

f:id:osumi_kyopuro:20210317024252p:plain

Tic Tac Tosumi(PC画面)

 

 

基本情報

 

 

 

「Tic Tac Tosumi」になった理由

端的に言うと「Tic Tac Toe」+「osumi」=「Tic Tac Tosumi」から来ています。

 

あなたは「Tic Tac Toe」がどういう意味か知っていますか?これは日本語で「三目並べ」という意味です。3×3 の格子を用意し、二人が交互に「○」と「×」を書き込んでいき3つ並べるゲームです。名前を英語にするか日本語にするか迷いましたが名前を英語にする方がかっこいいなと個人的に思ったのでゲーム名に採用することにしました。

 

「osumi」は僕が好きな競技プログラミングのサイトAtCoderのアカウント名から引っ張ってきています。自分が作ったプロダクトにはほとんどこの名前を入れています。使っている理由は作者を探すのを楽にしたかったからです。作成者としてはユーザーの意見をいち早く取り入れたいと思うことがあって、ユーザーが自分に対して作者を探す手間を省いて意見をしやすいような心がけをしています。

例:勤怠管理OSUMI,Portfoliosumiなど

f:id:osumi_kyopuro:20210317182254p:plain

f:id:osumi_kyopuro:20210317182347p:plain


 

 

経緯

端的に言うと就活でのコーディングテストを機にJavaScriptを理解したいと思い、実装シンプルなゲームを作ったところから来ています。

 

自分は今22卒として就活中なのですがweb系企業を中心に受けています。そこのコーディングテストでフロントエンドよりの問題が出されてJavaScriptを利用する問題に苦戦しました。結果的にはコーディングテストを通過したのですが、就職してからもたくさん触ることになるのにこんなところで躓いていて大丈夫なのかと心配になりました。やはりJavaScriptの理解が必要だと思いました。

 

今までの経験則的にインプットよりアウトプットの方が理解を深めることができるなと思っていました。しかし何を作ったらシンプルに動いてかつ理解を深められるだろうと考えました。他の人の意見も聞いてみようと思いMPC*1の友達に聞いたり、記事を探したりしました。最終的に自分の願望に近い物が三目並べだったので作成することになりました。

 

 

テストプレイ結果

端的に言うとLT大会で作ったゲームを公開しました。しかし、問題がたくさんあることがわかり、発表前にいろいろ備えなくてはいけないと学びました。

 

 自分はSAMIT21.03*2というLT大会に登壇しましてそこで発表しました。複数人に遊んでもらいましたが、ここで3つ問題が発生しました。

  • 難易度選択が機能しない
  • 英語と日本語が混じっていて気持ち悪い
  • AIが斜め3列を探知しない

 

自分でも発表前に確かめたのですが気づくことが出来ませんでした。発表前に完璧にしたいと思っていたので悔しいです。次のLT大会があれば友達にデバッグプレイしてもらって修正してから発表しようと思いました。

 

f:id:osumi_kyopuro:20210317182723p:plain

 

工夫したところ

二つあります。

 

一つ目は先攻後攻、難易度調整などをラジオボタンでカンタンに設定できるように実装したところです。最初はモーダルで調整するなど考えましたがラジオボタンで調整した方がユーザー側でも作成者側でもやりやすいので今のUI/UXになりました。

 

二つ目はレスポンシブデザインに対応しているのでPCでもスマホでも触りやすいようにしたことです。理由としては多くの人に触ってもらいたいと思ったからです。

 

f:id:osumi_kyopuro:20210317175949j:plainf:id:osumi_kyopuro:20210317175954j:plain

 

 

 

感謝

Twitterで公開したら多くの人に触ってもらうことが出来ました。本当にうれしいです。プレイしてくださったすべての皆様ありがとうございます!今後ともosumi_kyopuroをよろしくお願いします!!

f:id:osumi_kyopuro:20210317180803p:plain

Twitterで宣伝

f:id:osumi_kyopuro:20210317181103p:plain

 

 

*1:MPC:室蘭プログラミングクラブ

*2:SAMIT:室蘭工業大学主催の勉強会

TechFUL最下位からAtCoder茶になるためにしたこと

はじめまして、osumi_kyopuroです。初投稿ですがよろしくお願いします。

早速ですが皆さんはAtCoderで「色をつけたい」と思ったことはありますか?

 

色変したいけど、「俺なんかに茶色は無理」「AtCoder? 天才以外お断りパズルコンテストやんけ!」と諦めている人はいませんか??

 

安心してください。一年前、大学の講義の一環として情報系一年生全員で行われたプログラミングコンテスト(TechFUL)がありました。AtCoderより簡単なコンテストでした。しかし、結果は最下位!!

そんな私が茶色に到達したのです。

f:id:osumi_kyopuro:20200405174343p:plain

僕のコンテスト実績

 

 

諦めている方に向けて「TechFUL最下位からAtCoder茶になるためにしたこと」を記事に書いたので是非参考にしてください!!

1.精進しろ!!

1-1精進量

精進量が足りていません。これに尽きると思います。競プロ強くなるには競プロをする(精進)しかありません。質以前に量をこなしてください。10回コンテスト出て茶色になれない人は必ずAtCoder Beginner ContestのAB全埋めしてください。典型アルゴリズムを学ぶ以前に基礎ができていないと無意味なので頑張ってください。

 

ちなみに僕は.....

f:id:osumi_kyopuro:20200405180637p:plain

僕の精進量

この程度できたら茶色にはなれると思います。

 

1-2 精進の仕方

A問題やB問題は極力解説を見ずに解くことを心がけました。わからないならわかるまで考える。この考える力が本番に活きてくると思っています。

C、D問題の茶色diff以上でわからない問題があるときは解説を読みましょう。知らない典型アルゴリズムを使用している可能性があるのでそこで覚えましょう。

 

 

 

2.メモを残す

 解いた問題でも難しくて解説を見たやつ、時間がかかったやつあると思います。そういった問題は忘れないようにExcelファイルにアルゴリズム別で、問題の概要をまとめています。本番に、過去問に似た問題が出ても早急に対応できるようになります。

 

 

f:id:osumi_kyopuro:20200405213001p:plain

アルゴリズム別にメモ

自分が見てわかれば何に書き込んでも良いと思います。

 

 

 

3.最高のパフォーマンスを出すための準備をする

 僕はコンテスト直前にABCのB問あたりを何問か早く解くことで、コンテスト開始時でも頭をフル回転できるようにしています。

 

別の人は、女装してコンテストに出ると良いといっている人もいます。集中できるらしいです。

 

このように個人差があるので自分だけの集中できる準備をしてください。

 

 

最後に

近年AtCoderの競技人口が増えていて、色に求められるレベルが上がっているのでこの問題解けたら茶色とかはわかりません。灰色だからといって緑diff問題解けなくていいやとか思わないでください。自分の限界を決めないで、日々精進しましょう!!