/// <summary> /// 1重の入れ子の将棋盤。持ち駒の一覧に利用。 /// </summary> /// <returns></returns> private static string Format_SingleShogiban_P1Banjo(FeatureVector fv, int p1_base, PpItem_P2 p2Item) { StringBuilder sb = new StringBuilder(); //---------------------------------------- // タイトル行 //---------------------------------------- sb.AppendLine("\"#----------------------------------------\","); sb.Append("\"#"); sb.Append(p2Item.Title); sb.AppendLine("\","); sb.AppendLine("\"#----------------------------------------\","); //---------------------------------------- // 任意駒 p1 が 一段~九段 //---------------------------------------- for (int p1Dan = 1; p1Dan < 10; p1Dan++) { // 行頭 sb.Append(" ");//4文字 //---------------------------------------- // 任意駒 p1 が 9筋~1筋 //---------------------------------------- for (int p1Suji = 9; p1Suji > 0; p1Suji--) { // 任意駒の升 int nMasu = Util_Masu10.Handle_OkibaSujiDanToMasu(Okiba.ShogiBan, p1Suji, p1Dan); int p1 = p1_base + nMasu; int p2 = p2Item.P2_base; if (Const_FeatureVectorFormat.PARAMETER_INDEX_OUTPUT) { sb.Append(string.Format("{0,4}_{1,4}", p1, p2)); } else { // スコアの倍率を復元します。 float scoreF = fv.NikomaKankeiPp_ForMemory[p1, p2] / fv.Bairitu_NikomaKankeiPp; int value = (int)Math.Round(scoreF, 0);//小数点以下を丸めます。 sb.Append(string.Format("{0,4}", value)); } sb.Append(","); } // 次の段へ sb.AppendLine(); } return(sb.ToString()); }
/// <summary> /// 2重の入れ子の将棋盤。 /// </summary> /// <returns></returns> private static string Format_NestedShogiban_P1Banjo(FeatureVector fv, int p1_base, PpItem_P2 p2Item) { StringBuilder sb = new StringBuilder(); //---------------------------------------- // タイトル行 //---------------------------------------- sb.AppendLine("\"#----------------------------------------\","); sb.Append("\"#"); sb.Append(p2Item.Title); sb.AppendLine("\","); sb.AppendLine("\"#----------------------------------------\","); //---------------------------------------- // p1 が 一段~九段 //---------------------------------------- for (int p1Dan = 1; p1Dan < 10; p1Dan++) { // 列見出し行を作ります。 sb.Append("\"#");//2文字 string danStr = Conv_Int.ToKanSuji(p1Dan); for (int suji = 9; suji > 0; suji--) { if (suji != 9) { sb.Append(" ");//4文字(列間) } string sujiStr = Conv_Int.ToArabiaSuji(suji); sb.Append(" "); sb.Append(sujiStr); sb.Append(danStr); sb.Append(" ");//15文字(3列分) for (int col = 0; col < 6; col++) { sb.Append(" ");//5文字 } if (Const_FeatureVectorFormat.PARAMETER_INDEX_OUTPUT) { sb.Append(" ");//調整 } } sb.AppendLine("\","); //---------------------------------------- // p2 が 一段~九段 //---------------------------------------- for (int p2Dan = 1; p2Dan < 10; p2Dan++) { // 行頭 sb.Append(" ");//4文字 //---------------------------------------- // 任意駒 p1 が 9筋~1筋 //---------------------------------------- for (int p1Suji = 9; p1Suji > 0; p1Suji--) { if (p1Suji != 9) { // 表の横の隙間 sb.Append(" "); } // 大テーブル升は、P1。 int p1Masu = Util_Masu10.Handle_OkibaSujiDanToMasu(Okiba.ShogiBan, p1Suji, p1Dan); //---------------------------------------- // p2 が 9筋~1筋 //---------------------------------------- for (int p2Suji = 9; p2Suji > 0; p2Suji--) { // 小テーブル升は、P2。 int p2Masu = Util_Masu10.Handle_OkibaSujiDanToMasu(Okiba.ShogiBan, p2Suji, p2Dan); int p1 = p1_base + p1Masu; int p2 = p2Item.P2_base + p2Masu; if (Const_FeatureVectorFormat.PARAMETER_INDEX_OUTPUT) { sb.Append(string.Format("{0,4}_{1,4}", p1, p2)); } else { // スコアの倍率を復元します。 float scoreF = fv.NikomaKankeiPp_ForMemory[p1, p2] / fv.Bairitu_NikomaKankeiPp; int value = (int)Math.Round(scoreF, 0); //小数点以下を丸めます。 sb.Append(string.Format("{0,4}", value)); //二重将棋盤 } sb.Append(","); } } // 次の段へ sb.AppendLine(); } // 段の隙間 sb.AppendLine(); } return(sb.ToString()); }