Module: Sudoku

Defined in:
lib/sudoku.rb,
lib/sudoku/grid.rb,
lib/sudoku/logic.rb,
lib/sudoku/solver.rb,
lib/sudoku/version.rb,
lib/sudoku/generator.rb,
ext/sudoku.c

Defined Under Namespace

Modules: Generator, Grid, Logic, Solver Classes: MalformedSutxtError, NotCompatibleError, S3, S4_15, Sn

Constant Summary collapse

ADAPTERS =

Adaptateurs de base

[
  [3, S3],
  [4..15, S4_15],
  [0, Sn]
]
VERSION =
"0.1.4"

Class Method Summary collapse

Class Method Details

.best_class_for(n) ⇒ Class Also known as: []

Renvoie la classe de la première implémentation dont la zone comprend n

Parameters:

  • n (Fixnum)

    La base du sudoku

Returns:

  • (Class)

    La première classe dont la zone comprend n, ou la première classe donc la zone est 0 (zone par défaut)



106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/sudoku.rb', line 106

def best_class_for n
  n = n.to_i
  ADAPTERS.each do |ad|
    zone    = ad[0]
    adapter = ad[1]
    
    return adapter if zone == 0
    
    case n
    when zone 
      return adapter
    end
  end
end

.best_grid_for(n = 3) ⇒ Grid Also known as: new

Renvoie une instance de la meilleure implémentation pour un sudoku de base n

Parameters:

  • n (Fixnum) (defaults to: 3)

    La base du sudoku

Returns:



133
134
135
136
# File 'lib/sudoku.rb', line 133

def best_grid_for n=3
  n = n.to_i
  best_class_for(n).new n
end

.define_class_for(zone, adapter) ⇒ Object Also known as: []=

Ajoute un adapteur pour la zone definie.

Parameters:

  • zone (Range, Fixnum)

    La zone de validité de l’adapteur

  • adapter (Class)

    L’adaptateur à ajouter



125
126
127
# File 'lib/sudoku.rb', line 125

def define_class_for zone, adapter
  ADAPTERS.unshift [zone, adapter]
end

.parse(str) ⇒ Grid

Renvoie un nouveau Sudoku a partir de la chaine donnee

Parameters:

  • str (String)

    Une chaine Sutxt

Returns:

  • (Grid)

    Un sudoku rempli avec les données Sutxt



142
143
144
145
146
147
148
149
# File 'lib/sudoku.rb', line 142

def parse str
  unless str =~ /(\d+):(.+);/
    raise MalformedSutxtError, "It doesn't seem to be a sutxt line..."
  end

  base = $1.to_i
  return best_grid_for(base).load(str)
end