blog

数独生成アルゴリズム

1.最初にシードリストにコード:swift2.変換後の行は、左右の辺を置き換える3.上下の辺を置き換える変換後の列4.3 * 3空間の変換の4つのコーナーを置き換えるために、それぞれの列の左右の辺コー...

Oct 26, 2020 · 3 min. read
シェア

1. 最初にシードリストに コード: swift

 var zhongziArray:Array<Int> = [];
 
 
 while zhongziArray.count<9{
 let number = arc4random()%9+1
 if zhongziArray.contains(Int(number)){
 continue
 }else{
 zhongziArray.append(Int(number))
 }
 }

2.変換後の行の左右を入れ替えます。

3.列変換後、上下を入れ替えます。

4.3*3スペースの四隅を置き換えるために、それぞれの列変換の左辺と右辺

コード: swift

//num  
func hangbianhuan(array:Array<Int>,_ num:Int)->Array<Int>{
 if(num==1){
 return Array(array[3...5])+Array(array[6...8])+Array(array[0...2])
 }else{
 return Array(array[6...8])+Array(array[0...2])+Array(array[3...5])
 }
}
hangbianhuan(array: [1,2,3,4,5,6,7,8,9],1)
hangbianhuan(array: [1,2,3,4,5,6,7,8,9],2)
//num  
func liebianhuan(array:Array<Int>,_ num:Int)->Array<Int>{
 var cArray = array
 if(num==1){
 for i in 0...8{
 
 switch i%3 {
 case 0:
 cArray[i]=array[i+1]
 case 1:
 cArray[i]=array[i+1]
 case 2:
 cArray[i]=array[i-2]
 default: break
 
 }
 
 }
 return cArray
 
 }else{
 for i in 0...8{
 
 switch i%3 {
 case 0:
 cArray[i]=array[i+2]
 case 1:
 cArray[i]=array[i-1]
 case 2:
 cArray[i]=array[i-1]
 default: break
 
 }
 
 }
 return cArray
 }
}
liebianhuan(array: [1,2,3,4,5,6,7,8,9],1)
liebianhuan(array: [1,2,3,4,5,6,7,8,9],2)
func addNineToSudu(_ array:Array<Int>,_ sudu:Array<Array<Int>>,_ index:Int)->Array<Array<Int>>{
 
 var nsudu = sudu
 let rl = 0 + index/3*3
 let rr = 2 + index/3*3
 let cl = 0 + index%3*3
 let cr = 2 + index%3*3
 print(rl)
 print(rr)
 print(cl)
 print(cl)
 for column in cl...cr{
 for row in rl...rr{
 let c=column-cl
 let r=row-rl
 nsudu[row][column]=array[c+r*3]
 }
 }
 return nsudu
}
addNineToSudu([1,2,3,4,5,6,7,8,9],[[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]],4)
func printLine(_ array:Array<Any>){
 for i in array{
 print(i)
 print("
")
 }
}
func shengchengshudu(){
 
 var zhongziArray:Array<Int> = [];
 
 
 while zhongziArray.count<9{
 let number = arc4random()%9+1
 if zhongziArray.contains(Int(number)){
 continue
 }else{
 zhongziArray.append(Int(number))
 }
 }
 
 var shuduArray = [[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]];
 //センターを追加する
 shuduArray = addNineToSudu(zhongziArray,shuduArray,4)
 printLine(shuduArray)
 //左側を追加する
 let lhang = hangbianhuan(array: zhongziArray,1)
 shuduArray = addNineToSudu(hangbianhuan(array: zhongziArray,1),shuduArray,3)
 //右側を追加する
 let rhang = hangbianhuan(array: zhongziArray,2)
 shuduArray = addNineToSudu(hangbianhuan(array: zhongziArray,2),shuduArray,5)
 shuduArray = addNineToSudu(liebianhuan(array: zhongziArray,1),shuduArray,1)
 shuduArray = addNineToSudu(liebianhuan(array: zhongziArray,2),shuduArray,7)
 shuduArray = addNineToSudu(liebianhuan(array: lhang,1),shuduArray,0)
 shuduArray = addNineToSudu(liebianhuan(array: lhang,2),shuduArray,6)
 shuduArray = addNineToSudu(liebianhuan(array: rhang,1),shuduArray,2)
 shuduArray = addNineToSudu(liebianhuan(array: rhang,2),shuduArray,8)
 
}
shengchengshudu()
Read next

V8エンジン学習 - 関数式

関数式と関数宣言は関数を定義する2つの形式なので、混同しないでください。関数式はJSではとても基本的なものです。関数式は、コードの隠蔽や変数の分離などを実現するために使用できます。関数宣言は変数リフティングの特徴を持っています。 JSが実行される過程で、V8はまずコンパイルされ、それから実行されます。 コンパイルの段階で、関数宣言が解析されると、V8はこの関数宣言をメモリ内の...

Oct 26, 2020 · 3 min read