Sfoglia il codice sorgente

some terrible rust code, don't look at it

it's supposed to parse cnf clauses in DIMAC syntax at some point, but
not yet...
Lucas Stadler 10 anni fa
parent
commit
2d07ba64f8
1 ha cambiato i file con 50 aggiunte e 0 eliminazioni
  1. 50 0
      rust/dpll/cnf.rs

+ 50 - 0
rust/dpll/cnf.rs

@ -0,0 +1,50 @@
1
/*
2
 * Terrible code for reading CNF formulas in DIMAC format.
3
 *
4
 * Don't read this, it's horrible.  Although I'm hoping to clean it up
5
 * at some point, I'm not sure when (if ever) that will be.
6
 *
7
 * You have been warned...
8
 */
9
10
use std::io;
11
use std::io::Read;
12
13
fn parse_dimac(dimac: &str) {
14
    let mut lines = dimac.lines();
15
    let mut num_vars = 0;
16
    let mut num_clauses = 0;
17
    
18
    match lines.next() {
19
        None => { println!("Error: expected cnf description"); return }
20
        Some(line) => {
21
            let desc: Vec<&str> = line.split(" ").collect();
22
            if desc.len() != 4 || desc[0] != "p" || desc[1] != "cnf" {
23
                println!("Error: cnf description must be of the form 'p cnf <num vars> <num clauses>'");
24
                return;
25
            }
26
            match desc[2].parse::<u32>() {
27
                Ok(n) => { num_vars = n }
28
                Err(e) => { println!("Error: <num vars> must be a positive integer: {}", e); return; }
29
            }
30
            
31
            match desc[3].parse::<u32>() {
32
                Ok(n) => { num_clauses = n }
33
                Err(e) => { println!("Error: <num clauses> must be a positive integer: {}", e); return; }
34
            }
35
            println!("cnf has {} variables and {} clauses", num_vars, num_clauses)
36
        }
37
    }
38
39
    let clause_lines: Vec<&str> = lines.collect();
40
    if clause_lines.len() as u32 != num_clauses {
41
        println!("Error: Wrong number of clauses: Expected {}, but got {}", num_clauses, clause_lines.len());
42
        return
43
    }
44
}
45
46
fn main() {
47
    let input: &mut String = &mut String::new();
48
    io::stdin().read_to_string(input);
49
    parse_dimac(input)
50
}