株式会社C4C Staff Blog -4ページ目

将棋なこと

将棋が熱い!

じつは最近、iPhoneのMiniShogiなるアプリにハマっていまして、
マスが5x5の盤で将棋するアプリなんですが、
このCPUが まぁ強い!

$株式会社C4C Staff Blog

iPhoneは知人のものなので知人と一緒に四苦八苦して
何度も何度も挑み続けて、負けて...負けて...
何度も何度も待ったを使っても勝てない...勝てない...
というかすぐに形勢不利になってしまって一手進めるのに何十分もかかってしまう。

ここででてきた形勢のこと
このアプリには対戦中画面上部に形勢が +30,000~-30,000 で表示されます。
たしか先手が優勢だと+で表示され、後手だと-だったと思います。

んで、これが一手指すごとに+800とか-2,000とか変化します。
詰んだ状態もしくは、次手で詰む場合などは+30,000や+29,999になります。

ということで待った待った作戦のときは、この形勢を意識して
ちょっとでも形勢不利になったら「待った!」って感じでやっていたのですが...。


「てか、この形勢ってどうやって算出してんだろ?」
という話しになりました。

ふ:「何手か先まで読んで詰むまでの手数が短いほうが優勢とか?」
知:「あとは詰みルートが多いほうとか?」
ふ:「じゃさ、形勢が算出できる時点で俺らこいつ(CPU)の手の内ってことじゃないの?」

ここで話しは変わりまして
知:「そういえば、最強の将棋ソフトってプロ棋士より強いの?」
ふ:「いや、たしかチェスはCPUが人間を上回ったって聞いたけど、将棋はまだ人間のほうが上だったと思うよ。」
ふ:「チェスと違って将棋には取った駒を張ることができるから選択肢が多すぎて算出できないんじゃない?」
知:「ふむふむ。下手なCPUだと何十手先まで読むソフトを作ってもフリーズしちゃいそうですなぁ。」
ふ:「だからこのMiniShogiも5x5だから、すげー強いんじゃない?」
ふ:「まぁ、こーゆーネタは人気あるから、どこぞの物好きが開発してると思うからいずれはCPUが勝つ日が来るよ。」
知:「結局、計算力と計算精度のフィールドに持ち込めばCPUが上ってことですかね...。」

なんて会話をしていたら...
先日「将棋ソフトが女流王将を下す」というニュースがありました。
いやータイムリーですなー。

この「あから」と呼ばれるソフトは4種の将棋アルゴリズムを並列で動作させ
多数決で次打つ一手を決めるそうです。
多数決なのになんで4(偶数)?っていうのは気になりましたが。
こういうの好きです。
なにか自分の作るシステムにも多数決導入できないかな。

とにかく、これから実現するであろうトップ棋士との対戦が楽しみです。

で、MiniShogiのほうは...
投了。参りました。

はじめまして!COO藤原です。

はじめまして!COO藤原です。

ご存知の通りここまで、亀山の記事しかありません...。
これからは月に一度は何か書こうと思いますので、よろしくお願いします。

亀山とは指向を変えてみようと思います。

まず、1回目なので自己紹介っぽい内容です。

私は、仕事柄からか物事をロジカルに(数式的とも言えるでしょうか?)捉えるのが好きなので、
その具体例を一部紹介しようと思います。

くだらないので、真に受けないで下さいよ。

と、あることがきっかけで人口の少ない国を調べていたのですが
そのとき私の感性をくすぐるものがでてきました。

調べたのは「ナウル」という人口1万にほどの国なのですが、
ここはかつて燐鉱石の輸出によって経済発展し、国民は無税!そして医療、教育制度は全て無料!
さらには無料の全年齢層への年金制度(ようするに国民はみんなお金もらえた)だったそうです。

それが現在は燐鉱石の枯渇によって経済疲弊し、財政破綻によりインフラの維持が殆ど不可能であり、
電力不足や燃料不足、飲料水不足が深刻化しており、主たる産業どころか大企業も存在しないことから、
現在は諸外国からの援助が唯一の外貨獲得源となっている状態にあり
らに労働意欲がない国民性により失業率が90%にも達するそうです。

そしてここからが、私の興味深いと思ったところですが
この経済状況にあるのにも関わらず
「本来楽観的な国民性故に、平和な生活が続いている。」
だそうです。

この情報を鵜呑みにするとすごいことですよね?
おそらくこの状況になった場合、多くの国が内戦状態になっているのではないでしょうか?

「戦争をなくすにはどうすればよいか?」の問いに
あのアインシュタインとフロストの答えは、たしか
「文明(文化)の発展を促せば、戦争の終焉に向かう」
だそうです。(正確じゃないかもしれませんが大体のニュアンス)

ということはですよ。
「A=C B=C ならば A=B」 より
下の式が成り立つかも?

ナウル人は争わない = 戦争がない
文明の発展 = 戦争がない
ナウル人 = 戦争をしている国々より高度な文明を持っている

そして次の式により高度な文明とはなにかを解く
ナウル人 = 高度な文明
ナウル人 = 労働意欲がない 且つ 楽観的な国民性
高度な文明 = 労働意欲がない 且つ 楽観的な国民性

ようするに文明が発展すると、
どんどん労働意欲がなくなって、どんどん楽観的な人間になっていくのでは!!!
ってことになったんですが・・・。

くだらなすぎます。

でも私はこんな人間です。

最後にせめてもの願いとしては...。
我が社に高度な文明人がいないことを望むばかりです。

それでは、また。

たまには技術的な話

「1~10000の番号がついたデータがあります。
その中から任意の番号のレコードを検索するとき、
あなたはどうやって検索しますか??」

これは2,3年前、現場の面接で突然出された問題。

この問題の出題者の意図は
「膨大なレコードの中で最大のパフォーマンスを発揮する検索方法を知っているか」
であった。

プログラミングというのは、構築方法に幾通りもあって
人によって作るプログラムの毛色が全く異なる。
けど、その時、その仕様に一番最適なロジックを作ることが
一番正しい正解である。

さてこの問題の答えは・・・

答えは「二分探索」という手法。

二分探索とは・・・
中央の値を見て、検索したい値との大小関係を用いて、
検索したい値が中央の値の右にあるか、左にあるかを判断して、
片側には存在しないことを確かめながら検索していく方法。
例えば、{1,2,3,4,5,6,7,8}という値を持つリストから8という値を探す場合、
最初の判定で探索範囲が{5,6,7,8}に絞られ、次の判定で{7,8}に絞られるといった感じ。
データ量が多ければ多いほど、効力を発揮する手法。


知らないと開発できないかというと
そうでもない。
実際、ロジックを組んでいて使うことはあまりないと思う。
けど、「意識」しているか否かが重要なんだと。

仮に貴方が開発者なら

プログラミング時に意識していますか?