はじめての人向け「競技プログラミング」って?

 

新入生向けに、「競技プログラミング」ってなに? を軽くまとめておこうと思います。

 


そもそも「プログラミング」って?

普段あまりコンピュータに興味のない人にとって、「プログラミング」はなんというか、得体の知れない難解なものに感じると思います。まあ当然といえば当然です。よくイメージされるのは、訳のわからない黒い画面に、高速で文字列を打ち込んでいく姿でしょう(?)。そりゃあ難しそうに見えます。

そもそも、プログラミングってなんでしょう?Wikipediaには、こうあります。

コンピュータのプログラミング: programming)とは、コンピュータプログラムを作成することにより、人間の意図した処理を行うようにコンピュータに指示を与える行為である。

 

なにかコンピュータにやらせたい処理があるとします。例えば、地図上で、最寄り駅から東京駅までの経路を考えるとしましょう。

人間がこれを行うとき、どのようなことを考えるでしょうか? 「地下鉄で仙台駅まで行ってー、新幹線で東京駅までいけばいいー」とか、「時間がかかってもいいから、仙台駅からバスに乗るー」とか、なんとなく考えると思います。人間は「川内駅から仙台駅までは2.8kmあって、6分かかり、運賃は200円である」といった感じの大量のデータを(実感はないと思いますが)いともたやすく扱って、高度な処理を行っているのです。

では、同じことをコンピュータにやらせるとしたらどうでしょう? コンピュータはあくまで「計算機」です。内部では、数字(というか電気的なON/OFF)ですべての情報が扱われているのです。ということは、「運賃や所要時間などの大量のデータをどういう風に組み合わせて計算すれば、最適な経路が出るか?」ということさえ教えてあげれば、計算はしてくれるわけですね。

 

この「計算の方法」を記述すること、それこそがプログラミングです。

そして、この「計算の手法」のことを「アルゴリズム」と呼びます。

 

プログラミング技術の競い方

プログラミングは、主に3つの知識を必要とします。まず、人間がコンピュータにわかる形で処理を記述するための「プログラミング言語」の知識、させたい処理を的確に分割し、正しく組み立てる「アルゴリズム」の知識、そして(複数のコンピュータ間でやり取りをする際に)情報を保護しつつ、やり取りを確立させる「セキュリティ」の知識です。

これら3つの中で、共通して利用でき、必要とされる知識は「アルゴリズム」の知識です。

プログラミング言語は目的に合わせて数多く存在しますし、セキュリティの知識もどのような場面、状況で運営するかによって様々で、必要とされない場面もあります。

 

しかし、プログラミングをする上で「やらせたいことをアルゴリズムとして書く」のは避けては通れません。どのような場面であれ、アルゴリズムの知識は多少なりとも必要となります。

そして、その技術を競うのが「競技プログラミング」というわけです。

 

競技プログラミングのルール

競技プログラミング(通称: 競プロ)のルールを簡潔に述べると、「要求された処理を行うプログラムを」「出来るだけ早く」「正確に」書くことです。

競プロは、コンテスト形式で争われます。と言っても、そんな仰々しいものではなく、家にあるPCからWebサイトにアクセスして参加できるものがほとんどです。

1回のコンテストでは、「~をするプログラムを作成してください」といった感じで、いくつかの問題が与えられます。それらには難易度が設定されていて、プログラムを書くのが難しいものであればあるほど、高いスコアを獲得することができます。また、同じ問題を正解するにしても、できるだけ早くプログラムを作成して提出したほうが高いスコアを得られます。

そうして、参加者内での順位が決まります。順位に応じて、多くのコンテストでは強さの指標である「レーティング」が与えられます。偏差値みたいなもんですね。

 

自分のプログラミングスキルを、他人と競いながら高めていく、それが競技プログラミングです。今っぽい言い方をすれば、eスポーツの一種として捉えることもできますね。

 

役に立つの?

当然の疑問だと思います。しかし、先述したように、アルゴリズムの知識はどの場でも求められますし、高速に実装できることは武器になります。

現に、Yahooなんかは採用指標の一つとして競プロのレーティングを採用しましたし、企業が優秀な学生をとるためにコンテストを主催する場合もあります。

それだけ、役立つ技術として見られている、ということです。

 

おわりに

「プログラミングが必要な技術なのは知ってるけど、何から初めていいかわからない…」という人は多いです。スマホのアプリやゲームを作ってみたい!っていう人も、最初は何をやっていいかわからないでしょう。

そんな人にも、競プロはおすすめです。プログラミングの基礎スキルを磨く、いい機会になること間違いなしです。

とりあえず、初めてみるのもいいんじゃないでしょうか?

 

以下のサイトも読んでみてください。

『初心者こそ、競技プログラミングに挑戦してほしい。髙橋直大の「世界にAtCoderを広める」という夢 』

https://persol-tech-s.co.jp/i-engineer/human/atcoder

日本最大級の競技プログラミングサイト「AtCoder」の社長による、競プロの魅力解説です。

 

『「アルゴリズム」とは何か、すべての人がわかるように解説! – Qiita』

https://qiita.com/drken/items/f909b79ee03e679c7142

アルゴリズムって何?な人向けに、具体例を挙げて解説している記事です。

One thought on “はじめての人向け「競技プログラミング」って?

  1. Pingback: よくある質問 | 東北大学puzzleknot 公式サイト

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です