創報堂ブログ

2022.02.08 karita

競プロプレイヤー

聴く音楽のラインナップが固定化されてきた苅田です。

一曲だけGreeeenの愛唄とかなり古い曲が混じってて外すかどうか迷ってましたが結局外すの忘れてそのままでした。

 

さて、今日は題名にもある通り競プロについてのお話をしたいと思います。

競プロとは競技プログラミングの略で数学の問題みたいなものをプログラミングでいかに早く解くかというのを競い合います。

日本でよく使われる競技プログラミングのサイトとしてAtCoderPaizaなどがあります。(Paizaは転職サイトなので競技プログラミングというより転職時のスキルチェックという要素が強いですが難易度は低めなので入門にはうってつけです。)

AtCoderは毎週土曜日(コンテストによって異なります)にコンテストが開かれコンテスト中に問題を解ければレートを上げることができますが、参加しなければどんどんレートが下がっていきます。

Paizaは公開されている問題を解けばレートが上がります。

実際にAtCoderの練習問題を解いてみましょう。

問題文

意訳すると入力されたN個の整数がすべて偶数の時、2で割った数字に置き換える。何回操作したときにすべてが偶数でなくなりますか?

これをPHPで解いていきます。

処理の流れを見ていきましょう。

  • まず何個の整数を入力するかのnとn個の整数を入力する処理があります。

PHPの場合nは使うことがないので関係ないですが、競技プログラミングの性質上処理速度を求めるので本来はC、C++向けなのでnというものが設けられてます。

  • whileで無限ループしています。

競プロではよく使います。

  • 全てが偶数かどうかを判別する。

isAllEven関数の中ですべてが偶数か判断しています。偶数でなかった時点でfalseを返し終了します。これは早期リターンという考え方で無駄な処理をせずに済みます。ifの条件式で!isAllEvenとしています。これも同じ理由で偶数でないものが一つでも含まれているをわかった瞬間countを出力してプログラムを終了します。

  • 配列の中を2で割った値に更新する。

先ほどすべてが偶数かどうかの判断をしたのでこの処理にたどり着くときはすべてが偶数であると保証されています。なので2で割った値に更新します。

  • 最後にcountを出力して完了

問題が解けたらページ下部で言語でPHPを選択しコードをテキストエリアに張り付けましょう。

提出ボタンを押して

ACとなればOKです。

そのほかにWA(Wrong Answer)RE(Runtime Error)がありますがAC以外は間違っています。

 

ちょっとした頭の体操レベルの問題も多数あるので暇な時間などに挑戦してみてください。

ちなみにAtCoderは色でランク分けされますが、少し話に出てきたPaizaにはわかりやすくSABCDのランクが設けられています。僕は現在ど真ん中のBランクです。

お問い合わせ

ご相談や制作についてのご質問、その他ご不明な点などございましたら どうぞお気軽にお問い合わせくださいませ。

  • TEL:079-284-9304 受付時間 平日9:00~18:00
  • お問い合わせフォーム
有限会社創報堂

兵庫県姫路市にあるホームページ制作・システム開発の総合クリエイティブ会社
有限会社創報堂

〒670-0932 兵庫県姫路市下寺町129 Nビル2F
TEL 079-284-9304 FAX 079-284-9305

© 2005 SOUHOUDOU