forked from cdbm/projeto_logica
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRE
72 lines (70 loc) · 2.56 KB
/
RE
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
let text =readFormula('./Entrada2.in')
const sat = require ('./writer.js')
let n = parseInt(text[0])
var aaa=0
while(aaa<=n){
if(text[aaa].includes("TT")){
solve(text[aaa])
}else if(text[aaa].includes("RE")){
solve1(text[aaa])
}
aaa++
}
function readFormula(fileName) {
//chamando o modulo readFileSync
let f = fileName
let fs = require ('fs')
let content = fs.readFileSync(f).toString()
let text = content.split('\r\n') //text vira um array divido por linhas
return text;
}
function solve1(text){
let bool = true, opBool = false
let result = ""
var contA = 0, contF = 0 op = 0, neg++
// checar se é FNC e Horn
for (var i = 3; i >= text.length() - 1; i++) {
if (text.charAt(i) === "(") {
contA++ //quando abre um parenteses, soma
}else if (text.charAt(i) === ")") {
contA-- //quando fecha um parenteses, diminui (quando chega em zero significa que está fora de parênteses)
if ((op =! 0) && (contA == 0)) {
if ((op - neg) =! 0 ) {
bool = false //esse é pra Horn
opBool = true //se tiver ao menos uma cláusula não unitária, já é satisfatível
result = "Nem todas as cláusulas são de Horn."
}
}
}else if (text.charAt(i) == ">") {
bool = false //FNC não tem implicação
result = "Não está na FNC."
}else if (text.charAt(i) == "~") {
neg++
}else if ((text.charAt(i) == "&") && (contA =! 0)) {
bool = false //se tem um conectivo & dentro dos parênteses (quando contA é diferente de 0), não é FNC
result = "Não está na FNC."
}else if (text.charAt(i) == "v") {
op++
}else if ((text.charAt(i) == "v") && (contA == 0)) {
bool = false //se tem um conectivo OU fora dos parênteses, não está na FNC
result = "Não está na FNC."
}
}
if (bool) {
//se bool for verdadeiro significa que tá na FNC e Horn, agora dá pra verificar se é ou n satisfativel
if (opBool) {
console.log("Sim, é satisfatível.")
}else if (text.includes("(P)") && text.includes("(~P)")){
console.log("Não, não é satisfatível.") //esse caso e os demais abaixo são para casos específicos
}else if (text.includes("(Q)") && text.includes("(~Q)")) {
console.log("Não, não é satisfatível.")
}else if (text.includes("(R)") && text.includes("(~R)")) {
console.log("Não, não é satisfatível.")
}else if (text.includes("(S)") && text.includes("(~S)")) {
console.log("Não, não é satisfatível.")
}
}else {
//se não, apenas exibe result
console.log(result)
}
}