水面下の夢

競プロやイラストに興味があります.メインブログがここ.同人サークル「かのらぶ」のページはこっち( https://yumechi0525.amebaownd.com ).ブログアイコンはYaQ(@8_9_00)さんから.

Hacker RankのCode.cpp 3に参加した

www.hackerrank.com


結構C++の機能的なところを使った問題が多くて面白い.(ただ,プログラムの一部分を埋める問題ばかりで,少しイライラ)





いっぱいググりながらコードを書いたので,参考にしたリンクを以下に… と思ったが,思った以上にリンクが多かったので一番最後で紹介する.


Variable Sized Arrays

www.hackerrank.com


Submit
https://www.hackerrank.com/contests/code-cpp-3/challenges/variable-sized-arrays/submissions/code/4787322


いきなり「おいおいvector使わせてくれよ!」みたいな問題でした.


長さがマチマチのリストから,指定されたインデックスの要素を取ってくる問題でした.


長さがマチマチ… 動的配列… vectorで楽に作ればいいよな…


→ !!includeするものを編集できない!!


というわけで,ポインタの配列を使うんですが,これがまた難しく,悪戦苦闘….


結局考えるよりググったほうが早いという結論になっていまい,悲しかったです.


Overload Operators

www.hackerrank.com

submit
https://www.hackerrank.com/contests/code-cpp-3/challenges/overload-operators/submissions/code/4787683

演算子オーバーロードを実装してみよう! ってだけの問題でした,と言っても今まで自分は演算子オーバーロードなんてやったことがなかったので,新鮮でした.面白い.

Box It!

www.hackerrank.com

submit
https://www.hackerrank.com/contests/code-cpp-3/challenges/box-it/submissions/code/4801862


実装がめんどくさかったので,さっき解いた.


クラスの基礎をやってみましょう的なあれで,コンストラクタとかデストラクタとか,クラス内で演算子オーバーロードの処理を書いたりだとか,これも今までやったことがない感じで学びがあった.


ただ,体積の計算でオーバーフローしていることに気づかず…(long longでキャストするだけだった)


Accessing Inherited Functions

www.hackerrank.com

submit
https://www.hackerrank.com/contests/code-cpp-3/challenges/accessing-inherited-functions/submissions/code/4787900


これは問題の意図をよく理解できずという感じだった.ただ多重継承してその中のメソッドを呼び出せるようにすれば良い? ッて感じなんだろうか,これで想定解放なのかどうかも不明.

Virtual Functions

www.hackerrank.com

submit
https://www.hackerrank.com/contests/code-cpp-3/challenges/virtual-functions/submissions/code/4788726

今度は"""オーバーライド"""を使う問題.個人的にはポリモーフィズムとか,継承とかその辺りのオブジェクト指向的なところはJavaで学んでいたからあとは書き方の問題でした.まる.




というわけで,コンテスト中に4問と,あとで1問解いて計5問ときましたとさ.


演算子オーバーロードによる動作の再定義とか,今まで自分がやってきたプログラミング言語ではできなかったので,いい経験になりました.


21 / 300


以下.長くなってしまった参考にしたリンクなど.

【C++】二次元配列を動的確保する : かんうん やかく


C++マニアック,オペレータのオーバーロード,operator overload,演算子のオーバーロード,演算子,C++入門,C++言語講座


出力用シフト演算子(<<)のオーバーロード | プログラマーズ雑記帳


C++の基礎 : コンストラクタ/デストラクタ


C++ - 静的ポリモーフィズムの安全で簡単な実装 -動的から静的にしてパフォーマンス向上- - Qiita


C++ クラス 入門




以下はもっと基本的なレベルのこと.


vector::erase - C++ Reference


○○○○に怖いものなんてない!!: std::accumulateでvectorの合計や平均値を出す(std::accumulateの第3引数について考察もあり)


to_string - C++ Reference


C++11で数字→文字列はstd::to_string()、文字列→数字はstd::stoi()とかstd::stod()とか - minus9d's diary


C++で文字列のsplitにstringstreamが使える気がする | taichino.com


C++の文字列操作 その2 - minus9d's diary


vectorで多次元配列を作る場合の初期化 - naoya_t@topcoder - TopCoder部


今すぐ使える C++ コーディングテクニック集 - torus711 のアレ


C++: 配列の要素を逆順に並べ替える - Sarabande.jp


独自クラスのための << 演算子のオーバーロード