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

ブルーム・フィルターに関する質問

ブルームフィルタは、大量のデータ中のビットマップの有無を検索する問題を解決するために設計されたデータ構造です。 理想的には、nビットのビットマップは$2^n$個の要素を保持することができ、既に存在する要素が多くなると誤検出の可能性が大幅に高まります。 ビットマップの長さが$m$で、$k$個のハッシュ関数があり、入力フィールドの任意の要素に対して、ハッシュによって得られる値が$[0...]の範囲にあるとします。

Oct 25, 2020 · 4 min read

J41コンストラクタ

Oct 23, 2020 · 4 min read

ツール - ドキュメント

Oct 21, 2020 · 2 min read

タイムスタンプを取得する

Oct 21, 2020 · 1 min read

C#-アクション

Oct 20, 2020 · 2 min read