アットウィキロゴ

analppp

import numpy as np
 
def hash(m1,h1,p1):
 
    ha=""
    if m1=="先手":ha=ha+"w"
    if m1=="後手":ha=ha+"x"   
    if m1=="先手勝利":ha=ha+"y"
    if m1=="後手勝利":ha=ha+"z"
 
    for h2 in h1:
        if h2=="先手":ha=ha+"p"
        if h2=="後手":ha=ha+"q"   
 
    alp=["a","b","c","d","e","f","g","h","i","j"]
    for p2 in p1:
        ha=ha+alp[p2]
 
    return ha 
 
 
def win(mode,h1):
 
    mx=mode
    mx1=mx
    if mx1=="後手":mx="先手"
    if mx1=="先手":mx="後手"     
    if h1[0]=="後手":mx="後手勝利"
    if h1[3]=="先手":mx="先手勝利"     
 
    return mx
 
def rev():
 
    pp=[0,0,0,0,0,0,0,0,0,0]
 
    for i in range(6):
        sx=pos_ch[i]
        pp[sx]=pp[sx]+1   
 
    ch=0
    for i in range(6):
        h=0
        sx=pos_ch[i]
        if pp[sx]>1:h=100
        if hand_ch[i]==mode:h=0    
        if h>50:hand_ch[i]=mode
        if h>50:pos_ch[i]=0    
 
def check(px):
 
    pp=[0,0,0,0,0,0,0,0,0,0]
 
    for i in range(6):
        sx=px[i]
        if hand[i]==mode:pp[sx]=pp[sx]+1   
 
    ch=0
    for i in range(1,10):
        if pp[i]>1:ch=100
 
    return ch 
 
def change(px):
 
    pp=[0,0,0,0,0,0,0,0,0,0]
 
    for i in range(6):
        sx=px[i]
        pp[sx]=pp[sx]+1   
 
    chx=0
    for i in range(1,10):
        if pp[i]>1:chx=i
 
 
 
 
 
def point(d):
 
        m=-1  
        for i in range(10):
           if ban[i]==d:
              m=i
        return m  
 
def select():
 
    koma_sel=[]
 
    for u in range(6):
        h=0
        if hand[u]==mode:
           h=h+1
        if pos[u]>0:
           h=h+1
        if h==2:       
           koma_sel.append(u)
 
    return koma_sel
 
def makedir(h1,k1):
 
        dir=[]
        if k1=="王": 
           dir.append([1,1])
           dir.append([1,-1])
           dir.append([-1,1])
           dir.append([-1,-1])
           dir.append([1,0])
           dir.append([0,1])
           dir.append([-1,0])
           dir.append([0,-1])
 
        h=0
        if k1=="歩":
           h=h+1
        if h1=="先手":
           h=h+1
        if h==2:
           dir.append([0,1])     
 
        h=0
        if k1=="歩":
           h=h+1
        if h1=="後手":
           h=h+1
        if h==2:
           dir.append([0,-1])
 
        h=0
        if k1=="金":
           h=h+1
        if h1=="先手":
           h=h+1
        if h==2:
           dir.append([0,1])     
           dir.append([0,-1]) 
           dir.append([1,0]) 
           dir.append([-1,0]) 
           dir.append([1,1]) 
           dir.append([-1,1]) 
 
        h=0
        if k1=="金":
           h=h+1
        if h1=="後手":
           h=h+1
        if h==2:
           dir.append([0,1])     
           dir.append([0,-1]) 
           dir.append([1,0]) 
           dir.append([-1,0]) 
           dir.append([1,-1]) 
           dir.append([-1,-1]) 
 
        h=0
        if k1=="銀":
           h=h+1
        if h1=="先手":
           h=h+1
        if h==2:
           dir.append([0,1])     
           dir.append([1,1]) 
           dir.append([-1,1]) 
           dir.append([-1,-1]) 
           dir.append([1,-1])  
 
        h=0
        if k1=="銀":
           h=h+1
        if h1=="後手":
           h=h+1
        if h==2:
           dir.append([0,-1])     
           dir.append([1,-1]) 
           dir.append([-1,-1]) 
           dir.append([-1,1]) 
           dir.append([1,1]) 
 
        h=0
        if k1=="桂":
           h=h+1
        if h1=="先手":
           h=h+1
        if h==2:
           dir.append([1,2])     
           dir.append([-1,2]) 
 
        h=0
        if k1=="桂":
           h=h+1
        if h1=="後手":
           h=h+1
        if h==2:
           dir.append([1,-2])     
           dir.append([-1,-2])
 
        h=0
        if k1=="香":
           h=h+1
        if h1=="先手":
           h=h+1
        if h==2:
           dir.append([0,1])     
           dir.append([0,2]) 
 
        h=0
        if k1=="香":
           h=h+1
        if h1=="後手":
           h=h+1
        if h==2:
           dir.append([0,-1])     
           dir.append([0,-2])
 
        if k1=="飛": 
           dir.append([1,0])
           dir.append([0,1])
           dir.append([-1,0])
           dir.append([0,-1])      
           dir.append([2,0])
           dir.append([0,2])
           dir.append([-2,0])
           dir.append([0,-2])
 
        if k1=="角": 
           dir.append([1,1])
           dir.append([1,-1])
           dir.append([-1,1])
           dir.append([-1,-1])      
           dir.append([2,2])
           dir.append([2,-2])
           dir.append([-2,2])
           dir.append([-2,-2]) 
 
        h=0
        if k1=="と":
           h=h+1
        if h1=="先手":
           h=h+1
        if h==2:
           dir.append([0,1])     
           dir.append([0,-1]) 
           dir.append([1,0]) 
           dir.append([-1,0]) 
           dir.append([1,1]) 
           dir.append([-1,1]) 
 
        h=0
        if k1=="と":
           h=h+1
        if h1=="後手":
           h=h+1
        if h==2:
           dir.append([0,1])     
           dir.append([0,-1]) 
           dir.append([1,0]) 
           dir.append([-1,0]) 
           dir.append([1,-1]) 
           dir.append([-1,-1])
 
        h=0
        if k1=="成香":
           h=h+1
        if h1=="先手":
           h=h+1
        if h==2:
           dir.append([0,1])     
           dir.append([0,-1]) 
           dir.append([1,0]) 
           dir.append([-1,0]) 
           dir.append([1,1]) 
           dir.append([-1,1])
 
        h=0
        if k1=="成香":
           h=h+1
        if h1=="後手":
           h=h+1
        if h==2:
           dir.append([0,1])     
           dir.append([0,-1]) 
           dir.append([1,0]) 
           dir.append([-1,0]) 
           dir.append([1,-1]) 
           dir.append([-1,-1])
        h=0
        if k1=="成桂":
           h=h+1
        if h1=="先手":
           h=h+1
        if h==2:
           dir.append([0,1])     
           dir.append([0,-1]) 
           dir.append([1,0]) 
           dir.append([-1,0]) 
           dir.append([1,1]) 
           dir.append([-1,1])
        h=0
        if k1=="成桂":
           h=h+1
        if h1=="後手":
           h=h+1
        if h==2:
           dir.append([0,1])     
           dir.append([0,-1]) 
           dir.append([1,0]) 
           dir.append([-1,0]) 
           dir.append([1,-1]) 
           dir.append([-1,-1])
        h=0
        if k1=="成銀":
           h=h+1
        if h1=="先手":
           h=h+1
        if h==2:
           dir.append([0,1])     
           dir.append([0,-1]) 
           dir.append([1,0]) 
           dir.append([-1,0]) 
           dir.append([1,1]) 
           dir.append([-1,1])
        h=0
        if k1=="成銀":
           h=h+1
        if h1=="後手":
           h=h+1
        if h==2:
           dir.append([0,1])     
           dir.append([0,-1]) 
           dir.append([1,0]) 
           dir.append([-1,0]) 
           dir.append([1,-1]) 
           dir.append([-1,-1])
 
        if k1=="竜王": 
           dir.append([1,1])
           dir.append([1,-1])
           dir.append([-1,1])
           dir.append([-1,-1])
           dir.append([1,0])
           dir.append([0,1])
           dir.append([-1,0])
           dir.append([0,-1])
           dir.append([2,0])
           dir.append([0,2])
           dir.append([-2,0])
           dir.append([0,-2])
 
        if k1=="竜馬": 
           dir.append([1,1])
           dir.append([1,-1])
           dir.append([-1,1])
           dir.append([-1,-1])
           dir.append([1,0])
           dir.append([0,1])
           dir.append([-1,0])
           dir.append([0,-1])
           dir.append([2,2])
           dir.append([-2,-2])
           dir.append([-2,2])
           dir.append([2,-2])
 
        return dir
 
 
koma=["王","金","銀","王","金","銀"]
ban=[]
ban.append([0,0])
for y1 in [1,2,3]:
    for x1 in [1,2,3]:
        ban.append([x1,y1])
pos=[2,1,3,8,7,9] 
hand=["先手","先手","先手","後手","後手","後手"]
mode="先手"
 
koma_sel=select()
 
koma_pol=[]
pos_pol=[]
 
for n in koma_sel:
    dx=makedir(hand[n],koma[n])
    for d1 in dx:
        p1=pos[n]
        x1=ban[p1][0]+d1[0]
        y1=ban[p1][1]+d1[1]
        p2=point([x1,y1])
        if p2>0:koma_pol.append(n)
        if p2>0:pos_pol.append(p2)
 
sig=[]
for i in range(len(koma_pol)):
    px=[0,0,0,0,0,0]
    for j in range(6): 
        px[j]=pos[j]
    p1=koma_pol[i]
    p2=pos_pol[i]
    px[p1]=p2
    sig.append(px)
 
sigx=[]
for px in sig:              
    if check(px)<50:sigx.append(px)
 
pol_pos=[]
pol_hand=[]
pol_mode=[]
for px in sigx: 
    pos_ch=[]
    hand_ch=[]
    for i in range(6):
       pos_ch.append(px[i])
       hand_ch.append(hand[i])
    rev()
    pol_pos.append(pos_ch)
    pol_hand.append(hand_ch)
    mx=win(mode,hand_ch)
    pol_mode.append(mx)
 
pol_hash=[]
for i in range(len(pol_mode)):
    pol_hash.append(hash(pol_mode[i],pol_hand[i],pol_pos[i]))
 
dic=[""]
point=[50]
 
pol_point=[]
for hh in pol_hash:
    sxs=0
    if hh in dic:sxs=dic.index(hh)
    pol_point.append(point[sxs])
 
q=[]
for i in range(len(pol_point)):
    p1=pol_point[i]
    for j in range(p1):
        q.append(i) 
 
sxs=np.random.choice(q)
 
print(pol_hand[sxs])
print(pol_pos[sxs])
print(pol_mode[sxs])
 
最終更新:2018年02月17日 15:48