第6講 数独自動生成アプリVer.1の開発
第6話 ハイブリッドにするための考え方
ハイブリッドを実現するためにはいくつか課題があります。
ヒント数が多いときの手順をもう一度確認しますと、
①ヒント数0数独の解答を作る
②解答から問題に配置する以外のセルは0(空欄)に戻すことのよって問題を作成する
③②で作った問題を再び解き直して、唯一解であるときのみにシートに吐き出す。
ということになります。

第5話ではonとoffの2段階しかありませんでしたから、
onoffというグローバル変数を用意しましたが、
①②③に対応して3段階になりますので、
変数名をmdに変更して、関連するコードを
    If md = 0 Then
      If g + 1 < hnt Then
        f (g + 1)
        If cn = 1 Then Exit Sub
      Else
        cn = cn + 1
        If cn = 1 Then Exit Sub
      End If
    End If
    
If md = 2 Then
      If g + 1 < n * n Then
        f (g + 1)
        If cn = 1 Then Exit Sub
      Else
        cn = cn + 1
        If cn = 1 Then Exit Sub
      End If
    End If

    If
md = 1 Then
      If g + 1 < n * n Then
        f (g + 1)
        If cn = 2 Then Exit Sub
      Else
        cn = cn + 1
        If cn = 1 Then
          For j = 0 To n - 1
            For k = 0 To n - 1
              cm(j, k) = m(j, k)
            Next
          Next
        End If
        If cn = 2 Then Exit Sub
      End If
    End If

とします。

①は
    md = 2
    f (0)
としてクリアします。


②と③にも克服すべき課題があります。
まず、dainyuは2重に変更する必要があります。
コピー元はシートのB4からJ12のセルではなく、
cm(?, ?)です。
dainyuの最初にm(i, j)は0に初期化してありますので、
問題配置のところだけを代入すればよいのです。
そのために代入の部分は1次元For文となります。
cm(?, ?)の?を適切なものにして代入してください。

気をつけなければならない点は、
    md = 2
    f (0)
によって、
  Do While 1
    
Select Case ty
      Case 0
        hitaisyou
      Case 1
        retutaisyou
      Case 2
        gyoutaisyou
      Case 3
        tentaisyou
    End Select

の色のついている部分で作った座標が壊されていますので、
座標を復元する必要があります。
座標が壊されてしまうのは、
Sub f(g As Byte)
  Dim i As Byte, j As Byte, k As Byte, h As Byte, w As Byte
  Dim y As Byte, x As Byte, yy As Byte, xx As Byte, ii As Byte, iii As Byte
  Dim hg(8) As Byte, hr(8) As Byte, hb(8) As Byte
  
If onoff = 1 Then nyuryokujyun (g)
があるためです。
nyuryokujyun (g)で新に座標が作り直されてしまうからです。
問題配置は一切無視して最も早く解ける方法で座標をつくることがnyuryokujyun (g)の任務であるからです。

座標を復元ためには、
    md = 2
    f (0)
で座標が壊される前に座標の複写をしておくことが必要となりますので、
Dim ciz(80) As Byte, cjz(80) As Byte
といったグローバル配列を用意しておくとよいでしょう。
壊される前に複写して、そこから座標を復元するのです。

もちろん、ヒント数が27以下のときと28以上の場合分けが必要になります。

さあ、皆さん数独自動生成アプリVer.1を完成させましょう。
0981


第5話へ 第7話へ


トップへ