-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path06_potraga_za_hintovima.js
131 lines (106 loc) · 4.67 KB
/
06_potraga_za_hintovima.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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
/* -------------------------------------------------------------------------- */
// Copyright (c) 2021. Nikola Vukićević
/* -------------------------------------------------------------------------- */
let DEBUG_PORUKE_FUNKCIJE = false;
/* ----- Pojedinačne tehnike - uključivanje / isključivanje ----------------- */
let PRETRAGA_JEDINI_KANDIDAT = true;
let PRETRAGA_SKRIVENI_SINGL = true;
let PRETRAGA_USMERENI_PAR = true;
let PRETRAGA_SKRIVENI_PAR = true;
let PRETRAGA_PREPOZNATI_PAR = true;
let PRETRAGA_PRISVAJAJUCI_PAR = true;
let PRETRAGA_PREPOZNATI_TRIPLET = true;
let PRETRAGA_X_WING = true;
let PRETRAGA_XY_WING = true;
let PRETRAGA_COLORING = true;
let potragaPodaci = {
lista: [ ] ,
indeksHinta: -1 ,
}
let INDEKS_HINTA = 0;
function dodavanjeUListuHintova(lista, hintovi) {
hintovi.forEach(hint => {
lista.push(hint);
});
}
function praznjenjeListeHintova(lista) {
while(lista.length > 0) {
lista.pop();
}
}
function skracivanjeListeHintova(lista_hintova) {
while(lista_hintova.length > 1) lista_hintova.pop();
}
function azuriranjeIndeksaZaHintove(lista_hintova) {
for(let i = 0; i < lista_hintova.length; i++) {
lista_hintova[i].indeks = i + 1;
}
}
function potragaZaHintovima(sudoku_tabela, lista_hintova, automatik, samo_prvi) {
/* ----- Telemetrija ---------------------------------------------------- */
// let T1 = performance.now();
/* ---------------------------------------------------------------------- */
let zaustavljanje = false;
let samoPrveDveKategorije = automatik && true;
let tabelaRadna = tabelaSnapshot(sudoku_tabela);
potragaPodaci.indeksHinta = 0;
if(automatik) azuriranjeKandidataOsnovno(tabelaRadna, automatik)
praznjenjeListeHintova(lista_hintova);
if(!zaustavljanje) {
let rezJediniKandidat = potragaZaHintovimaJediniKandidat(tabelaRadna, potragaPodaci);
dodavanjeUListuHintova(lista_hintova, rezJediniKandidat);
zaustavljanje = samo_prvi && lista_hintova.length > 0;
}
if(!zaustavljanje) {
let rezSkriveniSingl = potragaZaHintovimaSkriveniSingl(tabelaRadna, potragaPodaci);
dodavanjeUListuHintova(lista_hintova, rezSkriveniSingl);
zaustavljanje = samo_prvi && lista_hintova.length > 0;
}
if(!samoPrveDveKategorije && !zaustavljanje) {
let rezUsmereniPar = potragaZaHintovimaUsmereniPar(tabelaRadna, potragaPodaci);
dodavanjeUListuHintova(lista_hintova, rezUsmereniPar);
zaustavljanje = samo_prvi && lista_hintova.length > 0;
}
if(!samoPrveDveKategorije && !zaustavljanje) {
let rezSkriveniPar = potragaZaHintovimaSkriveniPar(tabelaRadna, potragaPodaci);
dodavanjeUListuHintova(lista_hintova, rezSkriveniPar);
zaustavljanje = samo_prvi && lista_hintova.length > 0;
}
if(!samoPrveDveKategorije && !zaustavljanje) {
let rezPrepoznatiPar = potragaZaHintovimaPrepoznatiPar(tabelaRadna, potragaPodaci);
dodavanjeUListuHintova(lista_hintova, rezPrepoznatiPar);
zaustavljanje = samo_prvi && lista_hintova.length > 0;
}
if(!samoPrveDveKategorije && !zaustavljanje) {
let rezPrisvajajuciPar = potragaZaHintovimaPrisvajajuciPar(tabelaRadna, potragaPodaci);
dodavanjeUListuHintova(lista_hintova, rezPrisvajajuciPar);
zaustavljanje = samo_prvi && lista_hintova.length > 0;
}
if(!samoPrveDveKategorije && !zaustavljanje) {
let rezPrepoznatiTriplet = potragaZaHintovimaPrepoznatiTriplet(tabelaRadna, potragaPodaci);
dodavanjeUListuHintova(lista_hintova, rezPrepoznatiTriplet);
zaustavljanje = samo_prvi && lista_hintova.length > 0;
}
if(!samoPrveDveKategorije && !zaustavljanje) {
let rezXWing = potragaZaHintovimaXWing(tabelaRadna, potragaPodaci);
dodavanjeUListuHintova(lista_hintova, rezXWing);
zaustavljanje = samo_prvi && lista_hintova.length > 0;
}
if(!samoPrveDveKategorije && !zaustavljanje) {
let rezXYWing = potragaZaHintovimaXYWing(tabelaRadna, potragaPodaci);
dodavanjeUListuHintova(lista_hintova, rezXYWing);
zaustavljanje = samo_prvi && lista_hintova.length > 0;
}
if(!samoPrveDveKategorije && !zaustavljanje) {
let rezColoring = potragaZaHintovimaColoring(tabelaRadna, potragaPodaci);
dodavanjeUListuHintova(lista_hintova, rezColoring);
zaustavljanje = samo_prvi && lista_hintova.length > 0;
}
if(samo_prvi) skracivanjeListeHintova(lista_hintova);
azuriranjeIndeksaZaHintove(lista_hintova);
/* ----- Telemetrija ---------------------------------------------------- */
// let T2 = performance.now();
// let ODZIV = T2 - T1;
// console.log(`Vreme obrade Potraga za hintovima: ${ODZIV}ms`);
/* ---------------------------------------------------------------------- */
}