2020年2月13日木曜日

開発環境

入門Goプログラミング (Nathan Youngman(著)、Roger Peppé(著)、吉川 邦夫(監修, 翻訳)、翔泳社)のUNIT 6(ネズミの穴を下って)、LESSON 29(チャレンジ:数独のルール)の解答を求めてみる。

コード

package main

import (
 "errors"
 "fmt"
 "math/rand"
 "time"
)

var (
 errCell        = errors.New("不正なマス目")
 errNum         = errors.New("不正な数")
 errCellDefault = errors.New("初期値が設定されている")
)

const (
 rows, colums = 9, 9
)

type cell struct {
 n     int8
 fixed bool
}

type sudoku [rows][colums]cell

func newSudoku(a [rows][colums]int8) sudoku {
 t := [rows][colums]cell{}
 for i, row := range a {
  for j, m := range row {
   t[i][j] = cell{n: m, fixed: m != 0}
  }
 }
 return sudoku(t)
}
func validCell(row, col int8) bool {
 return 1 <= row && row <= 9 && 1 <= col && col <= 9
}
func validNum(n int8) bool {
 return 1 <= n && n <= 9
}
func (s sudoku) String() string {
 t := ""
 for _, row := range s {
  t += "|"
  for _, cell := range row {
   t += fmt.Sprintf("%v|", cell.n)
  }
  t += "\n"
 }
 return t
}
func (s *sudoku) set(row, col, m int8) error {
 if !validCell(row, col) {
  return errCell
 }
 if !validNum(m) {
  return errNum
 }
 row--
 col--
 if s[row][col].fixed {
  return errCellDefault
 }
 for _, cell := range s[row] {
  if cell.n == m {
   return errors.New("同じ行に既にその数があります")
  }
 }
 for _, row := range s {
  if row[col].n == m {
   return errors.New("同じ列に既にその数があります")
  }
 }
 rowStart := ((row + 9) - row%3) % 9
 colStart := ((col + 9) - col%3) % 9
 for i := rowStart; i < rowStart+3; i++ {
  for j := colStart; j < colStart+3; j++ {
   if s[i][j].n == m {
    return errors.New("同じブロックに既にその数があります")
   }
  }
 }
 s[row][col] = cell{n: m, fixed: false}
 return nil
}
func (s *sudoku) clear(row, col int8) error {
 if !validCell(row, col) {
  return errCell
 }
 row--
 col--
 if s[row][col].fixed {
  return errCellDefault
 }
 s[row][col].n = 0
 return nil
}
func main() {
 rand.Seed(time.Now().UnixNano())

 s := newSudoku([rows][colums]int8{
  {5, 3, 0, 0, 7, 0, 0, 0, 0},
  {6, 0, 0, 1, 9, 5, 0, 0, 0},
  {0, 9, 8, 0, 0, 0, 0, 6, 0},
  {8, 0, 0, 0, 6, 0, 0, 0, 3},
  {4, 0, 0, 8, 0, 3, 0, 0, 1},
  {7, 0, 0, 0, 2, 0, 0, 0, 6},
  {0, 6, 0, 0, 0, 0, 2, 8, 0},
  {0, 0, 0, 4, 1, 9, 0, 0, 5},
  {0, 0, 0, 0, 8, 0, 0, 7, 9},
 })
 fmt.Println(s)
 i := 0
 for i < 20 {
  row := int8(rand.Intn(11))
  col := int8(rand.Intn(11))
  var err error
  switch rand.Intn(2) {
  case 0:
   m := int8(rand.Intn(11))
   fmt.Printf("書き込もうとしている数 %v ", m)
   err = s.set(row, col, m)
  default:
   fmt.Print("消去 ")
   err = s.clear(row, col)
  }
  fmt.Printf("マス目(%v, %v)\n", row, col)
  if err != nil {
   fmt.Println(err)
  } else {
   fmt.Println(s)
   i++
  }
 }
}

入出力結果(Zsh、PowerShell、Terminal)

% go run ./sudoku.go
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|0|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

消去 マス目(4, 5)
初期値が設定されている
書き込もうとしている数 5 マス目(0, 0)
不正なマス目
書き込もうとしている数 4 マス目(3, 7)
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|4|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

書き込もうとしている数 3 マス目(2, 5)
初期値が設定されている
消去 マス目(4, 6)
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|4|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

消去 マス目(7, 2)
初期値が設定されている
消去 マス目(1, 3)
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|4|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

書き込もうとしている数 9 マス目(10, 0)
不正なマス目
書き込もうとしている数 5 マス目(7, 1)
同じ列に既にその数があります
消去 マス目(5, 9)
初期値が設定されている
消去 マス目(9, 1)
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|4|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

消去 マス目(5, 7)
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|4|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

消去 マス目(10, 10)
不正なマス目
消去 マス目(3, 10)
不正なマス目
消去 マス目(5, 9)
初期値が設定されている
消去 マス目(3, 9)
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|4|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

消去 マス目(1, 10)
不正なマス目
書き込もうとしている数 6 マス目(6, 5)
初期値が設定されている
消去 マス目(7, 7)
初期値が設定されている
書き込もうとしている数 1 マス目(8, 8)
同じ行に既にその数があります
消去 マス目(0, 10)
不正なマス目
書き込もうとしている数 8 マス目(9, 3)
同じ行に既にその数があります
書き込もうとしている数 0 マス目(1, 10)
不正なマス目
消去 マス目(3, 1)
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|4|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

消去 マス目(6, 4)
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|4|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

消去 マス目(3, 4)
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|4|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

書き込もうとしている数 7 マス目(4, 3)
同じブロックに既にその数があります
書き込もうとしている数 9 マス目(9, 1)
同じ行に既にその数があります
消去 マス目(6, 1)
初期値が設定されている
書き込もうとしている数 9 マス目(9, 8)
初期値が設定されている
書き込もうとしている数 2 マス目(3, 8)
初期値が設定されている
消去 マス目(3, 9)
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|4|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

書き込もうとしている数 9 マス目(2, 3)
同じ行に既にその数があります
消去 マス目(7, 3)
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|4|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

消去 マス目(10, 5)
不正なマス目
書き込もうとしている数 0 マス目(6, 7)
不正な数
書き込もうとしている数 9 マス目(9, 8)
初期値が設定されている
消去 マス目(6, 9)
初期値が設定されている
書き込もうとしている数 0 マス目(7, 6)
不正な数
消去 マス目(10, 4)
不正なマス目
書き込もうとしている数 0 マス目(2, 6)
不正な数
書き込もうとしている数 5 マス目(2, 8)
同じ行に既にその数があります
書き込もうとしている数 5 マス目(9, 8)
初期値が設定されている
書き込もうとしている数 8 マス目(2, 5)
初期値が設定されている
書き込もうとしている数 9 マス目(6, 8)
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|4|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|9|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

書き込もうとしている数 8 マス目(8, 7)
同じブロックに既にその数があります
書き込もうとしている数 3 マス目(5, 5)
同じ行に既にその数があります
書き込もうとしている数 5 マス目(4, 2)
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|4|6|0|
|8|5|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|9|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

書き込もうとしている数 6 マス目(8, 0)
不正なマス目
書き込もうとしている数 1 マス目(3, 5)
同じ列に既にその数があります
書き込もうとしている数 3 マス目(1, 10)
不正なマス目
書き込もうとしている数 8 マス目(4, 10)
不正なマス目
書き込もうとしている数 7 マス目(8, 5)
初期値が設定されている
消去 マス目(5, 5)
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|4|6|0|
|8|5|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|9|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

消去 マス目(5, 2)
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|4|6|0|
|8|5|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|9|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

書き込もうとしている数 3 マス目(6, 1)
初期値が設定されている
書き込もうとしている数 3 マス目(5, 6)
初期値が設定されている
書き込もうとしている数 5 マス目(0, 10)
不正なマス目
書き込もうとしている数 2 マス目(7, 9)
同じ行に既にその数があります
消去 マス目(1, 5)
初期値が設定されている
書き込もうとしている数 4 マス目(8, 6)
初期値が設定されている
書き込もうとしている数 3 マス目(4, 4)
同じ行に既にその数があります
書き込もうとしている数 9 マス目(3, 6)
同じ行に既にその数があります
消去 マス目(7, 5)
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|4|6|0|
|8|5|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|9|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

消去 マス目(3, 6)
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|4|6|0|
|8|5|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|9|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

書き込もうとしている数 9 マス目(9, 10)
不正なマス目
消去 マス目(4, 4)
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|4|6|0|
|8|5|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|9|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

書き込もうとしている数 5 マス目(6, 9)
初期値が設定されている
書き込もうとしている数 5 マス目(3, 4)
同じブロックに既にその数があります
書き込もうとしている数 8 マス目(4, 7)
同じ行に既にその数があります
書き込もうとしている数 2 マス目(8, 7)
同じ列に既にその数があります
書き込もうとしている数 0 マス目(6, 8)
不正な数
書き込もうとしている数 6 マス目(8, 3)
同じブロックに既にその数があります
書き込もうとしている数 2 マス目(10, 5)
不正なマス目
書き込もうとしている数 1 マス目(2, 3)
同じ行に既にその数があります
消去 マス目(0, 8)
不正なマス目
消去 マス目(8, 0)
不正なマス目
書き込もうとしている数 7 マス目(2, 8)
同じ列に既にその数があります
書き込もうとしている数 7 マス目(10, 5)
不正なマス目
消去 マス目(0, 1)
不正なマス目
消去 マス目(10, 1)
不正なマス目
消去 マス目(3, 10)
不正なマス目
書き込もうとしている数 4 マス目(2, 1)
初期値が設定されている
書き込もうとしている数 4 マス目(8, 1)
同じ行に既にその数があります
消去 マス目(10, 2)
不正なマス目
消去 マス目(1, 4)
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|4|6|0|
|8|5|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|9|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

消去 マス目(6, 9)
初期値が設定されている
書き込もうとしている数 4 マス目(7, 7)
初期値が設定されている
書き込もうとしている数 4 マス目(5, 5)
同じ行に既にその数があります
書き込もうとしている数 2 マス目(1, 4)
|5|3|0|2|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|4|6|0|
|8|5|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|9|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

% go run ./sudoku.go
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|0|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

書き込もうとしている数 9 マス目(5, 6)
初期値が設定されている
書き込もうとしている数 7 マス目(9, 6)
同じ行に既にその数があります
書き込もうとしている数 9 マス目(8, 6)
初期値が設定されている
消去 マス目(6, 8)
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|0|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

消去 マス目(7, 7)
初期値が設定されている
消去 マス目(7, 8)
初期値が設定されている
書き込もうとしている数 10 マス目(10, 10)
不正なマス目
消去 マス目(4, 4)
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|0|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

消去 マス目(5, 8)
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|0|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

消去 マス目(9, 1)
|5|3|0|0|7|0|0|0|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|0|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

書き込もうとしている数 6 マス目(1, 2)
初期値が設定されている
消去 マス目(3, 3)
初期値が設定されている
書き込もうとしている数 2 マス目(2, 5)
初期値が設定されている
書き込もうとしている数 2 マス目(1, 8)
|5|3|0|0|7|0|0|2|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|0|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

書き込もうとしている数 6 マス目(3, 8)
初期値が設定されている
消去 マス目(1, 4)
|5|3|0|0|7|0|0|2|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|0|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

書き込もうとしている数 4 マス目(2, 5)
初期値が設定されている
消去 マス目(2, 1)
初期値が設定されている
書き込もうとしている数 8 マス目(8, 0)
不正なマス目
書き込もうとしている数 9 マス目(9, 9)
初期値が設定されている
消去 マス目(3, 5)
|5|3|0|0|7|0|0|2|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|0|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

消去 マス目(2, 0)
不正なマス目
消去 マス目(6, 7)
|5|3|0|0|7|0|0|2|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|0|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|0|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

書き込もうとしている数 0 マス目(9, 5)
不正な数
書き込もうとしている数 9 マス目(9, 0)
不正なマス目
消去 マス目(10, 5)
不正なマス目
消去 マス目(9, 9)
初期値が設定されている
書き込もうとしている数 4 マス目(4, 5)
初期値が設定されている
書き込もうとしている数 1 マス目(6, 6)
|5|3|0|0|7|0|0|2|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|0|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|1|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

書き込もうとしている数 7 マス目(10, 7)
不正なマス目
消去 マス目(5, 4)
初期値が設定されている
消去 マス目(1, 7)
|5|3|0|0|7|0|0|2|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|0|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|1|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

消去 マス目(2, 10)
不正なマス目
書き込もうとしている数 1 マス目(5, 6)
初期値が設定されている
消去 マス目(5, 7)
|5|3|0|0|7|0|0|2|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|0|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|1|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

書き込もうとしている数 5 マス目(1, 0)
不正なマス目
消去 マス目(10, 2)
不正なマス目
消去 マス目(1, 7)
|5|3|0|0|7|0|0|2|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|0|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|1|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|0|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

書き込もうとしている数 3 マス目(8, 3)
|5|3|0|0|7|0|0|2|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|0|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|1|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|3|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

消去 マス目(3, 1)
|5|3|0|0|7|0|0|2|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|0|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|1|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|3|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

書き込もうとしている数 10 マス目(2, 6)
不正な数
消去 マス目(1, 1)
初期値が設定されている
書き込もうとしている数 6 マス目(9, 3)
同じブロックに既にその数があります
書き込もうとしている数 0 マス目(3, 8)
不正な数
消去 マス目(9, 5)
初期値が設定されている
書き込もうとしている数 5 マス目(10, 7)
不正なマス目
消去 マス目(2, 0)
不正なマス目
書き込もうとしている数 7 マス目(5, 5)
同じ列に既にその数があります
消去 マス目(5, 10)
不正なマス目
消去 マス目(8, 4)
初期値が設定されている
書き込もうとしている数 8 マス目(3, 3)
初期値が設定されている
書き込もうとしている数 4 マス目(7, 5)
同じブロックに既にその数があります
消去 マス目(0, 8)
不正なマス目
消去 マス目(10, 6)
不正なマス目
消去 マス目(4, 2)
|5|3|0|0|7|0|0|2|0|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|0|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|1|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|3|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

消去 マス目(3, 3)
初期値が設定されている
書き込もうとしている数 4 マス目(1, 9)
|5|3|0|0|7|0|0|2|4|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|0|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|1|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|3|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

書き込もうとしている数 0 マス目(0, 9)
不正なマス目
書き込もうとしている数 6 マス目(10, 2)
不正なマス目
書き込もうとしている数 3 マス目(6, 10)
不正なマス目
書き込もうとしている数 5 マス目(7, 6)
同じ列に既にその数があります
消去 マス目(9, 6)
|5|3|0|0|7|0|0|2|4|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|0|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|1|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|3|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

書き込もうとしている数 0 マス目(5, 8)
不正な数
書き込もうとしている数 10 マス目(10, 0)
不正なマス目
書き込もうとしている数 3 マス目(4, 10)
不正なマス目
消去 マス目(3, 7)
|5|3|0|0|7|0|0|2|4|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|0|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|1|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|3|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

消去 マス目(3, 9)
|5|3|0|0|7|0|0|2|4|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|0|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|1|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|3|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

書き込もうとしている数 8 マス目(3, 4)
同じ行に既にその数があります
書き込もうとしている数 6 マス目(4, 10)
不正なマス目
書き込もうとしている数 9 マス目(10, 10)
不正なマス目
書き込もうとしている数 8 マス目(7, 4)
同じ行に既にその数があります
書き込もうとしている数 8 マス目(4, 3)
同じ行に既にその数があります
書き込もうとしている数 0 マス目(7, 0)
不正なマス目
書き込もうとしている数 10 マス目(8, 6)
不正な数
消去 マス目(1, 10)
不正なマス目
消去 マス目(6, 10)
不正なマス目
消去 マス目(2, 4)
初期値が設定されている
書き込もうとしている数 4 マス目(9, 6)
同じブロックに既にその数があります
書き込もうとしている数 6 マス目(9, 1)
同じ列に既にその数があります
書き込もうとしている数 4 マス目(3, 8)
初期値が設定されている
書き込もうとしている数 10 マス目(1, 0)
不正なマス目
消去 マス目(8, 0)
不正なマス目
消去 マス目(6, 3)
|5|3|0|0|7|0|0|2|4|
|6|0|0|1|9|5|0|0|0|
|0|9|8|0|0|0|0|6|0|
|8|0|0|0|6|0|0|0|3|
|4|0|0|8|0|3|0|0|1|
|7|0|0|0|2|1|0|0|6|
|0|6|0|0|0|0|2|8|0|
|0|0|3|4|1|9|0|0|5|
|0|0|0|0|8|0|0|7|9|

% 

0 コメント:

コメントを投稿