Class: XWing

Inherits:
Technique show all
Defined in:
app/utils/XWing.rb

Overview

Technique X-wing.

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Technique

#combienEtape, #etape

Class Method Details

.creerObject

Constructeur de la classe SCell

Returns:

  • Une instance de la classe SCell



21
22
23
# File 'app/utils/XWing.rb', line 21

def XWing.creer()
	new()
end

Instance Method Details

#cptIndice(lincol, i) ⇒ Object

Compte le nombre d'indices

Parameters:

  • lincol

    The lincol

  • i

Returns:

  • compteurS



49
50
51
52
53
54
55
56
57
58
59
# File 'app/utils/XWing.rb', line 49

def cptIndice(lincol, i)
	
	cpt = 0

	lincol.each do |elem|
		if( elem[i.to_s] == true )
			cpt += 1
		end
	end
	return cpt
end

#findLineForIndice(i) ⇒ Object

Recherche une ligne qui remplit la condition suivante : que seulement 2 cases sur les 9 aient un indice commun que les autres n'ont pas.

Returns:

  • res une liste de 2 lignes qui remplissent les conditions pour le même indice, nil sinon.



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'app/utils/XWing.rb', line 69

def findLineForIndice(i)

	res = Array.new()

	@grilleIndice.each_with_index do |line, n|
		if (cptIndice(line, i) == 2)
			res.push(n)
		end
	end
	if(res.size() >= 2)
		puts 'res : '+res.to_s+' * * * * * '+i.to_s
		return [res, i]
	end

	return nil
end

#indexIndice(ligne, indice) ⇒ Object

Cherche les emplacements d'un même indice dans une ligne (numéro de colone)

Returns:

  • index une liste des numéros de colone



93
94
95
96
97
98
99
100
101
102
103
104
# File 'app/utils/XWing.rb', line 93

def indexIndice(ligne, indice)
	index = Array.new()
	
	@grilleIndice.each do |line|
		line.each_with_index do |elem, n|
			if(elem[indice.to_s] == true)
				index.push(n)
			end
		end
	end
	return index
end

#isSquare(lignea, ligneb, indice) ⇒ Object

Vérifie que les indices aux lignes trouvées forment un rectangle.

Parameters:

  • lignea

    et ligneb des numero de ligne et

  • indice

    Le nombre recherché.

Returns:

  • true si cela donne un carré, nil sinon.



116
117
118
119
120
121
122
123
124
125
126
127
# File 'app/utils/XWing.rb', line 116

def isSquare(lignea, ligneb, indice)
	couplea = indexIndice(lignea, indice)
	coupleb = indexIndice(ligneb, indice)
	
	puts "aie aie aie"
	puts "couple a : "+couplea.to_s+"   ****"
	puts coupleb
	if (couplea == coupleb)
		return couplea
	end
	return nil
end

#rotation(grille) ⇒ Object

Retourne la grille

Parameters:

  • grille

    The grille

Returns:

  • la grille



32
33
34
35
36
37
38
39
# File 'app/utils/XWing.rb', line 32

def rotation(grille)
	res = Array.new()

	0.upto(8) do |n|
		res.push(ligne(grille, n))
	end
	return res
end

#solution(grille) ⇒ Object

Recherche une solution pour la technique utilisée

Parameters:

  • grille

    La grille

Returns:

  • Les informations pour aider l'utilisateur, ou nul si la méthode ne trouve rien



139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
# File 'app/utils/XWing.rb', line 139

def solution(grille)

	@grilleIndice = indice(grille)

	col = Array.new()
	line = Array.new()
	candidat = Array.new()


	1.upto(9) do |i|
		candidat = findLineForIndice(i)


		if(candidat != nil)
			
puts candidat
			col = isSquare(candidat[0][0], candidat[0][1], candidat[1])

			if(col != nil)
				puts "col : "+col.to_s
				puts "IT IS SQUARE !!!!"
				return true
			end
		end
	end


	puts line
	puts '*******'
	puts col
	puts '*******'
	
	0.upto(8){ |x|
		#puts @grilleIndice[x].to_s.gsub('nil', ' ')
	}

	
	return nil
end