-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathFormulaReader.java
More file actions
57 lines (50 loc) · 1.69 KB
/
Copy pathFormulaReader.java
File metadata and controls
57 lines (50 loc) · 1.69 KB
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
/**
* Jan 27, 2018
*
* @author Noah Tyler
*/
package satSolver;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.LinkedList;
import java.util.regex.Pattern;
public class FormulaReader {
private int[][] formula;
private int numVars, numClauses;
public void read(String file) {
try {
Scanner fileScanner = new Scanner(new File(file));
Pattern pattern = Pattern.compile("p cnf"); // set pattern to look for p cnf
while (fileScanner.findInLine(pattern) == null)
fileScanner.nextLine(); //loop that skips lines till p cnf
numVars = fileScanner.nextInt(); //store variables from p cnf line found
numClauses= fileScanner.nextInt();
formula = new int[numClauses][]; //set the formula size
LinkedList<Integer> curLine = new LinkedList<>();
for (int curRow = 0, curNum; fileScanner.hasNextInt();) { //loop to store clauses in 2d array
curNum = fileScanner.nextInt();
if (curNum == 0) {
formula[curRow] = curLine.stream().mapToInt(i->i).toArray();
curRow++;
curLine.clear();
continue;
}
curLine.add(curNum);
}
fileScanner.close();
} catch (FileNotFoundException ex) {
System.out.println("ERROR: Unable to read " + file + ".");
System.exit(0);
}
}
public int[][] getFormula() {
return formula;
}
public int getVariables() {
return numVars;
}
public int getClauses() {
return numClauses;
}
}