2048 の AI を読んでみた

以前第一回2048AIコンテスト 結果報告という記事を見かけて,興味がわいたので 2048 の AI について調べてみました. 2048 は 4x4 のパズルゲームで,ルールは実際にやってもらったほうが分かりやすいぐらい簡単なものですが,テンポが良くて結構ハマりまし…

boost::variant の visitor にラムダ式を使う

boost::variant は複数の方を入れられる型安全な union のようなコンテナで,次のように visitor パターンを使ってアクセスできます. Boost逆引きリファレンス > ユーザー定義型を扱える型安全な共用体 ですが,ちょっとした要素アクセスのために毎度 visit…

yokohama.vim #5 でした

Vim

4/6 に @gu4 さん 主催の yokohama.vim #5 に参加してきた. 何も考えず速攻で登録して身内感を出してしまったので人集まるかなぁと思っていたけれど,thinca さんの呼びかけにより参加者が増えてほっとした.thinca さんの人望(もとい魚望?)さすがでした…

Uniform initialization で困るパターン(std::string)

C++

C++11 で,() でなく {} で初期化する統一初期化(Uniform initialization)が入った.普段はこれを使っているけれど,この間これで std::string でハマったのでメモ. std::string のコンストラクタの中には,char 型の値を一定回数繰り返すコンストラクタ…

僕は小数点数のパースがやりたかった

Boost.Spirit.Qi で定数リテラルのパースを行う処理を書くときに,小数点数と整数のパースでちょっと詰まった. qi::double_ | qi::int_ とすると 42 などの整数値も double 型でパースされてしまうし, qi::int_ | qi::double_ とすると,3.14 などの小数点…

'auto' 宣言の型を調べるプラグイン作った powered by momonga.vim #2.2

2/1 から 2/2 にかけて開催された @supermomonga さん主催の momonga.vim 2.2 に参加しました. 少人数でぐだぐだ雑談しながら作業する感じの会です. clang-type-inspector.vim つくった C++11 から auto を指定することで変数宣言の型を推論させることがで…

ジェネリックラムダをもっと手軽に書くためのマクロ

C++

ラムダのキャプチャは無くてはならないものだけれど,たいていの場合は [&] とかで済んでしまう.また,引数の型もジェネリックラムダの登場で,だいたい auto で済んでしまうようになったので,こんな感じで書けると良いなぁと思うようになった. std::vect…

C++14 の変数テンプレートで ::value を省く

C++

C++11 で template alias が入ったことにより,テンプレートメタプログラミングでよく出てくる,メタ関数を評価するための typename ::type を省略して直接型を取得するようなエイリアスが書けるようになりました. template<bool B, class T> using enable_if_ = typename st</bool>…

同じ CXString に複数回 clang_getCString() を適用してはいけない…?

CXString は libclang での文字列型で,C の文字列に直すには clang_getCString() を使う. CXString s = clang_getCursorSpelling(cursor); char const* p = clang_getCString(s); しかし,どうやら複数回 clang_getCString() を適用すると1回目と2回目では…

クラススコープの変数テンプレート

C++

クラススコープでは,変数テンプレートは静的なメンバ変数でしか使えない. struct X { // OK template<class T> static T hoge = T{}; // NG template<class T> T huga = T{}; }; なので,オブジェクトごとにメンバ変数テンプレートを持つということはできない. 少なくとも現</class></class>…

codic-vim 用の unite.vim ソースを書いた

Vim

codic-vim-with-unite は deprecated になりました.unite-codic.vim に移行をお願いします. ソフトウェア開発者用の辞書サービス Codic の辞書を Vim から使える codic-vim が公開されました. 日本語で単語を指定すると,それに近い英単語を一覧で出して…

Boost.Variant が特定の型の値を保持していた時だけ処理を実行する

boost::variant が保持している値の型が特定の型の場合だけ○○するという処理が多いの,でラムダ式で処理を書けるようにした. apply<{期待する variant が保持する値の型}>({variant な変数}, {適用したい関数}) という感じに使う. #include <boost/variant/variant.hpp> #include <iostream> int</iostream></boost/variant/variant.hpp>…

Boost.Variant に型指定でアクセスしたい

boost::variant の要素にアクセスする場合,which() メンバ関数で boost::variant が保持している値の型を見てからアクセスするか static_visitor でアクセスするかの二択が普通だと思うけれど,「which() でアクセスするのはマジックナンバー増えるから嫌」…

boost::variant の型パラメータ数制限をオーバーした時の対処

boost::variant はテンプレートに書ける型の数がデフォルトで 20 に制限されている.この値は variant_fwd.hpp に定義されている BOOST_VARIANT_LIMIT_TYPES マクロで確認できる. 今回は制限の 20 を超える数の型を boost::variant に指定したくなったので…

2013年に書いた Vim プラグインその他まとめ

今年書いた Vim プラグインその他をリストアップしてみた. Vim プラグイン clever-split.vim 現在のウィンドウの縦幅や横幅,開くバッファの最大の桁数などを考慮して縦分割・横分割・新規タブの中から開き方を賢く選択肢てくれるプラグイン conflict-marke…

Boost.MPL で条件の分岐先の評価を遅延したい

Boost.MPL でテンプレートの評価を遅延するやり方が分かっていなかったので調べてみたメモ. 具体例で書く. ある正数からその正数以下の連番文字列を作り出すメタ関数を考える.例えば,5 を入力すると "12345" が得られるものとする.面倒くさいので,入力…

Boost.Spirit.Qi と Boost.Variant で簡単な電卓つくった

Boost.Spirit.Qi は今まで parse() とか phrase_parse() に直接パーサを渡すだけで簡単にパースできる場合にしか使っていなかったので,真面目に文法を定義してパースしてみた. 作ったのは,四則演算と括弧と対数関数と指数関数が使える簡単な電卓. Boost.…

Travis CI で最新の Clang (3.5) を使ってテストする

Travis CI は Github アカウントと連携してリポジトリに .travis.yml というファイルを置くことで Github に push したときに自動でテストを回して CI してくれるサービス. Travis で使われている Ubuntu 12.04 に入っているコンパイラは gcc 4.6 と clang …

(進捗あります!✧\\٩(‘ω’)و //✧)o 。('、3)_ヽ)_

この記事は 進捗 Advent Calendar の 13 日目の記事となります. 年も暮れて1年の振り返りをする時期になってきたので,今年を振り返るのも兼ねて参加してみました. 進捗どうですか? → Vim 今年は Vim のプラグインをたくさん書いた気がします.ざっと数え…

Vim で C++ を書くときの逆引きリファレンス

この記事は C++ AdventCalendar 2013 の 10 日目の記事です. 本記事では Vim で C++ を書いている人を対象として,逆引きで Vim の機能やプラグインについて紹介していきます. すべてについて細かく書いているとキリが無いので,基本的な使い方とプラグイ…

無数のパッチを組み合わせて君だけの MacVim を作ろう!

Vim

この記事は Vim Advent Calendar 2013 の 9 日目の記事です. 昨日は id:daisuzu さんの Fabricで最新のVimをバラまく でした.僕はサーバでの Vim で自前の環境使うのは諦めているので,すごいなぁと感心するばかりです. 先日開催された VimConf2013 にて…

VimConf 2013 で発表してきた

vim

クックパッドで開催された Vim Conference 2013 に参加してきた. 発表 How to suggest new features for Vim (香り屋さん) いかにして取り込まれやすいパッチを書くかという話だった.基本的に Vim の方針(Vim is a text editor)に反するものは取り込まれ…

コマンドオプションを解析するライブラリ Vital.OptionParser を書いた

Vim

この記事はVim AdventCalendar 2012の 343 日目の記事です. 昨日は cohama さんの Vim で Ruby の def end とかを自動入力する vim-endwise を vim-smartinput で実装してみた でした. そろそろ終わりが見えてきて,僕が投稿するのもこれが最後な気がしま…

Momonga.vim #2 に行ってきた

vim

title: Momonga.vim #2 date: 2013-10-16 21:02 tags: [vim, momongavim, 2] categories: [vim] 書き留め 昼食 thinca さん達と食べる予定をしていたのに遅延してきた特別快速を1つ前に来る快速と勘違いして乗ってしまいあえなく遅刻,1人で食べることに… 本…

Mac で HappyHackingKeyboard Pro 2 を使う

デスクトップ欲しいなぁと思っていたので先日 iMac を購入したけれど,ワイヤレスキーボードがイマイチだったので Happy Hacking Keyboard にすることにした. 打ちやすいし余計なキーとか無いので良いけれど,若干自分好みに設定しないといけなかったのでメ…

clever-f.vim でカーソルの横移動を便利にする

Vim

この記事はVim Advent Calendar 2012 291 日目の記事になります.徐々に気温も秋らしくなり,終わりが見えてきてますね. この記事では,Vim の f キーを拡張する clever-f.vim というプラグインを紹介します. 今まで tekkoc さんや thinca さんに紹介して…

tmux で一時的に pane を最大化する

Vim には,分割しているウィンドウのうちカーソルが居るカレントウィンドウを除いて他を閉じる :only というコマンドがあります.それを拡張して,一時的にカレントウィンドウを最大化し,最大化前に戻せる ZoomWin というプラグインがあり,愛用しています…

clever-f.vim が VimL の Weekly trending repositories on Github に入った

Vim

Vim の f キーを拡張するプラグイン,clever-f.vim が Github の Trending repositories(VimL) に入っていたので記念カキコ.挙動をカスタマイズできるようにしたり migemo 的な拡張を入れたりしてコミットが活発だったからだろうか. 追記(9/8): Monthly t…

C や C++ のコードを自動で整形する clang-format を Vim で

この記事は Vim Advent Calendar 269 日目の記事になります. きつねさんとおぼえる!Clang という本を読んでいて,clang 周りで色々役立ちそうなツールがあることを知ったので,その中でも C や C++ のソースコードを整形する clang-format というツールの …

caw.vim 用のオペレータマッピング

Vim

コメントアウト用のオペレータマッピングが欲しかったので,caw.vim から tcomment_vim に乗り換えようと思ったけれど,tcomment_vim が色々いまいちだったので結局 caw.vim に戻ってオペレータマッピングは自前で定義することにした. https://github.com/r…