Sha256: 95298f630d91ae8437ce3fb5a790f1bcee36e29ee7dd4e59d4877d340b1bdb3e
Contents?: true
Size: 791 Bytes
Versions: 1
Compression:
Stored size: 791 Bytes
Contents
module Ravensat class DimacsEncoder attr_reader :name_table def initialize @name_table = {} end def to_dimacs(formula) return nil unless formula.cnf? dimacs_header = "p cnf #{formula.vars_size} #{formula.clauses_size}" dimacs_body = "" create_table(formula) formula.each do |node| case node when AndNode when OrNode then dimacs_body << "\n" when NotNode then dimacs_body << "-" when VarNode then dimacs_body << @name_table[node] << " " end end dimacs_body.gsub!(/\n{2,}/, "\n").gsub!(/\n/, "0\n") << '0' dimacs_header + dimacs_body end def create_table(formula) @name_table = formula.vars.zip((1..formula.vars.size).map(&:to_s)).to_h end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
ravensat-0.2.1 | lib/ravensat/dimacs_encoder.rb |