Class: SCandidate

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

Overview

Classe pour la technique 'Single Candidate'.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.creerObject

Constructeur de la classe SCandidate

Returns:

  • Une instance de la classe SCandidate



16
17
18
# File 'app/utils/SCandidate.rb', line 16

def SCandidate.creer()
	new()
end

Instance Method Details

#combienEtapeObject

Retourne le nombre d'étapes pour faire la technique

Returns:

  • Le nombre d'étapes



64
65
66
# File 'app/utils/SCandidate.rb', line 64

def combienEtape()
	return 2
end

#etape(n) ⇒ Object

Retourne les étapes pour faire la technique

Parameters:

  • n

    Le numéro de la technique

Returns:

  • Un texte expliquant l'étape sinon nil



75
76
77
78
79
80
81
82
83
84
85
# File 'app/utils/SCandidate.rb', line 75

def etape(n)

	case(n)
	when 1
		return "Bienvenue sur l'explication de la technique "+self.class.to_s+"."
	when 2
		return "Recherchez les candidats possibles pour chaque case d'une ligne/colonne. Remarquez que dans certaines, un candidat n'est possible que dans une seule case de la ligne/colonne."
	end
	
	return nil
end

#solution(grille) ⇒ Object

Recherche une solution pour la technique utilisée

Parameters:

  • grille

    La grille

Returns:

  • res, les informations pour aider l'utilisateur ou nil si la méthode ne trouve rien



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
# File 'app/utils/SCandidate.rb', line 27

def solution(grille)
	grilleIndice = indice(grille)

	[1,2,3,4,5,6,7,8,9].sort_by{rand}.each { |numero|
		grilleIndice.sort_by{rand}.each_with_index { |col,x|
			cpt=0
			ytmp=0
				col.sort_by{rand}.each_with_index { |c,y|
					if c[numero.to_s] then
						cpt +=1
						ytmp = y
					end
				}
				if cpt == 1 then return [x,ytmp,numero.to_s] end
		}

		[0,1,2,3,4,5,6,7,8].sort_by{rand}.each { |y|
			cpt=0
			xtmp=0
			[0,1,2,3,4,5,6,7,8].sort_by{rand}.each { |x|
				if grilleIndice[x][y][numero.to_s] then
					cpt +=1
					xtmp = x
				end
			}
			if cpt == 1 then return [xtmp,y,numero.to_s] end
		}
	}

	return nil
end