目指せ、第27回世界コンピュータ将棋選手権☆ ポナンザ・チェイナーを倒そうぜ☆(^~^)<その7>

2017-04-25 06:10

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「あれっ? 食パン無いの☆?」

KIFUWARABE_80x100x8_01_Futu

「お父んが 腹の中に しまっていたぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「じゃあ 空気パンと コーヒーな☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「空気パン、素敵ね!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「空気パンを食べながら、

らいおん、ぞう、きりん、ひよこ、にわとり の駒を 本将棋用に拡張していこうぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「いぬ、ねこ、うさぎ、いのしし を追加だぜ☆

い が被るな☆ し にするかだぜ☆

RZKHNINUS

ねこも被るじゃないか☆」

KIFUWARABE_80x100x8_01_Futu

「にわとりを TORI にしたらどうだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「あいつら 鳥なの☆?」

RZKHTINUS

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「成り犬 と 成り猫 は同じなの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「同じなわけ、ないんだぜ☆!」

KIFUWARABE_80x100x8_01_Futu

「成り犬 成り猫 成り兎 成り猪 をどう表すのか☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「犬は成らない☆

+N +U +S でいいんじゃないか☆?」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「じゃあ にわとり だって +H じゃないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ぞうと きりん だって成るぜ☆

R Z +Z K +K H +H I N +N U +U S +S」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「いいんじゃないの?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ひらがな表記は☆?」

ら ぞ +ぞ き +き ひ +ひ い ね +ね う +う し +し

KIFUWARABE_80x100x8_01_Futu

「これでいいんじゃ ないのかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「頭に ▲ ▽ を付けると 3文字になってしまう☆ 長い☆

カタカナは 後手表示の簡易版に残してある☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「成りゴマは 外国人になったらどうなの?」

先手

▲ら ▲ぞ ▲Z ▲き ▲K ▲ひ ▲H ▲い ▲ね ▲N ▲う ▲U ▲し ▲S

後手

▽ら ▽ぞ ▽z ▽き ▽k ▽ひ ▽h ▽い ▽ね ▽n ▽う ▽u ▽し ▽s

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「法則性を 重視するなら そこは半角だな☆」

先手

▲ら ▲ぞ ▲+Z ▲き ▲+K ▲ひ ▲+H ▲い ▲ね ▲+N ▲う ▲+U ▲し ▲+S

後手

▽ら ▽ぞ ▽+z ▽き ▽+k ▽ひ ▽+h ▽い ▽ね ▽+n ▽う ▽+u ▽し ▽+s

KIFUWARABE_80x100x8_01_Futu

「いいんじゃないか☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「素敵ね!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「もちごま表記は どうすんだぜ☆?」

2Z2K18H4I4N4U4S

KIFUWARABE_80x100x8_01_Futu

「いいんじゃないか☆?」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「素敵ね!」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「FENパーサーの書き直しもいるぜ☆

成り に対応させないと……☆」


06:43

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「いきなり N を +H に置換するのは難しいので、

まぜまぜ で行こうぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「それがいいわね」

            Itiran_TextParser.KyokumenPattern = new Regex(
                @"fen " +
                @"([123456789RZKHNrzkhn/]+)" +// とりあえず ごっそりマッチ。123~はスペース数
                @" " +
                // 持駒
                @"\-?" +//なし
                @"(\d*Z)?" +//▲ぞう ※持ち駒が1個だけの場合は、数字が省略されます。
                @"(\d*K)?" +//▲きりん
                @"(\d*H)?" +//▲ひよこ
                @"(\d*z)?" +//△ぞう
                @"(\d*k)?" +//△きりん
                @"(\d*h)?" +//△ひよこ
                @" " +
                @"(1|2)" +//手番
                @""
#if !UNITY
                , RegexOptions.Compiled
#endif
            );

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「持ち駒も 正規表現に 直接書き込んでいたんだが、

持ち駒は ごっそり取って もう1回パースした方が 今後の駒追加に対応できそうだぜ☆」

            Itiran_TextParser.KyokumenPattern = new Regex(
                @"fen " +
                @"([123456789RZKHNrzkhn/]+)" +// とりあえず ごっそりマッチ。123~はスペース数
                @" " +

                // 持駒
                @"([-\dZKHINUSzkhinus]+)" +

                @" " +
                @"(1|2)" +//手番
                @""
#if !UNITY
                , RegexOptions.Compiled
#endif
            );

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「こうかなー☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「あっ、持ち駒 2桁 に対応しないと☆

ひよこ18枚だからな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「持ち駒に いぬ とか足したら メディエーターの駒変換器が

いぬ とか知らね、とか連鎖的に改造個所が広がっていくぜ☆」


10:41

KITASHIRAKAWA_Chiyuri_80x100x8_03_Ahee

「持ち駒増やしたら、指し手のビットフィールドも 構造作り直しだぜ☆」

    /// 指し手。
    /// イコールで一致を調べたいから、一意にする必要があるぜ☆(スコアなどを覚えさせてはいけない)
    /// 
    /// ビット演算ができるのは 32bit int型。
    /// 
    /// 4         3         2         1Byte
    /// 0000 0000 0000 0000 0000 0000 0000 0000
    ///                               ---- ---A
    ///                     ---- ---B
    ///                 --C
    ///             -- D
    /// E
    /// 
    /// A: 自升(8 bit) 0~127。本将棋にも対応できるだろう☆(^▽^)
    /// B: 至升(8 bit) 0~127。本将棋にも対応できるだろう☆(^▽^)
    /// C: 打った駒の種類(3 bit)
    ///     000 なし
    ///     001 ぞう
    ///     010 きりん
    ///     011 ひよこ
    ///     100 いぬ
    ///     101 ねこ
    ///     110 うさぎ
    ///     111 いのしし
    /// D: 成らない/成る(0~1)   (1 bit)
    /// E: +-符号(0~1)(1 bit)
    /// 
    /// 0 なら投了だぜ☆(^▽^)自升と至升と打った駒の種類が0に揃うことはないんで、被らないぜ☆(^~^)

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「こんなんで いいのかだぜ☆?」

            // 「なし」を 0 にするか、7 にするかの違いで変換している☆(^~^)
            // 打った駒の種類と数値変換(ビット→列挙型)
            // 00: なし 0 → 3
            // 01: ぞう 1 → 0
            // 10: きりん 2 → 1
            // 11: ひよこ 3 → 2
            return (MotiKomasyurui)(
                // 全体を1減らして、元の0を3に持っていきたいので、3足して4で割った余りにするぜ☆(^▽^)
                (kirinuki + 3) % 4
                );

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「これ どうしようかだぜ……☆ 」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「0クリアで 持ち駒なし なのは自然なのよね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「じゃあ このままで☆ 持ち駒なし は 7番で☆」


11:07

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「駒が可変個ということで……☆」

        public static Koma[] Itiran =
        {
            Koma.R,// 先手のらいおん
            Koma.Z,// 先手のぞう
            Koma.K,// 先手のきりん
            Koma.H,// 先手のひよこ
            Koma.PH,// 先手のにわとり
            Koma.r,// 後手のらいおん
            Koma.z,// 後手のぞう
            Koma.k,// 後手のきりん
            Koma.h,// 後手のひよこ
            Koma.ph,// 後手のにわとり
        };

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「これを……☆」

        public static Koma[] Itiran =
        {
            // らいおん(対局者1、対局者2)
            Koma.R,
            Koma.r,

            // ぞう
            Koma.Z,
            Koma.z,

            // きりん
            Koma.K,
            Koma.k,

            // ひよこ
            Koma.H,
            Koma.h,

            // にわとり
            Koma.PH,
            Koma.ph,

            // いぬ
            Koma.I,
            Koma.i,

            // ねこ
            Koma.Neko,
            Koma.neko,

            // 成りねこ
            Koma.PNeko,
            Koma.pneko,

            // うさぎ
            Koma.U,
            Koma.u,

            // 成りうさぎ
            Koma.PU,
            Koma.pu,

            // いのしし
            Koma.S,
            Koma.s,

            // 成りいのしし
            Koma.PS,
            Koma.ps,
        };

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「こういう並び順に変えるぜ☆」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「列挙型をさらにリストで持ってんのね」

        /// 
        /// 対局者別一覧
        ///
        public static Koma[][] ItiranTai = new Koma[][]
        {
            new Koma[]{// 対局者1
                Koma.R,// らいおん
                Koma.Z,// ぞう
                Koma.K,// きりん
                Koma.H,// ひよこ
                Koma.PH,// にわとり
                Koma.I,// いぬ
                Koma.Neko,// ねこ
                Koma.PNeko,// パワーアップねこ
                Koma.U,// うさぎ
                Koma.PU,// パワーアップうさぎ
                Koma.S,// いのしし
                Koma.PS,// パワーアップいのしし
            },
            new Koma[]{// 対局者2
                Koma.r,
                Koma.z,
                Koma.k,
                Koma.h,
                Koma.ph,
                Koma.i,
                Koma.neko,
                Koma.pneko,
                Koma.u,
                Koma.pu,
                Koma.s,
                Koma.ps,
            },
            new Koma[]{
                // 該当無し
            }
        };

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「成りねこ じゃなくて、パワーアップねこ なんだって☆

N は にわとり と間違えやすいんで Neko な☆」


11:33

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「あ……☆

パワーアップぞう と パワーアップきりん をすっかり忘れていたぜ☆

やりなおし☆」


12:04

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「いままで 1文字ずつパースしてたんだが、

+N

とか出てくるんで、パーサーも改造だぜ☆」


13:01

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「いぬ なんか ねーよ、って……☆

二駒関係評価値表が 怒ってくるんだけど☆」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「この際、可変駒用の 二駒関係評価値表を考えますか」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「えっ、どうやって……☆?」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「戻れる駒 / 戻れない駒、

タテヨコが得意な駒 / ナナメが得意な駒、

隣の升より遠くに進んで危ない駒 / おとなしい駒、

の6種類だけよ」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「王は☆?」

OKAZAKI_Yumemi_80x80x8_01_Damaru

「Kね」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「KKと、KPと、PP かだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「やるだけ やってみるかだぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「あるいは 二駒評価値を 今回は使わないか☆」

KIFUWARABE_80x100x8_01_Futu

「時間もないぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「じゃあ コメントアウトだな☆」

                // 後手の持ち駒
                if (
                    0 != this.MotiKomas.Get(MotiKoma.z) ||
                    0 != this.MotiKomas.Get(MotiKoma.k) ||
                    0 != this.MotiKomas.Get(MotiKoma.h)
                )
                {
                    if (0 != this.MotiKomas.Get(MotiKoma.z)) { syuturyoku.Append("ぞ");syuturyoku.Append(this.MotiKomas.Get(MotiKoma.z).ToString()); }
                    if (0 != this.MotiKomas.Get(MotiKoma.k)) { syuturyoku.Append("き");syuturyoku.Append(this.MotiKomas.Get(MotiKoma.k).ToString()); }
                    if (0 != this.MotiKomas.Get(MotiKoma.h)) { syuturyoku.Append("ひ");syuturyoku.Append(this.MotiKomas.Get(MotiKoma.h).ToString()); }
                }

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「こういう表示も 可変個に対応させないと☆」

                // 後手の持ち駒の数
                foreach (MotiKoma mk in Conv_MotiKoma.Itiran)
                {
                    if ( this.MotiKomas.HasMotiKoma(mk) )
                    {
                        syuturyoku.Append(Conv_MotiKoma.GetHyoji(mk)); syuturyoku.Append(this.MotiKomas.Get(mk).ToString());
                    }
                }

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「こうかだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「あっ、先後で分けとかないとな☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「にわとりの N が残ってて Neko になってしまうぜ☆

検索しづらいし……☆」

図は  0手まで 対局者1の番

     A    B    C    
  ┌──┬──┬──┐
1│▲い│▲ぞ│▲き│
  ├──┼──┼──┤
2│  │▲+U│  │
  ├──┼──┼──┤
3│  │▲う│  │
  ├──┼──┼──┤
4│▲+Z│▲ら│▲に│
  └──┴──┴──┘

fen krz/1h1/1H1/ZRK - 1
指し手全部
┌──────────┐
B3B2
C4C3
B4C3
B4A3
└──────────┘

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「表示がバグった……直そうぜ☆」


14:34

        private static string[] m_setumeiMojiretu_ = {
            "▲ら",
            "▲ぞ",
            "▲+Z",
            "▲き",
            "▲+K",
            "▲ひ",
            "▲に",
            "▲い",
            "▲ね",
            "▲+N",
            "▲う",
            "▲+U",
            "▲し",
            "▲+S",
            "▽ら",
            "▽ぞ",
            "▽+Z",
            "▽き",
            "▽+K",
            "▽ひ",
            "▽に",
            "▽い",
            "▽ね",
            "▽+N",
            "▽う",
            "▽+U",
            "▽し",
            "▽+S",
            "  ",
            "  ",
        };

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ここか☆ 並び順が違うぜ☆」

        static string[] m_setumeiMojiretu_ = {
            // らいおん(対局者1、対局者2)
            "▲ら",
            "▽ら",

            // ぞう
            "▲ぞ",
            "▽ぞ",

            // パワーアップぞう
            "▲+Z",
            "▽+Z",

            // きりん
            "▲き",
            "▽き",

            // パワーアップきりん
            "▲+K",
            "▽+K",

            // ひよこ
            "▲ひ",
            "▽ひ",

            // にわとり
            "▲に",
            "▽に",

            // いぬ
            "▲い",
            "▽い",

            // ねこ
            "▲ね",
            "▽ね",

            // パワーアップねこ
            "▲+N",
            "▽+N",

            // うさぎ
            "▲う",
            "▽う",

            // パワーアップうさぎ
            "▲+U",
            "▽+U",

            // いのしし
            "▲し",
            "▽し",

            // パワーアップいのしし
            "▲+S",
            "▽+S",

            // 空白、要素数
            "  ",
            "  ",
        };

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「こう書いて☆」


16:00

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「あー、持ち駒と、持ち駒種類 は別だったぜ☆

先後が付いてるのが 持ち駒、 先後が付いてないのが 持ち駒種類 だぜ☆」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ひよこを取ったら ねこを取ったことになるのな☆

ねこは駒の種類で言うと ぞう、きりん、ひよこ、いぬ、ねこ、で5番目☆

駒でいうと 先手ぞう、後手ぞう、先手きりん、後手きりん、先手ひよこ で、5番目は ひよこ☆

なるほどなあ☆」


16:16

        public static Sasite ToSasite_01c_Utta(
            Masu ms_dst,
            MotiKomasyurui mkUtta
        )
        {
            Debug.Assert(MotiKomasyurui.Yososu != mkUtta,"");

            // バリュー
            int v = 0;

            // 元筋と元段☆(^▽^)「打」のときは何もしないぜ☆(^▽^)

            // 先筋と先段☆(^▽^)
            Conv_Sasite.SetDstMasu_WithoutErrorCheck(ref v, ms_dst);


            //必ず指定されているはず☆ if (MotiKomasyurui.Yososu != mkUtta)
            {
                // 変換(列挙型→ビット)
                // ぞう 0 → 1
                // きりん 1 → 2
                // ひよこ 2 → 3
                // なし → 3 → 0
                // 1 足して 4 で割った余り☆
                v |= (((int)mkUtta+1)%4) << (int)SasiteShift.UttaKomasyurui;
            }

            // 打ったときは成れないぜ☆(^▽^)

            return (Sasite)v;
        }

KITASHIRAKAWA_Chiyuri_80x100x8_02_Hidosu

「うわーっ! こんなコードが残っていたぜ☆!」


16:50

            // 持ち駒パース
            {
                ky.MotiKomas.Clear();
                if (1 < motigoma.Length)
                { // '-' は持ち駒無し
                    int maisu = 0;
                    for (int caret = 0; caret < motigoma.Length; caret++)
                    {
                        char ch = motigoma[caret];

                        if (int.TryParse(ch.ToString(), out int numeric))
                        {
                            maisu = maisu * 10 + numeric;
                        }
                        else
                        {
                            if (Conv_MotiKoma.TryParse(ch, out MotiKoma mk))
                            {
                                ky.MotiKomas.Set(mk, maisu);
                                maisu = 0;
                            }
                        }
                    }
                }
            }

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ミスめっけ☆ 文字列1個だと ハイフンだから持ち駒ないだろ、と思っていたんだが

ひよこ1個のときも h 一文字だから無視されてしまう☆

直そ☆」


18:08

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「とりあえず、

いぬ とか ねこ に

駒の動きを 付けようぜ☆」

KIFUWARABE_80x100x8_01_Futu

「よっしゃ☆!」


19:31

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「なに うさぎ……☆

なんで 他の駒と違う動き方すんの☆?」

KIFUWARABE_80x100x8_01_Futu

「桂馬をディスるのは そこまでだぜ☆」


20:44

KITASHIRAKAWA_Chiyuri_80x100x8_02_Hidosu

「ねむー☆」

KIFUWARABE_80x100x8_01_Futu

「なんで うさぎ が出てこないんだぜ☆?」

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「ヒント☆

ハードコーディング☆」


21:53

KITASHIRAKAWA_Chiyuri_80x100x8_01_Futu

「やっとこさ 見た目 までは 来たぜ☆」

kifuwarabe_80x100x8_10_yattaze

「やったな☆!」

OKAZAKI_Yumemi_80x80x8_02_Syaberu

「やったわね!」

kitashirakawa_chiyuri_80x100x8_05_hehe

「やったぜ☆!」

 

はてなブックマーク - 目指せ、第27回世界コンピュータ将棋選手権☆ ポナンザ・チェイナーを倒そうぜ☆(^~^)<その7>
Bookmark this on Yahoo Bookmark
Buzz This
Bookmark this on Google Bookmarks
Bookmark this on Digg
Share on Facebook
Share on reddit
Share on LinkedIn
Share on StumbleUpon
Share on GREE
email this
LINEで送る
Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です