C++の勉強の成果をチェックすべく「しがない問題」を解いた話とか

 この記事の続きです。

kdnakt.hatenablog.com

[C++の勉強]

Javaのネイティブメソッドの挙動の違いが問題になる場面に出くわしたので、ちょっくら実装見てみるか、と思ってC++の勉強を始めた訳です。

 

JVMってC++で書かれてるんでしょ、知ってるんだから!

OpenJDK - Wikipedia

しかし一部はJavaで書かれてたりするようですね。へー。

 

[2018/06/25追記]

実はJDKのコアライブラリはC++ではなくCだった模様。C++コンパイラとか。無念。 

www.slideshare.net

[2018/06/25追記ここまで]

 

 

前回やったPythonは、UdacityのIntro to Machine Learningコースを途中までやった時になんとなく触っていたので、ググりながら進めることができたのですが、C++は全く触ったことがない。一応、コードを読む機会は何度かあったのですが、ぼんやりと、クラスがあって、ループ回して……ふむふむ、そういうことがやりたいのね、くらいで、正確な理解とは程遠い状態な訳。

 

[Udacity: C++ For Programmers]

という訳で、一年ぶりくらいにUdacityにログインして、ビャーネおじいちゃんにC++を教わっています。おじいちゃんC++作った偉い人らしいよ。

 

このコースは中級者向け(Intermediate)で、Lesson 15まである。

1レッスンの見積もりが約1時間なので、15時間くらいあれば終わるだろう、ということで、GW明けから会社の行き帰りで始めて見た。

 

f:id:kidani_a:20180513043611p:plain

 

とりあえず、Hello Worldから始まって、stringだのint, floatだのからfor, whileあたりまで、1週間で30%ちょっと進んだのでうまくいけば5月中に終わりそう。

C++をやる目的はJVMの実装を読むところなので、サクッと終わらせたい!

 

[しがない問題]

リポジトリはこちら。github.com

 

MacC++触る場合ってエディタは何がいいのかな……とりあえずvim「しがない問題」やってみた。

 

例によって「しくてがない」の文字列をシャッフルして……と思ったら、思いの外文字列処理が難しい。

 

www.albow.net

 

この辺を参考にとりあえずシャッフル部分の実装して見たけれど、結果はご覧の通り。アルファ……。

f:id:kidani_a:20180513042427p:plain

 

暫定回避策として、「し」「く」「て」「が」「な」「い」の文字列の配列をシャッフルする方法を使うことに。

シャッフル(配列の要素をランダムに並び替える)

 

最後に、毎回コンパイルしてバイナリ呼び出すのが面倒だったので、シェルスクリプトをくっつけておいた。C++のお作法的にはどうするのが正しかったんだろう……それはまた今度調べてみよう。

 

実行結果は以下の通り。

f:id:kidani_a:20180513043507p:plain

 

[まとめ]

来週はUdacity 55%以上終わらせるぞー。 

 

今日のブログ執筆BGMはこちら。

www.youtube.com