• トップ
  • ブログ一覧
  • プログラミング初心者には「競技プログラミング」がオススメ!
  • プログラミング初心者には「競技プログラミング」がオススメ!

    広告メディア事業部広告メディア事業部
    2019.10.11

    エンジニアになろう!

    今、競技プログラミングが熱い!

    ミツオカミツオカ
    2020年に、小学校でプログラミング教育が始まりましたね!
    にゃんこ師匠 にゃんこ師匠
    そうじゃな、これからの世の中は、プログラミングスキルが必須の社会になっていくだろうな!
    ミツオカミツオカ
    む…私も、周りに取り残されないようにがんばらなくっちゃ…!
    にゃんこ師匠 にゃんこ師匠
    そうじゃな!『競技プログラミング』をやってみたらどうじゃ?
    ミツオカミツオカ
    競技プログラミング?

    競技プログラミングとは?

    競技プログラミングとは、参加者に課題が与えられて、それをプログラミングで解決する大会です。

    2~3時間の短時間で終わるものもあれば、1日をかけて行うものもあります。

    上級者向けの問題では、アルゴリズムの知識と高度な考察が求められます。

    しかし、もちろん、初心者でも解ける問題も出題されます。

    「プログラミンングを始めたいけど、何を作れば良いのかわからない」という方にも、スキル向上の場としてオススメといえます。

    SamurAI Codingで若いうちから競技プログラミングに取り組もう!

    はじめに紹介するのは「SamurAI Coding」という競技プログラミングです。

    SamurAI Codingは、情報処理学会と IT 企業が今後の日本を担うプログラマーや IT 研究者を育てる目的のために発足されました。

    2012 年スタートし、毎年開催されています。

    正式名称は「情報処理学会 国際人工知能プログラミングコンテスト」。

    その名の通り、人工知能に関するアルゴリズムの正確さやプログラミングの技術を競うコンテストです。

    もともとは若い学生向けのコンテストで25歳以下のみしか参加できませんでした。

    しかし、社会人の学び直しや企業内の人材の育成のために、今は全年齢に参加の門戸を開いています。

    この競技プログラミングコンテストが他のコンテストより注目されているポイントは、有名IT企業や情報処理学会のスポンサーシップやサポートがあることです。

    懇親会もチャンス!

    ちなみに、予選に応募しただけで、決勝大会の日に行われる懇親会に参加することが出来ます。

    この懇親会では HITACHI や FUJITSU、TEAM Lab などの有名企業が参加し、交流することが可能です。

    就職や転職において、大きなチャンスをつかむことが出来るかもしれません。

    実際、この SamurAI Coding で結果を残し、転職に成功されたエンジニアの方もいらっしゃいます。

    SamurAI Codingではどのような競技が行われるのか?

    それでは実際、この SamurAI Coding では、どのような競技が行われるのでしょうか?

    見てみることにしましょう!

    出典:情報処理学会プログラミングコンテスト委員会公式ホームページより

    SamurAI Codingでは、このような正方形のマスが並んだ競技フィールドで大会が行われます。

    このフィールドで二つのチームが「侍」と「犬」の二つのユーザを操作して戦います。

    このフィールドにはユーザが入ることができない「穴」とフィールド上は見ることが出来ない「埋蔵金」があります。

    「穴」を掘って相手を妨害しながら、「埋蔵金」をより多く掘ることで勝利を目指します。

    そして、参加するプログラマーはこの侍と犬を操作するプログラムを記述し、技術力を競うことになります。

    1. 侍…穴を埋めたり掘ったりすることができる
    2. 犬…埋蔵金がある位置にくると吠え、埋蔵金の量を両チームの「侍」と「犬」に知らせる

    それぞれの特徴を把握し、プログラミングすることが大切になってきます。

    ちなみに、大会に使用されるソフトは、ほとんどの主要なプログラミング言語に対応しています。

    そのため、自分の得意な言語で参加することが出来ます。

    今後必要とされるセキュリティ人材を育てるCTF

    次に紹介するのは「Capture The Flag」、通称 CTF です。

    セキュリティやネットワークの技術を利用して問題を解きあいます。

    主にチーム同士で敵対してそれぞれのサーバを攻撃、防御しあう「Attack&Defence」とクイズ形式でポイントを集める「Jeopardy」という二つの大戦形式があります。

    特に、日本にはサイバーセキュリティの人材が少ないと言われており、CTF に注目が集まっています。

    各種CTF大会にも先ほどの SamurAI Coding と同じように多くの企業が大会を観戦しています。

    そして、新しい人材を探していますので、セキュリティエンジニアとして就職、転職を考えている人にはオススメといえそうです。

    SECCON BEGINNERS

    CTFに参加する上でおすすめなのは「SECCON BEGINNERS」です。

    この大会は、SECCON という日本最大の CTF を運営している NPO 日本ネットワークセキュリティ協会(JNSA)が運営しています。

    CTF初心者向けの勉強会です。

    他にも、有志によってCTFの勉強会や、ネット上で挑戦することが出来る常設 CTF などが用意されています。

    CTFにはどのような問題がでるのか?

    それではCTFでは実際にどのような問題が出題されるのでしょうか。

    一つ例題を紹介したいと思います。

    例題

    このQRコードが、「どのような文字列を示しているのか」を解読しましょう!

    しかし、条件として、左半分の情報がわかりません。

    ここで使うのは「strong-qr-decoder」です。

    【strong-qr-decoder】
    https://github.com/waidotto/strong-qr-decoder

    pythonで書かれていますので、実行していきましょう!

    このソースコードは、QRコードの補完部分を読み取ることが出来るので、右半分しかないQRコードも復号することができます。

    AtCoderで競技プログラミング

    実際、競技プログラミングの大会ではどのような問題が出題されるのでしょうか?

    口で説明するよりも実際に手を動かした方が理解できると思います。

    今回は、AtCoder(アットコーダー)というサイトの、競技プログラミングの問題を解いて行きたいと思います!

    【AtCoder】
    https://atcoder.jp

    ちなみに、AtCoderは、競技プログラミングサイトの1つで、(ほぼ)毎週末の夜に大会を開いています。

    参加者は、大会で良い成績を残すと自身のレートが上昇するので、みんな一問でも早く、多く解けるように頑張っています。

    にゃんこ師匠 にゃんこ師匠
    みんなで競うことで、自分のプログラミングスキルもグングン成長するんじゃな!
    ミツオカミツオカ
    AtCoderが初めての方は、問題を解く前に「チュートリアル」を参考にして下さいね

    AtCoderの大会過去問を解いてみよう

    AtCoderでは、大会に参加するだけではありません。

    自分の好きな時間に、AtCoderで行われた大会の過去問を解くことができます。

    では、今回は、初心者向けの大会『AtCoder Beginner Contest(通称ABC)』のA問題を解いてみたいと思います。

    【問題文】

    X , A は 0 以上 9 以下の整数です。

    X が A 未満の時 0、A 以上の時 10 を出力してください。

    引用:AtCoder

    この問題では、『入力 X , A が与えられて、X が A より小さければ 0 を、X が A より大きければ 10 を出力する』プログラムが求められます。

    このようにABCのA問題は、入力を受けとり、if文などの基本構文のみを用いるだけで解くことのできる「簡単な問題」が出題されています。

    コードを提出するにあたって、提出するコードのプログラミング言語を選択する必要があります。

    言語は、「C++」「Python」「C#」など様々選ぶことができるのですが、C++を用いて問題を解く人が多いです。

    理由としては、他の言語より実行速度が断然速いためです。

    にゃんこ師匠 にゃんこ師匠
    実行時間が長すぎると正解と認められないので、例えば、Pythonなどの実行速度の遅い言語を選択すると問題が解けない場合があるのじゃ!
    ミツオカミツオカ
    言語選択の際は注意しなきゃですね…!

    提出コード

    今回は、他の言語より実行速度が断然速い「C++」のコードを提出したいと思います。

    1#include <iostream>
    2using namespace std;
    3
    4int main()
    5{
    6  int x, a;
    7  cin >> x >> a;
    8  
    9  if(x > a)
    10  {
    11    cout << 10 << endl;
    12  } else
    13  {
    14    cout << 0 << endl;
    15  }
    16}

    ソースコード欄にプログラムを記述し、提出のボタンを押します。

    すると、結果ページに飛びます。

    結果

    結果の欄に「AC」と表示されれば問題クリアとなりますが…

    今回は、結果の欄に「WA」と表示されました。

    にゃんこ師匠 にゃんこ師匠
    これは、「Wrong Answer」の略であり、残念ながら「このコードは間違っていた」という意味じゃな
    ミツオカミツオカ
    コードを振り返ってみると、「 x >= a 」とすべきところが「 x > a 」となってました!

    訂正したコード

    コードを訂正し、再提出したいと思います!

    1#include <iostream>
    2using namespace std;
    3
    4int main()
    5{
    6  int x, a;
    7  cin >> x >> a;
    8  
    9  if(x >= a)		//←訂正箇所
    10  {
    11    cout << 10 << endl;
    12  } else
    13  {
    14    cout << 0 << endl;
    15  }
    16}

    確認

    今度は、見事「AC」となりました。

    これで無事、問題が解けました!

    このように、間違いを訂正して「AC」となると、とにかく嬉しいのです!

    にゃんこ師匠 にゃんこ師匠
    今回は、過去問を解いてみたが、実際に週末の大会に参加すると、さらに白熱すること請け合いじゃ!!
    ミツオカミツオカ
    AtCoder以外にも、競技プログラミングを開催している団体・組織は様々存在するので、ぜひ積極的に参加することもオススメですね!

    競技プログラミングをするメリット

    競技プログラミングでは、プログラミングやアルゴリズムの知識・能力を得ることができます。

    また、実は、就職やインターンにもつながる可能性があるのです。

    例えば、AtCoderでは、AtCoderJobsというサイトを運営しており、新卒採用やアルバイト、インターンなどの求人情報を掲載しています。

    AtCoderでのレートが良ければ、それらの求人に有利になるかもしれません。

    競技プログラミングに参加すると、自身の能力向上と仕事の機会も得られて一石二鳥といえそうです。

    こちらの記事もオススメ!

    featureImg2020.08.04エンジニアの働き方 特集社員としての働き方社員としてのエンジニアの働き方とは?ライトコードのエンジニアはどんな働き方をしてるのか、まとめたいと...

    featureImg2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...

    さいごの一言

    にゃんこ師匠 にゃんこ師匠
    競技プログラミングは、今後ますます注目されるじゃろうな!
    ミツオカミツオカ
    周りと差をつけるなら、すぐに始めなきゃですね!
    にゃんこ師匠 にゃんこ師匠
    皆も「競技プログラミング」始めてみるんじゃ~!
    広告メディア事業部

    広告メディア事業部

    おすすめ記事

    GitHubActionsのランナーに触れてみた

    こやまん(エンジニア)

    こやまん(エンジニア)

    2024.03.28

    IT技術

    Azure Data FactoryでSlackへ通知をしてみる

    たかやん(エンジニア)

    たかやん(エンジニア)

    2024.03.28

    IT技術

    GCP Secret Managerを使ってみた

    たなゆー(エンジニア)

    たなゆー(エンジニア)

    2024.03.21

    IT技術

    Bitriseのパイプラインと環境変数

    加納(エンジニア)

    加納(エンジニア)

    2024.03.11

    IT技術