月別アーカイブ: 2015年7月

VSC2015 > 桁区切り

数字リテラルの桁数が大きくなると、数値の認識が難しくなる。
1000000000 だとよくわからないが、1,000,000,000 と表記してあれば、10^9 だとすぐわかる。
が、C/C++ でカンマは式の列挙用なので使うことができなかった。
で、C++14 でアポストロフィを数値リテラルの区切り記号として自由に使えるようになったわけだ。
1’000’000’000 なら、分かりやすい。最初は違和感があるかもしれないが、慣れれば大丈夫だろう。

10進数にかぎらず、16進数、2進数でも使える。特に2進数では桁が多くなる傾向があるので
便利だと予想される。
0b1010’0101’0000’1111 と 0b10100101000111 を見比べれば、一目瞭然だろう。

以下は、確認コードとその実行結果だ。
temp

こういう細かい改良っていいよね。

VSC2015 > 2進数リテラルを試してみる

VSC2015 C++ はC++14 及び、それ以前で未サポートだった C++11 の機能が数多くサポートされている。
なので、それらをすこしずつ試していくことにする。
まずは、2進数リテラルだ。

これまでは 0x を前置すると16進数、0 を前置すると8進数だったが、それらに加え 0b を前置で2進数リテラルがサポートされた。

int a = 0b1010;  // 0b1010 = 0xa = 10

上記の用に、2進数を直接表記できるので、ビット演算を行なう時などは、可読性が向上する。
2進数を書きたいという人は少ないと思うが、個人的はずっと欲しかった機能だ。

んで、以下が、書いてみたテストコードと実行結果。

temp

当然だけど、ちゃんと動いてますな。
素晴らしい!

こんどこそ Visual Studio Community 2015 日本語化

先日はうまくいかなかった、VSC2015 の日本語化だけど、今日やったらすんなりうまく行った。
やぱり、ダウンロードした vs_langpack.exe の中身が不正だったと推測される。

で、正しいものをDLし、実行すると下図のようになる。

temp

temp

temp

temp

以上で、インストール終わり。VSC2015を無事日本語化することが出来た。
めでたし、めでたし。

temp

Visual Studio Community 2015 日本語化 できないぞ

ありがたいことに、マイクロソフト様が個人利用無料の Visual Studio Community 2015 (以下 VSC2015 と略す)を公開してくださったので、早速インストールしてみた。
デフォルトではメニュー等が英語なので、英語の方が認識が楽って人以外の日本人は日本語化した方がいいだろう。
で、以下その手順。

  1. Tools>Options… メニューを実行
    temp
  2. Environment > International Setings を選び、右側の「Get additional languages」をぽちっとな
    temp
  3. 下図のようなページがオープンされるので、Japanese を選び、【Download】をぽちっとな
    temp
  4. VSC を閉じて、ダウンロードした「vs_langpack.exe」を実行。(VSCを閉じてないと、閉じろと言われる)
  5. 言語パックのインストールが終わったら、VSC2015を再起動し、Tools > Options > Environment > International language で 日本語を選ぶ・・・はずが、日本語が無いぞ・・・

    なして?

追記:
日本語化手順としては上記で正しかったようで、どうもダウンロードした vs_langpack.exe の中身が日本語ではなかったようだ。
うまく言った場合のスクショはこちらを見てね。

cocos 2d-x タッチイベントリスナーの登録

bool GameLayer::init()
{
.....
    // タッチイベントリスナー
    auto touchListener = EventListenerTouchOneByOne::create();
    touchListener->onTouchBegan = [this](Touch* touch, Event *){
    	auto loc = touch->getLocation();
    	return true;
    };
    touchListener->onTouchMoved = [this](Touch* touch, Event *){
    };
    touchListener->onTouchEnded = [this](Touch* touch, Event *){
    };
    this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(touchListener, this);
.....
}

虫食い算 今日の問題

何分でできるかな?

乗算 入門:
temp

除算 入門:
temp

乗算 初級:
temp

除算 初級:
temp

※ 空欄に一桁の数字を入れて、式を完成させなさい。ただし、最上桁に0は入らないものとする。
※ ヒント、解説、解答はありません。

虫食い算 今日の問題【初級 除算】

下図の□に一桁の数字を入れて式を完成させなさい。(ただし、最上桁に0は入らないものとする)
temp

解答は下の方

4行目から5行目を引いたら余りが0になるのだから、4行目と5行目は同じ数。
すなわち、5行目は 2?4 だ。
で、5行目の値は除数に3を乗じたものだから、3で割り切れないといけない。
3で割り切れる数字は各桁の合計も3で割り切れるので、? は 0, 3, 6, 9 のいずれかとなる。
204/3 = 68, 234/3 = 78, 264/3 = 88, 294 = 99 なので、
除数は 68, 78, 88, 98 のいずれかということになる。いずれにしても1桁目は 8 だ。
3行目に注目すると、1桁目が2である。8に何かを乗じて1桁目が2になるのは 8*4 と 8*9 だけだ。
しかし、9 は大きすぎて 68*9 でも 612 となり、被除数の 1/10 を大きく越えてしまう。
*4 の場合でも 78*4 = 312 となり大きすぎる。
よって、商は 43, 除数は 68, 被除数は 43*68 = 2924 となる。
あとは、計算して空欄を埋めると下図のようになる。

temp

虫食い算 今日の問題【初級 乗算】

下図の□に一桁の数字を入れて式を完成させなさい。(ただし、最上桁に0は入らないものとする)

temp

解答は下の方

4行目に注目。7? × 6 = ??8 だが、何かに6を乗じて一桁目が 8 になるのは、3 か 8 のみ。
よって、1行目は 73 または 78 ということになる。
次いで3行目に注目。8に何を乗じても一桁目は5にはならない。
3に何かを乗じて一桁目が5になるのは5のみである。
よって1行目は 73, 2行目は65が確定する。
あとは計算をするだけだ。
答えは下図のようになる。

temp

【自分用メモ】とうぶつしょうぎ > KKM テーブル

次にKKM(※ M は持ち駒を表す)
KKP 同様に、KK 分の場合の数は 6*7 = 42。

持ち駒は6種類で、値は 0~2 なので、short KKM[6][7][6*3]; で充分。
が、よく考えると、持ち駒の歩が無いのと持ち駒の角が無いのを重複して評価する必要は無いので、
持ち駒数が 1, 2 の場合のみテーブル化し、持ち駒数0 は KK だけで共通化するとよい。

short KK[6][7];
short KKM[6][7][6*2];

要素数は 42*(12+1) = 546 となる。

【自分用メモ】とうぶつしょうぎ > KKP テーブル

先手玉位置を k1, 後手玉位置を k2, 玉以外の盤上の駒タイプ・位置の識別番号を p とするとき、
short KKP[12][12][12*8]; を作っておけば、KKP[k1][k2][p] で評価値を計算できる。
要素数は 12*12*12*8 = 13,824 だ。
先手玉位置が盤面の右側にある場合は左右反転すれば、先手玉位置の場合の数は 8 に減る。
さらに、評価関数は先手番で呼ばれるため、先手玉が相手陣地に入っている場合は既に終局となっていて、
評価関数が呼ばれることは無い。したがって、先手玉位置の場合の数は 6 にな。
同様に、後手玉位置も9に減る。
先手・後手玉が隣接している場合、相手玉を取って終局となるので、これも評価関数で評価する必要は無い。
ただし、テーブルとしては最大数を用意しておく必要があるので、後手玉位置の場合の数は7になる。
玉以外の盤上の駒については、双方の玉位置には配置できないので、その分場合の数が減り、10*8 = 80 となる。

よって、KKP 配列は short KKP[6][7][80]; と宣言でき、要素数は 3,360 となる。
最初の要素数の約3分の1だ。