投稿者「tetro」のアーカイブ

オールドメイド

最近知ったのですが,トランプのババ抜きって英語では”old maid”というらしいです.
もともとはクイーンを一枚だけ抜いて,他のカードがペアになって(結婚して)抜けていく中,あまったクイーン(old maid : 結婚適齢期を逃した女性)を押し付けあうというものだったそうです.

今の世相を表すようなクレイジーなゲームですね.
ただ,キングやジャックがペアになって抜けるというのは…

迷路ソルバ

思わず保存した画像スレ:哲学ニュースnwkにあった迷路画像が見ていておもしろかったので,迷路を解くプログラムを作成してみました.
↓が問題の迷路

基本的にはスタート地点からゴールに到達するまで単純な全幅探索を行なうだけです.
迷路の枠の抽出とかにはOpenCVを使いました.

で,プログラムに解かせた時の様子が↓

mazeA

ほかのカオスな迷路を解かせた時↓

mazeB

トリプルディスプレイスタンド

臨時収入が入ったのでErgotechのトリプルディスプレイスタンドを買ってみました.
非常にしっかりした作りで,左右のディスプレイ位置もある程度調整できてとても良いです.
ただ,奥行き方向に結構場所を取るため机が少し手狭になりました.

あとスタンドとは関係ないですが,ケーブルが多すぎて机の下がグチャグチャなので,なんとかしないとなぁと思ってます.

stringの罠

つまらない事でつまづいたので覚え書き.
c++でstringをキーとしたmapを使用したのですが,mapの要素にアクセスしようとするとコンパイルエラーが発生.

#include <map>
using namespace std;
...
map< string, int > m;
m["piyo"] = 1;              // エラー,コメントアウトするとコンパイルは通る

「二項演算子'<‘:const std::stringは,…(略)…定義を行いません.」とのこと.
stringの定義がうまくいってないのかな,と思ったのですがmの定義時にstringを使用しているからstringは定義できているはず.しかも,違うソースファイルに同じ処理を書くと正しくコンパイルされる…
と,かなり悩んだ結果<string>のincludeを行っていないことが原因と判明.

VCではstring,basic_string自体は<xstring>に書かれており,<iostream>や<map>などをincludeするだけで使用可能になります.しかし,stringの<<演算子の定義などは<string>に書かれているようで,演算子を使用しようとすると演算子が定義されていないとのエラーがでるということみたいです.
なので,下のようなソースはコンパイルに通りますが,コメントを外すとコンパイルエラーになります.

#include <iostream>

int main(){
std::string str = "piyo";
//  std::cout << str << std::endl;        // コメントを外すとエラー
}

gccはさらにゆるくて,上のソースのコメントを外してもコンパイルが通ります.(cygwinのgcc 4.5.3)

templateのエラーのわかりづらさとあいまって,つまらない事で(つまらないことだからこそ?)かなりの時間を潰してしまいました.
もう,stringはincludeしてなければエラーが出るようにして欲しい.