class Board

Gestion de cases dans une planche de Sudoku

Variables d'instance

Attributes

bMakeError[R]
bUseSolution[R]
difficulty[RW]
time[RW]

Public Class Methods

creer(numbers=nil) click to toggle source

Représentation d'une planche

  • Arguments :

    • numbers -> Liste des numbre a mettre dans la planche

  • Returns

  • Exemple

    planche_base="
    0 2 3   4 5 6   7 8 9
    4 5 6   7 8 9   1 2 3
    7 8 9   1 2 3   4 5 6
    
    2 1 4   3 6 5   8 9 7
    3 6 5   8 9 7   2 1 4
    8 9 7   2 1 4   3 6 5
    
    5 3 1   6 4 2   9 7 8
    6 4 2   9 7 8   5 3 1
    9 7 8   5 3 1   6 4 2
    "
    x = Board.creer(planche_base.delete("\s|\n")
      .split("").reverse.map(&:to_i))
    print x
    
# File class/board_class.rb, line 92
def self.creer(numbers=nil)
  new(numbers)
end

Public Instance Methods

==(other) click to toggle source

Méthode de comparaison entre différente instance de Board

  • Arguments :

    • other -> autre Board a compare

  • Returns

    • true/false

# File class/board_class.rb, line 104
def ==(other)
  each_with_coord do |cell,i,j|
    if cell!=other.cellAt(i,j)
      return false
    end
  end
  return true
end
cellAt(i,j) click to toggle source

Obtenir la Cell a la place coordonne

  • Arguments :

    • i -> la ligne

    • j -> la colonne

  • Returns

# File class/board_class.rb, line 119
def cellAt(i,j)
    @rows[i][j]
end
each_with_coord() { |rows[j], i, j, rows[j].box| ... } click to toggle source

iterateur qui loop sur les cases avec comme information la case, ligne, colonne, boxe

# File class/board_class.rb, line 125
def each_with_coord
  9.times do |i|
    9.times do |j|
      yield @rows[i][j], i, j, @rows[i][j].box
    end
  end
end
excluded(cell) click to toggle source

Retourne toutes les valeurs qu'une Cell Ne-peut-pas prendre.
Valeur-de-la-Cell-exclu

  • Arguments :

    • cell -> Cell du puzzle

  • Returns

    • Array of numbers

# File class/board_class.rb, line 180
def excluded(cell)
  excluded = linked(cell).inject([]) do |result, cellloop|
    result << cellloop.value if not cellloop.vide?
    result
  end
  excluded.uniq - [cell.value]
end
linked(cell) click to toggle source

Retourne toutes les Cell sur la meme ligne colonne et boxe d'une Cell.

  • Arguments :

    • cell -> Cell du puzzle

  • Returns

# File class/board_class.rb, line 170
def linked(cell)
  @rows[cell.row] + @columns[cell.col] + @boxes[cell.box]
end
possibles(cell) click to toggle source

Retourne toutes les valeurs qu'une Cell peut prendre.

  • Arguments :

    • cell -> Cell du puzzle

  • Returns

    • Array of numbers

# File class/board_class.rb, line 193
def possibles(cell)
  ((1..9).to_a - excluded(cell))
end
sameCellsValue(cellArg) click to toggle source

Obtenir les Cell de meme value dans la planche

  • Arguments

    • Cell -> cell (Valeur)

  • Returns

# File class/board_class.rb, line 158
def sameCellsValue(cellArg)
  @cells.inject([]) do |result, cell|
    result << cell if cell.value == cellArg.value
    result
  end
end
swapColumns(index_columns1, index_columns2, force=false) click to toggle source

Echange 2 colonnes d'une planche.

  • Arguments :

    • index_columns1 -> num de la colonne

    • index_columns2 -> num de la colonne2

    • force -> si true autorise les swap entre boxes

  • Returns

# File class/board_class.rb, line 216
def swapColumns(index_columns1, index_columns2, force=false)
  swap(index_columns1, index_columns2, @columns, force)
end
swapRow(index_row1, index_row2, force=false) click to toggle source

Echange 2 lignes d'une planche.

  • Arguments :

    • index_row1 -> num de la ligne

    • index_row2 -> num de la ligne2

    • force -> si true autorise les swap entre boxes

  • Returns

# File class/board_class.rb, line 204
def swapRow(index_row1, index_row2, force=false)
  swap(index_row1, index_row2, @rows, force)
end
unusedCells() click to toggle source

Obtenir les Cell qui sont vide.

  • Returns

# File class/board_class.rb, line 146
def unusedCells
  @cells.inject([]) do |result, cell|
    result << cell if cell.vide?
    result
  end
end
usedCells() click to toggle source

Obtenir les Cell qui sont défini.

  • Returns

# File class/board_class.rb, line 136
def usedCells
  @cells.inject([]) do |result, cell|
    result << cell if not cell.vide?
    result
  end
end