第5講 第4講のプログラムエラー原因探索各アイテムの解説
第7話 全体リスト構造解析の一致・不一致を検証する検証Functionプロシージャkn
2つの全体リスト構造解析が一致しているか、
一致していないかを調べるには1つの困難があります。
それは、
r
2つの全体リスト構造解析は方式が異なるために、
有効範囲内に限定しても、
数字の順番が異なっているということです。
Total方式は小さい順に並んでいるのに対して、
Ver.1方式は、順番がアットランダムに思えるほど、
順番が異なっています。
2重ランダムにする方が、
自然な数独が早くできるだろうという判断から、
意図してとった方法ですが、
比較するときに困難があります。
コードを掲載しますので、その困難をいかに乗り越えたか考えて下さい。
Function kn()
  Dim i As Byte, j As Byte, k As Byte, l As Byte, w As Byte
'  For i = 0 To n_1
'    For j = 0 To n_1
'      If mx(i, j) <> ccmx(i, j) - 1 Then
'        kn = 0
'        Exit Function
'      End If
'    Next
'  Next
  Dim lst(8, 8, 8) As Byte
  For i = 0 To n_1
    For j = 0 To n_1
      For k = 0 To n_1
        lst(i, j, k) = rlst(i, j, k)
      Next
    Next
  Next
  For i = 0 To n_1
    For j = 0 To n_1
      For k = 0 To mx(i, j)
        If mx(i, j) > 0 Then
          For l = 0 To mx(i, j) - 1
            If lst(i, j, l) > lst(i, j, l + 1) Then
              w = lst(i, j, l)
              lst(i, j, l) = lst(i, j, l + 1)
              lst(i, j, l + 1) = w
            End If
          Next
        End If
      Next
    Next
  Next

  For i = 0 To n_1
    For j = 0 To n_1
      If p(i, j) = 0 Then
        For k = 0 To n_1
          Cells(45 + i, 2 + 10 * j + k) = lst(i, j, k)
        Next
        For k = 0 To ccmx(i, j) - 1
          '以下は、マクロの記録から学んだもの
          Cells(45 + i, 2 + 10 * j + k).Select
          With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent5
            .TintAndShade = 0
            .PatternTintAndShade = 0
          End With
          '以上は、マクロの記録から学んだもの
        Next
        For k = ccmx(i, j) To n_1
          '以下は、マクロの記録から学んだもの
          Cells(45 + i, 2 + 10 * j + k).Select
          With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent2
            .TintAndShade = 0.388845066682843
            .PatternTintAndShade = 0
          End With
          '以上は、マクロの記録から学んだもの
        Next
      Else
        For k = 0 To n_1
          Cells(45 + i, 2 + 10 * j + k) = "*"
        Next
      End If
    Next
  Next
  For i = 0 To n_1
    For j = 0 To n_1
      If p(i, j) = 0 Then
        For k = 0 To mx(i, j)
          If lst(i, j, k) <> ccrlst(i, j, k) Then
            Cells(45 + i, 2 + 10 * j + k).Select
            With Selection.Interior
              .Pattern = xlSolid
              .PatternColorIndex = xlAutomatic
              .Color = 255
              .TintAndShade = 0
              .PatternTintAndShade = 0
            End With
            Exit Function
          End If
        Next
      End If
    Next
  Next
  
  kn = 1
End Function



第6話へ 第8話へ
004

eclipse c++ 入門
魔方陣 数独(ナンプレ)で学ぶ VBA 入門
数独(ナンプレ)のシンプルな解き方・簡単な解法の研究
vc++講義へ
excel 2013 2010 2007 vba入門へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
専門用語なしの C言語 C++ 入門(Visual C++ 2010で学ぶ C言語 C++ 入門)
専門用語なしの excel vba マクロ 入門 2013 2010 2007 対応講義 第1部
eclipse java 入門へ
excel 2016 vba 入門へ
小学生からエンジニアまでのRuby入門へ
本サイトトップへ