ネタ欠乏症は結構深刻で、未だに「これはっ!」と思うネタに巡り合えていません。
しかしっ、
「これ、どうかな?」というネタが一つありましたのでご紹介します。それは、
じゃんけん。
「はぁ、それがネタ?」と思われるでしょうが、「人間が二人、じゃんけんをする場合、そこには高度な戦略的(注)状況が存在する」と思います。
注:Strategic. かのマッキンゼーの日本支社長であった大前研一氏によれば(注の注)、「人の意思決定が他者の意思決定に影響され、またそれが他者の意思決定に影響を与える"interactive"な状況」と記憶しています。
注の注:昔読んだ「企業参謀~戦略的思考とはなにか」に出ていました。
要すれば、当事者間の「手の読み合い」ということです。これを情報処理的にどう料理するか?ということは、
(1)統計的アプローチ(出された手の履歴から頻出性等を解析する)、
(2)心理学的アプローチ(プレーヤーの行動特性を出す手の履歴から解析する)、
(3)機械学習的アプローチ(どのような学習方法にするかは別として、発生結果から学習させるアルゴリズムを使う)
等が考えられ、十分にコンピュータープログラミングネタになりえます。
と思って、早速関連情報を求めてググってみると、こんなの(↓)
が見つかりました。
「どれどれ」と中身を覗いてみると、
うわっ、きたなっ!(篠本さん、スミマセン、m_(__)_m)
と思ってしまうコーディングです。
(1)"#include<math.h>"→このライブラリーは使用されていません。
(2)"#define N 5"→この定数定義は何なのでしょう?
(3)"int perceptron(int m, int x[], int w[], int v[])"→久々に[]を使った配列参照渡しを見ました。また、変数が何を意味しているのか、名称からは全く読み取れません。(コメントもあるのですが、「予測ユニット」等が何かわかりませんし、「3ビット右」と書かれていても、ビット操作はしておらず、単に配列を上位に3つシフトしているだけです。)
(4)"int i,j,k,kmax,vmax,prec[3];"→最初のi、j、kは一般カウンターとして使われており、またkだったりiだったり、一定ではなく、iとjだけでも書けてしまいます。
(5)" if(m <= 0) goto end;"→なかなかC言語で"goto"文を見ることはできません。
etc、etc
別にこのプログラムをディスるのが目的ではなく、このような書き方をしていると何をどうしているのかのアルゴリズム理解が非常に難しくなり、私の場合「やる気」が出てきてしまいました。
と、いうのは
最初の関数、"int perceptron(int m, int x[], int w[], int v[])"のperceptron(パーセプトロン)に引っ掛かり、意味を調べてみるうちに興味をひかれた(注)こともあります。
注:<参考:パーセプトロンについて>
wiki パーセプトロン (周辺知識もある)
パーセプトロンとは? (分かり易い)
パーセプトロンの仕組みや用語についての解説 (ちょっと単純か)
ニューラルネット、機械学習云々は取り敢えず置いておいて、コードの長さや予測関数一つなので大げさなことはやっていないと思われましたが、
あーだ、こーだいうのは先ずは、何をしているのか分かってから
ということで先ずは解析の為にC++で書き直してみようと考えています。