竜神拳

先日のAbemaTVトーナメント大将戦の第二局である。

絶叫実況の藤森五段のリュウジンケンなる謎ワードが飛び出した場面。

f:id:the48:20200422111055j:plain

 

 

 

  

王手で打った飛車を自陣に引くことで手渡しなしで強化する技ですね。

今回自玉近傍に竜を作ると再定義してみました。

# CSAファイルから指定する局面だけ抜き出す
# 2020.4.21 竜神拳ポジションの検索

import shogi
import shogi.CSA
import argparse
from tqdm import tqdm

# read all kifu
def read_kifu(kifu_list_file, output_file):
    f = open(kifu_list_file, 'r')
    fout = open(output_file, 'wt')
    for line in tqdm(f.readlines()):
        filepath = line.rstrip('\r\n')
        # print(filepath)
#        kifu = shogi.CSA.Parser.parse_file(filepath, encoding='utf-8')[0]
        kifu = shogi.CSA.Parser.parse_file(filepath)[0]
        board = shogi.Board()
        flag1 = 0
        rsq = 0
        for i, move in enumerate(kifu['moves']):
            board.push_usi(move)
            if shogi.Move.from_usi(move).drop_piece_type==shogi.ROOK and board.is_check(): # 王手で飛車を打つ
                flag1 = i
                rsq = shogi.Move.from_usi(move).to_square # 打った駒の位置
            if flag1 + 2 == i and shogi.Move.from_usi(move).from_square == rsq: # その二手後
                sq = shogi.Move.from_usi(move).to_square # 動いた先
                ksq = board.king_squares[board.turn ^1] # 自玉の位置
                if board.piece_type_at(sq)==shogi.PROM_ROOK and -3<shogi.rank_index(sq)-shogi.rank_index(ksq)<3 and -3<shogi.file_index(sq)-shogi.file_index(ksq)<3:
                    print(filepath,i+1,file=fout)
    f.close()
    fout.close()
    return

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='CSA 2 Checkout')
    parser.add_argument('kifu_list', type=str, help='kifu list')
    parser.add_argument('out_file', type=str, help='output file name')
    args = parser.parse_args()
    read_kifu(args.kifu_list, args.out_file)

 

floodgateで検索したところ2017年の75242棋譜中390回,2018年は47813棋譜中329回,2019年は106410棋譜中794回発生していることが分かりました。そんだけ