投稿

8月, 2018の投稿を表示しています

C++で逆順forループするときにsize_tを使ってハマった話

イメージ
こんにちは、ぐぐりら(<a href="https://twitter.com/guglilac">@guglilac</a>)です。 <div class="separator" style="clear: both; text-align: center;"><a href="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQH8p8IMkADBlXLb2qlkZwltzrHPYkW--ouC1tFpX47GuH32KO9" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQH8p8IMkADBlXLb2qlkZwltzrHPYkW--ouC1tFpX47GuH32KO9" width="320" height="320" data-original-width="225" data-original-height="225" /></a></div> ### 概要 ```c++ for (size_t i = 10; i >= 0; i--) { } ``` ってして、10から0まで降順に走査しようとしたらバグりちらかした ```c++ for (int i = 10; i >= 0; i--) { } ``` こうするといけた. そもそもsize_tについてなんもしらないけどatomでforって入力すると予測変換ででてくるので使っていました。 で、今回逆順にループを回す処理を書いてみたらバグったわけです。 ### 原因 まあ簡単なことで、ブログに書くほどのことでもないんだろうけど、勉強し始めなので一つ一つ基礎的…

atomでc++の設定(linter-gccやatom beutify)

イメージ
こんにちは、ぐぐりら(<a href="https://twitter.com/guglilac">@guglilac</a>)です。 ### コンパイルできるのに静的コード解析にひっかかってた <div class="separator" style="clear: both; text-align: center;"><a href="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQv3lYEpdz2dj7w_F4r3TW3su5Si4amVh9nnokFIXzjpyXsn5GA" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQv3lYEpdz2dj7w_F4r3TW3su5Si4amVh9nnokFIXzjpyXsn5GA" width="320" height="205" data-original-width="281" data-original-height="180" /></a></div> vectorの配列を作りたいと思ってこんなコードを書いたら、atomのlinterさまに怒られてしまいました。 ```c++:hoge.cpp int N,M; std::cin >> N >> M; std::vector<int> D[N]; ``` `D[N]`のところを3とかに変更すると赤い波線が消えます。 また`int D[N]`に変えても怒られなくなります。 vectorの配列の長さを文字で与えられない、そんなことある?とおもってatomに怒られながらもコンパイルしてみると、あっさり通りました…

pythonのあの処理をC++書いてみようシリーズ①

こんにちは、ぐぐりら(<a href="https://twitter.com/guglilac">@guglilac</a>)です。 ### このシリーズはなに これまでpythonを使うことが多かったのですが、せっかく競プロをやってるのだからC++も勉強したいなあと思い最近勉強を始めました。 pythonならさくっと書けるあの処理、どう書くんだろう、、ということがよくあるので、勉強したところだけまとめておこうと思います。 最近はpythonでプログラミングを始める人も多いみたいだし、pythonならわかるけど他の言語も勉強してみたい、的な方にも役に立てばいいなと思います。 (シリーズとかいって一回で終わらないようにせねば) ### 今回のテーマとなる処理 タプルのリストをsortする処理をしたくなるときがたまにありますよね。 こんなやつ ```python a=[(1,2),(3,1),(10,6),(5,4),(2,7)] ``` いくつかの要素をまとめたものをpythonではタプルと言います。 これを何も考えず`sort()`で並び替えるとこうなります。 ``` a.sort() print(a) #=> [(1, 2), (2, 7), (3, 1), (5, 4), (10, 6)] ``` みて分かる通り、タプルの1個目の要素をみて昇順に並び替えてくれます。 今回は、タプルの2番目の要素をみて昇順に並び替える処理について考えます。 pythonでは、`.sort()`に基準となるキーをlambda式で与えてあげることで簡単に実現できます。 ```python a.sort(key=lambda x: x[1]) ``` これは、 「aの各要素がxとしたとき、x[1]をkeyとして並び替えてね」 という処理になります。 簡単ですね。 ### C++だとどうかくの ```c++ #include <iostream> #include <vector> #include <algorithm> typedef std::pair<int, int> pair; void prin…

PyTorch v0.4での変更点

イメージ
こんにちは、ぐぐりら(<a href="https://twitter.com/guglilac">@guglilac</a>)です。 <div class="separator" style="clear: both; text-align: center;"><a href="https://i2.wp.com/hacks.deeplearning.jp/wp-content/uploads/2017/10/21003710.png?fit=200%2C200&ssl=1" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://i2.wp.com/hacks.deeplearning.jp/wp-content/uploads/2017/10/21003710.png?fit=200%2C200&ssl=1" width="320" height="320" data-original-width="200" data-original-height="200" /></a></div> Pytrochをちょうど使い始めたときにバージョンが0.4に上がっていろいろ変わったので、勉強したことをまとめました。 バージョンがまだ小さいので変更点も大きなものが多いため、ちゃんとキャッチアップしていかないとですね。 変更点を全て書いているわけではないのであしからず。 ### tensorとvariable 今までふたつの型があった. Tensor:計算グラフ(勾配情報)を保持しないもの Variable:計算グラフを保持するもの 0.4になるときにこれらは統合された。 Tensor型に`requires_grad`という値が追加された。 `requires_grad=true`が今までのvaria…

GitHubの画面を黒くする(Stylus, Stylish)

イメージ
こんにちは、ぐぐりら(<a href="https://twitter.com/guglilac">@guglilac</a>)です。 <div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-UsaUiMK_Cos/W3Y0rPkkS3I/AAAAAAAAAMQ/759LsDCLm3s771Xh-Ra8Qd6TPrF1fsxHwCLcBGAs/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2018-08-17%2B11.26.07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/-UsaUiMK_Cos/W3Y0rPkkS3I/AAAAAAAAAMQ/759LsDCLm3s771Xh-Ra8Qd6TPrF1fsxHwCLcBGAs/s400/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2018-08-17%2B11.26.07.png" width="400" height="152" data-original-width="1131" data-original-height="430&qu…

[C++]charどうしを連結しようとしたら数字が返ってきた

イメージ
こんにちは、ぐぐりら(<a href="https://twitter.com/guglilac">@guglilac</a>)です。 <div class="separator" style="clear: both; text-align: center;"><a href="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQH8p8IMkADBlXLb2qlkZwltzrHPYkW--ouC1tFpX47GuH32KO9" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQH8p8IMkADBlXLb2qlkZwltzrHPYkW--ouC1tFpX47GuH32KO9" width="320" height="320" data-original-width="225" data-original-height="225" /></a></div> ```c++ std::string s("hoge"); cout << s[0]+s[1]+s[2]; ``` 的なことをしたら、なぜか数字が出力された。 想定した出力は`hog`なのに。 普通に一個だけ出力するとちゃんと文字が出力されるのに。 ```c++ cout << s[0]; ``` これだとちゃんと文字が出力される。 ### 解決 `std::string`にインデックス参照したら、charがかえってくる。 (思ったけど、charどうしの足し算って何がかえってくるつもりだったの自分。。) 結論から言うと、`char`どうし足し算する…

多腕バンディット問題を解説してPythonで実験してみた

イメージ
こんにちは、ぐぐりら(<a href="https://twitter.com/guglilac">@guglilac</a>)です。 ### 多腕バンディット問題とは スロットマシーンで遊ぶことを考えます。 スロットマシーンがあなたの前にいくつかあることを考えましょう。(5ことか10ことか) あなたは、決められた回数分(10000回とか)だけこのスロットマシーンをプレイすることができます。 スロットマシーンが当たる確率はスロットごとに異なります。 どのスロットも、当たれば1円儲かり、外れれば何ももらえません。 なので、当たる確率が一番高いスロットを決められた回数分ずーっとプレイし続けるのが一番儲かりますね。 しかし、問題があります。 あなたは、各スロットマシーンの当たる確率がわかりません。 いくつかスロットをプレイすることを通じて、当たりやすいスロットを見つけていくことが必要です。 ここで、これまで得られた結果から一番良さそうなスロットばかりプレイしていると、他のスロットの中にあるかもしれない一番当たりがでるスロットを見逃してしまいます。 逆に、一番良いスロットを探すために悪いスロットばかりプレイしてしまうのも、最終的な儲けが小さくなってしまいます。 多腕バンディット問題とは、この * 最適なスロットを探すためにいろんなスロットをプレイしてみる(探索) * これまでの結果から最適と思われるスロットをプレイする(活用) のバランスをうまくとることができるアルゴリズムを提案して、最終的な報酬を大きくしようぜ、という問題です。 探索と活用という単語はこの分野で良く出てくるので、頭に入れて読んでもらえると嬉しいです。 また、このスロット一台一台のことをアームと呼びます。 アームは腕、ですね。なので多腕バンディット問題です。バンディットはスロット的な何かだったと思います。 今後はスロットではなくアームという単語を使っていきます。 <div class="separator" style="clear: both; text-align: center;"><a href="http://www.casino7-online.ne…