「二国同盟法の発動」のソースコード

ナンプレ支援プログラム二国同盟Part3に戻る

このソースコードは、2022年2月初旬のもので、最新版ではありません。プログラミング言語Javaで書かれています。

//=====縦の二国同盟の発動 function allianceTC(){ banm=[ [0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0] ];const two=2; let alliance=[0,0,0,0,0,0,0,0,0,0]; for(let i=1; i<10; i++){ for(let ii=1; ii<10; ii++){ let bid = document.getElementById( "b"+ii+i );if(bid.value == ""){banm[i][ii]=Possible(bid);} else{banm[i][ii]="0";} }//banm[Y][T]には、可能候補が"1,3,"のように保存される。空きマスでない場合は"0"。 } let xx=0; for(let Y=1; Y<10; Y++){ for(let T=1; T<10; T++){ if( (banm[Y][T] != "0") ){ for(let i=T+1;i<10;i++){if( (banm[Y][T] == banm[Y][i]) && (banm[Y][T].length == 4) ){ for(let ii=1;ii<10;ii++){alliance[ii]=banm[Y][ii]}; for(let ii=1;ii<10;ii++){ alliance[ii]=alliance[ii].replace( ( banm[Y][T].substring(0,2)),"") ; } for(let ii=1;ii<10;ii++){ alliance[ii]=alliance[ii].replace( ( banm[Y][T].substring(2,4)),"") ; } //一字だけ残ったら、確定。 for(let ii=1;ii<10;ii++){ if(alliance[ii].length==2){ document.getElementById( "b"+ii+Y ).value = alliance[ii].substring(0,1) } } } } } } }where(0);fcount();location.href="#banmen"; } //=====横の二国同盟の発動 function allianceYC(){ banm=[ [0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0] ];const two=2; let alliance=[0,0,0,0,0,0,0,0,0,0]; for(let i=1; i<10; i++){ for(let ii=1; ii<10; ii++){ let bid = document.getElementById( "b"+i+ii );if(bid.value == ""){banm[i][ii]=Possible(bid);} else{banm[i][ii]="0";} }//banm[T][Y]には、可能候補が"1,3,"のように保存される。空きマスでない場合は"0"。 } let xx=0; for(let Y=1; Y<10; Y++){ for(let T=1; T<10; T++){ if( (banm[T][Y] != "0") ){ for(let i=Y+1;i<10;i++){if( (banm[T][Y] == banm[T][i]) && (banm[T][Y].length == 4) ){ for(let ii=1;ii<10;ii++){alliance[ii]=banm[T][ii]}; for(let ii=1;ii<10;ii++){ alliance[ii]=alliance[ii].replace( ( banm[T][Y].substring(0,2)),"") ; } for(let ii=1;ii<10;ii++){ alliance[ii]=alliance[ii].replace( ( banm[T][Y].substring(2,4)),"") ; } //一字だけ残ったら、確定。 for(let ii=1;ii<10;ii++){ if(alliance[ii].length==2){ document.getElementById( "b"+T+ii ).value = alliance[ii].substring(0,1) } } let XXX=banm[T][i]; let XX=banm[T][Y]; let stop=0;} } } } }where(0);fcount();location.href="#banmen"; } //=====ブロックの二国同盟の発動 function allianceBLW(){ let startD = new Date();let start=startD.getTime();
//第1のループ===== for(let search1=1;search1<9;search1++){let aaBL1=[ [0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0] ]; for(let BL=1;BL<10;BL++){let whitemasu=[0,0,0,0,0]; count1=EmptyCount(search1,BL,whitemasu); if(count1==2){aaBL1[BL] [0]=BL; aaBL1[BL] [1]=whitemasu[1]; aaBL1[BL] [2]=whitemasu[2]; } }
//第2のループ===== for(let search2=search1+1;search2<10;search2++){let aaBL2=[ [0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0] ]; for(let BL=1;BL<10;BL++){let whitemasu=[0,0,0,0,0]; count2=EmptyCount(search2,BL,whitemasu); if(count2==2){aaBL2[BL] [0]=BL; aaBL2[BL] [1]=whitemasu[1]; aaBL2[BL] [2]=whitemasu[2]; } } //search1で空きマスが2個のブロックを探す…B1(aa,bb),B2(cc,dd)…。(B1,aa,bb)として保存。 //search2で空きマスが2個の(B1,aa,bb)を探す…B1(aa,bb),B2(cc,dd)…。(B1,aa,bb)として保存。
//第3のループ===== for(bli=1;bli<10;bli++){ if( (aaBL1[bli][0]==aaBL2[bli][0]) && (aaBL1[bli][1]==aaBL2[bli][1]) && (aaBL1[bli][2]==aaBL2[bli][2]) && (aaBL1[bli][0]!=0) ){ for(let search3=1;search3<10;search3++){let aaBL3=[ [0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0],[0,0,0] ]; for(let BL=1;BL<10;BL++){let whitemasu=[0,0,0,0,0];if( (search3==search1) || (search3==search2) ){break;} count3=EmptyCount(search3,BL,whitemasu); if(count3==2){aaBL3[BL] [0]=BL; aaBL3[BL] [1]=whitemasu[1]; aaBL3[BL] [2]=whitemasu[2]; if( (aaBL3[bli][1]==aaBL1[bli][1]) || (aaBL3[bli][1]==aaBL1[bli][2]) || (aaBL3[bli][2]==aaBL1[bli][1]) || (aaBL3[bli][2]==aaBL1[bli][2]) ){ //aaB-L3[bli][1]かaa-BL3[bli][2]のどちらか1つだけが、aaBL1[bli][1]かaaBL1[bli][2]ならば、bliブロックでsearch1とsearch2の2国同盟成立。 //aaBL1[bli][1]とaaBL1[bli][2]には、search3は入れない。aaBL3[bli][1]==aaBL1[bli][1]ならば、search3はaaBL1[bli][2]に入る。 if ( aaBL3[bli][1]==aaBL1[bli][1] ){ let bname = document.getElementById("b"+aaBL3[bli][2]); bname.value=search3; } //aaBL3[bli][1]には入れられない。 else if ( aaBL3[bli][1]==aaBL1[bli][2] ){ let bname = document.getElementById("b"+aaBL3[bli][2]); bname.value=search3; } //aaBL3[bli][1]には入れられない。 else if ( aaBL3[bli][2]==aaBL1[bli][1] ){ let bname = document.getElementById("b"+aaBL3[bli][1]); bname.value=search3; } //aaBL3[bli][2]には入れられない。 else if ( aaBL3[bli][2]==aaBL1[bli][2] ){ let bname = document.getElementById("b"+aaBL3[bli][1]); bname.value=search3; } //aaBL3[bli][2]には入れられない。 else{ } } } } } } } } } let endD = new Date();let end=endD.getTime();let time=(end-start)/1000; } function EmptyCount(search,BL,whitemasu){//BL内のsearchに対する空白の個数を数える。whitemasuには空白マスの座標が3個まで。 let count=0; b1199.value=BL; where(search);count=countAki(whitemasu,BL);return count; } //--------------- function where(search){crosskesi(search);fcount();fnone();if (search!=0){WriteNumber.value=search;}else{ candidateCLI.value="";WriteNumber.value="";fcount();} //WriteNumber.value:マスに記入する数字 for(let i=0; i<10; i++){let bname = document.getElementById( "b"+i ); bname.style.color ="black"} //まず黒字にしておく let bname = document.getElementById( "b"+search );bname.style.color ="red";//(search)数字ボタンを赤にする。 for(let i=1; i<10; i++){let bname = document.getElementById("dcheckR"+i);bname.value=""; } for(let i=1; i<10; i++){let bname = document.getElementById("dcheckD"+i);bname.value=""; } for (let BB = 11; BB < 100; BB++){ if(BB % 10 !=0){let bname = document.getElementById( "b"+BB );{if(bname.value!=""){bname.style.backgroundColor = CROSSbg;}; if (bname.disabled == false){bname.style.color = BANbaseCOLOR} else {bname.style.color = "black"} } } } /*search!=0には意味がある*/ for (let BB = 11; BB < 100; BB++){ if(BB % 10 !=0){let bname = document.getElementById( "b"+BB ); if(bname.value==search && search!=0){bname.style.color = "red"; cross(BB);} } }dcheck();fcount();writeYA(search); //取り敢えずのパッチ if (search==0){ for (let BB = 11; BB < 100; BB++){if(BB % 10 !=0){let bname = document.getElementById( "b"+BB ); if(bname.value==""){bname.style.backgroundColor ="white";bname.disabled = false;} } } } } //----------crosskesi whereから呼ばれる。searchはボタンの数字(1〜9) function crosskesi(search){for(let i=1; i<10; i++){for(let ii=1; ii<10; ii++) { let bname = document.getElementById( "b"+i+ii );bname.style.color = "black"; if(bname.disabled == false){bname.style.backgroundColor = "white";} else {bname.style.backgroundColor = DISABLEDbgcolor;} } } } //--------------- function countAki(whitemasu,bl){let BL=b1199.value; let count=0;const base=[0,11,14,17,41,44,47,71,74,77]; const plus=[0,0,1,2,10,11,12,20,21,22]; if(typeof bl !="undefined"){BL=bl;} for(let i=1;i<4;i++){whitemasu[i]=0;};//←とwhitemasu=[0,0,0,0]は同じようだが、whitemasu=[0,0,0,0]とすると、whitemasuのスコープは、この関数内になって、外には影響しない。 for(let i=1;i<10;i++){ let bb99=base[BL]+ plus[i];let bb99ID = document.getElementById( "b"+bb99 ); if(bb99ID.style.backgroundColor=="white"){count++;if(0

最後まで読んでいただいて、ありがとうございました。