アットウィキロゴ

いえしゃ

package koma4;
 
 
public class pro {
 
 
    String[] koma=new String[7];
  int[][] dx=new int[4][11];
      int[][] dy=new int[4][11];
  int[] number_dir=new int[4];
 
   int[] x=new int[7];
   int[] y=new int[7];
    String[] pos=new String[7];
 
   String mode,game;
 
   int[] point_koma=new int[7];
   int number_koma;
    int[] point_x=new int[7];
    int[] point_y=new int[7];
    int number_point;
 
 
 
        int[] x_change=new int[7];
        int[] y_change=new int[7];
        String[] pos_change=new String[7];
    String game_change;
 
 
 
 
 
 
    int[][] x_link=new int[41][7];
    int[][] y_link=new int[41][7];
    String[][] pos_link=new String[41][7];
    String[] game_link=new String[60];
    String[] mode_link=new String[60];
    int number_link;
 
 
    int[][] x_con=new int[400001][7];
    int[][] y_con=new int[400001][7];
    String[][] pos_con=new String[400001][7];
    String[] game_con=new String[600000];
    String[] mode_con=new String[600000];
    int number_con;
 
 
 
    public static void main(String[] args) {
          pro test=new pro();
    }
    pro(){
 
 
        number_con=1;
 
 
         x_con[1][1]=2;
        y_con[1][1]=3;
        x_con[1][2]=1;
        y_con[1][2]=3;
        x_con[1][3]=3;
        y_con[1][3]=3;
 
        x_con[1][4]=2;
        y_con[1][4]=1;
        x_con[1][5]=1;
        y_con[1][5]=1;
        x_con[1][6]=3;
        y_con[1][6]=1;
 
        pos_con[1][1]="先手";
        pos_con[1][2]="先手";
        pos_con[1][3]="先手";
        pos_con[1][4]="後手";
        pos_con[1][5]="後手";
        pos_con[1][6]="後手";   
 
        mode_con[1]="先手";
        game_con[1]="";
 
        int s,trial;
        int de=0;
        trial=1;
        while(de<50){
        for(s=1;s<7;s++){
        x[s]=x_con[trial][s];
        y[s]=y_con[trial][s];
        pos[s]=pos_con[trial][s];
        }
 
        game=game_con[trial];
        mode=mode_con[trial];
 
        link sub=new link();
        sub.x=x;
        sub.y=y;
        sub.pos=pos;
        sub.mode=mode;
        sub.game=game;
        sub.makedata();
        pos_link=sub.pos_link;
        x_link=sub.x_link;
        y_link=sub.y_link;
        number_link=sub.number_link;
        game_link=sub.game_link;
        mode_link=sub.mode_link;
 
        if(game.length()>0)number_link=0;
 
        int mx;
        for(mx=1;mx<number_link+1;mx++){
        int ch=check(mx); 
        if(ch<50)plus(mx);        
        }
 
        System.out.println(trial+","+number_con);
        trial=trial+1;
        if(trial>number_con)de=100;
        if(trial>50000)de=100;
        }
    }
int check(int mx){
    int s,tr,k;
 
    int ch=0;
    for(k=1;k<number_con+1;k++){
    int h=0;
 for(s=1;s<7;s++){
 if(x_link[mx][s]==x_con[k][s])h=h+1;    
 if(y_link[mx][s]==y_con[k][s])h=h+1; 
 if(pos_link[mx][s].equals(pos_con[k][s]))h=h+1; 
 }    
 if(mode_link[mx].equals(mode_con[k]))h=h+1; 
 if(h==19)ch=100;   
 }
 
return ch;    
}
 
    void plus(int mx){
    int s,tr,k;
 
    number_con=number_con+1;
 
 
 for(s=1;s<7;s++){
 x_con[number_con][s]=x_link[mx][s];    
 y_con[number_con][s]=y_link[mx][s]; 
 pos_con[number_con][s]=pos_con[mx][s]; 
 }    
mode_con[number_con]=mode_link[mx]; 
game_con[number_con]=game_link[mx];
 
 
 
 
}
}
 
 
 
package koma4;
 
public class link {
 
 
    String[] koma=new String[7];
  int[][] dx=new int[4][11];
      int[][] dy=new int[4][11];
  int[] number_dir=new int[4];
 
   int[] x=new int[7];
   int[] y=new int[7];
    String[] pos=new String[7];
 
   String mode,game;
 
   int[] point_koma=new int[70];
   int number_koma;
    int[] point_x=new int[70];
    int[] point_y=new int[70];
    int number_point;
 
 
 
        int[] x_change=new int[7];
        int[] y_change=new int[7];
        String[] pos_change=new String[7];
    String game_change;
 
 
    int[][] x_link=new int[41][7];
    int[][] y_link=new int[41][7];
    String[][] pos_link=new String[41][7];
    String[] game_link=new String[60];
    String[] mode_link=new String[60];
    int number_link;
 
 
 
    void makedata(){
 
           /**金の先手**/
 
dx[1][1]=1;
dy[1][1]=0;
dx[1][2]=-1;
dy[1][2]=0;
 
dx[1][3]=1;
dy[1][3]=-1;
dx[1][4]=-1;
dy[1][4]=-1;
dx[1][5]=0;
dy[1][5]=-1; 
 
dx[1][6]=0;
dy[1][6]=1; 
 
number_dir[1]=6;
 
  /**金の後手**/
 
dx[2][1]=1;
dy[2][1]=0;
dx[2][2]=-1;
dy[2][2]=0;
 
dx[2][3]=1;
dy[2][3]=1;
dx[2][4]=-1;
dy[2][4]=1;
dx[2][5]=0;
dy[2][5]=1; 
 
dx[2][6]=0;
dy[2][6]=-1; 
 
number_dir[2]=6; 
 
 /**王**/
 
dx[3][1]=1;
dy[3][1]=0;
dx[3][2]=-1;
dy[3][2]=0;
 
dx[3][3]=1;
dy[3][3]=-1;
dx[3][4]=-1;
dy[3][4]=-1;
dx[3][5]=0;
dy[3][5]=-1; 
 
dx[3][6]=-1;
dy[3][6]=1; 
dx[3][7]=0;
dy[3][7]=1;  
dx[3][8]=1;
dy[3][8]=1;
 
number_dir[3]=8;        
 
 
        koma[1]="王";
        koma[2]="金";
        koma[3]="金";
        koma[4]="王";
        koma[5]="金";
        koma[6]="金";
 
select_koma();
 
 
 
int n=0;
int tr;
for(tr=1;tr<number_koma+1;tr++){
int sig=point_koma[tr];
 
 
 select_dir(sig);
 
 
int px;
for(px=1;px<number_point+1;px++){
 
 n=n+1;   
 
change(sig,point_x[px],point_y[px]);
 
int s;
for(s=1;s<7;s++){
x_link[n][s]=x_change[s];
y_link[n][s]=y_change[s];
pos_link[n][s]=pos_change[s];
}
 
game=watch();
 
game_link[n]=game;
 
String mm="";
if(mode.equals("先手"))mm="後手";
if(mode.equals("後手"))mm="先手";
 
mode_link[n]=mm;
    }}
 
number_link=n;
 
 
 
 
    }
 
 
 
 
void change(int sig,int x1,int y1){
 
 
 
        int s;
        for(s=1;s<7;s++){
        x_change[s]=x[s];
        y_change[s]=y[s];
        pos_change[s]=pos[s];
        }
 
        x_change[sig]=x1;
        y_change[sig]=y1;
 
        for(s=1;s<7;s++){
        int h=0; 
        if(x_change[s]==x_change[sig])h=h+1;
        if(y_change[s]==y_change[sig])h=h+1;
        if(pos_change[s].equals(mode))h=0;
        if(h==2)x_change[s]=0;
        if(h==2)y_change[s]=0;
        if(h==2)pos_change[s]=mode;
        }
 
 
 
    }
 
    String watch(){
 
 
        String w="";
        if(pos_change[1].equals("後手"))w="後手";
        if(pos_change[4].equals("先手"))w="先手";
 
 
        return w;
    }
 
 
 
 
 
      void select_dir(int sig){
 
        int z=0;
        if(x[sig]==0)z=100;
         if(y[sig]==0)z=100;
 
         if(z<50)select_d1(sig);
         if(z>50)select_d2();
 
    }
 
    void select_d1(int sig){
 
        int s,sx;
        int k,h;
        k=0;
        if(koma[sig]=="王")k=3;
        h=0;
        if(koma[sig].equals("金"))h=h+1;
        if(pos[sig].equals("先手"))h=h+1;
        if(h==2)k=1;
        h=0;
        if(koma[sig].equals("金"))h=h+1;
        if(pos[sig].equals("後手"))h=h+1;
        if(h==2)k=2;
 
        sx=0;
 
 
        for(s=1;s<number_dir[k]+1;s++){ 
        int x1=x[sig]+dx[k][s];
        int y1=y[sig]+dy[k][s];
        int c=check(x1,y1);
        if(c<50)sx=sx+1;
        if(c<50)point_x[sx]=x1;
        if(c<50)point_y[sx]=y1;
        }
 
 
        number_point=sx;
 
 
    }
 
 
    int check(int x1,int y1){
 
        int s,ch;
        ch=0;
        for(s=1;s<7;s++){
        int h=0;    
        if(x[s]==x1)h=h+1;
        if(y[s]==y1)h=h+1;
        if(pos[s].equals(mode))h=h+1;
        if(h==3)ch=100;
        }
 
        if(x1>3)ch=100;
        if(y1>3)ch=100;
         if(x1<1)ch=100;
        if(y1<1)ch=100;
 
        return ch;
    }
 
      void select_d2(){
 
          int x1,y1,s,ch,sx;
     sx=0;
     for(x1=1;x1<4;x1++){
     for(y1=1;y1<4;y1++){
     int c=0;
     for(s=1;s<7;s++){
     int h=0;
     if(x[s]==x1)h=h+1;
     if(y[s]==y1)h=h+1;
     if(h==2)c=100;
     }
      if(c<50)sx=sx+1;
      if(c<50)point_x[sx]=x1;
      if(c<50)point_y[sx]=y1; 
     }
     }
 
       number_point=sx;
 
    }
 
 
 
 void select_koma(){
 
        int s,sx;
        sx=0;
        for(s=1;s<7;s++){
        if(pos[s].equals(mode))sx=sx+1;    
        if(pos[s].equals(mode))point_koma[sx]=s; 
        }
 
 
        number_koma=sx;
 
 
    }
 
 
}
 
最終更新:2017年10月25日 21:57