目指せ、第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>
[`yahoo` not found]
[`yahoo_buzz` not found]
このエントリーを Google ブックマーク に追加
Digg にシェア
Facebook にシェア
reddit にシェア
LinkedIn にシェア
[`evernote` not found]
StumbleUpon にシェア
GREE にシェア
email this
LINEで送る
Pocket

コメントを残す

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