KPP評価部分

以下のようにして、listを作成した後、例のlist加算で評価できます。
(ボナンザのソースを見たことがある方はピンとくると思います)

	for(pos = 0;pos < 81;pos++)
	{
		koma = in.kifu[pos];// 駒種
		switch(koma)
		{
		case KOMA_FU:// 先手 歩
                        // KKP加算
			ret = ret + kkp[sq_bk0][sq_wk0][kkp_pawn + pos];
                        // list追加
			list0[nlist]   = f_pawn + pos;
			list1[nlist++] = e_pawn + Inv(pos);
			break;
		case -KOMA_FU:// 後手 歩
			ret = ret - kkp[sq_bk1][sq_wk1][kkp_pawn + Inv(pos)];
			list0[nlist]   = e_pawn + pos;
			list1[nlist++] = f_pawn + Inv(pos);
			break;
		case KOMA_KY:// 先手 香
			ret = ret + kkp[sq_bk0][sq_wk0][kkp_lance + pos];
			list0[nlist]   = f_lance + pos;
			list1[nlist++] = e_lance + Inv(pos);
			break;
以下、同様


例の部分。

	sum = 0;
	for ( i = 0; i < nlist; i++ )
	{
		k0 = list0[i];
		k1 = list1[i];
		for ( j = 0; j <= i; j++ )
		{
			l0 = list0[j];
			l1 = list1[j];
			sum += PcPcOnSq2( sq_bk0, k0, l0 );
			sum -= PcPcOnSq2( sq_bk1, k1, l1 );
		}
	}

KPPの計算に関しては、むしろ配列版の方が81回のスキャンで済んで簡単なんじゃないかと思います。
これで、ボナンザのfv.binを使えばドーピングをしたかの如く、猛烈に強くなると思います。