Class: Generateur
- Inherits:
-
Object
- Object
- Generateur
- Defined in:
- app/utils/Generateur.rb
Overview
Génération de grille de Sudoku (création de difficulté)
Instance Attribute Summary collapse
-
#difficulte ⇒ Object
readonly
Returns the value of attribute difficulte.
-
#grid ⇒ Object
readonly
Returns the value of attribute grid.
Instance Method Summary collapse
-
#complexifier ⇒ Object
Retire des cases pour créer la difficulté.
-
#convert ⇒ Object
Convertit la grille de list.
-
#generer ⇒ Object
Génère une grille avec une difficulté variable.
-
#initialize(difficulte) ⇒ Generateur
constructor
Initialisation.
-
#switchcol(a, b) ⇒ Object
Echange la place de 2 colonnes.
-
#switchrow(a, b) ⇒ Object
Echange la place de 2 lignes.
Constructor Details
#initialize(difficulte) ⇒ Generateur
Initialisation
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'app/utils/Generateur.rb', line 23 def initialize(difficulte) @grid = Array.new() ligne = Array.new() @difficulte = difficulte 9.times do val = 1+rand(9) while(ligne.include? val) val = 1+rand(9) end ligne.unshift(val) end 3.times do 3.times do @grid.push(ligne.clone) 3.times do ligne.unshift(ligne.pop()) end end ligne.unshift(ligne.pop()) end 4.times do a = rand(3) b = rand(3) while(a == b) b = rand(3) end switchrow(a, b) switchcol(a, b) switchrow(5-a, 5-b) switchcol(8-a, 8-b) end complexifier() end |
Instance Attribute Details
#difficulte ⇒ Object (readonly)
Returns the value of attribute difficulte
16 17 18 |
# File 'app/utils/Generateur.rb', line 16 def difficulte @difficulte end |
#grid ⇒ Object (readonly)
Returns the value of attribute grid
16 17 18 |
# File 'app/utils/Generateur.rb', line 16 def grid @grid end |
Instance Method Details
#complexifier ⇒ Object
Retire des cases pour créer la difficulté.
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'app/utils/Generateur.rb', line 96 def complexifier() present = Array.new 9.times do val = 1+rand(9) while(present.include? val) val = 1+rand(9) end present.unshift(val) end 1.upto(@difficulte) do victime = present.pop() @grid.each do |a| a.each_with_index do |c, index| if c == victime a[index] = nil end end end end nbkill = 0 @grid.each do |a| nbkill += a.count(nil) end nbkill = (81-nbkill)* @difficulte *0.1 0.upto(nbkill) do x = rand(9) y = rand(9) while(@grid[x][y] == nil) x = rand(9) y = rand(9) end @grid[x][y] = nil end return @grid end |
#convert ⇒ Object
Convertit la grille de list
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'app/utils/Generateur.rb', line 144 def convert() res = Array.new() ligne = Array.new() @grid.each do |line| line.each do |elem| val = Hash.new() val["value"] = elem val["editable"] = false if(elem == nil) val["editable"] = true end ligne.push(val.clone()) end res.push(ligne.clone()) ligne = Array.new() end return res end |
#generer ⇒ Object
Génère une grille avec une difficulté variable
67 68 69 |
# File 'app/utils/Generateur.rb', line 67 def generer() self.convert() end |
#switchcol(a, b) ⇒ Object
Echange la place de 2 colonnes.
87 88 89 |
# File 'app/utils/Generateur.rb', line 87 def switchcol(a, b) @grid.map {|e| e[a], e[b] = e[b], e[a]} end |
#switchrow(a, b) ⇒ Object
Echange la place de 2 lignes.
77 78 79 |
# File 'app/utils/Generateur.rb', line 77 def switchrow(a, b) @grid[a], @grid[b] = @grid[b], @grid[a] end |