Sha256: 28bfae501fc731ce186cf553193c703168ac631a556666de452eff500eea6572

Contents?: true

Size: 773 Bytes

Versions: 1

Compression:

Stored size: 773 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}\n"
      dimacs_body = ""
      create_table(formula)
      formula.each do |node|
        case node
        when AndNode then dimacs_body << " 0\n"
        when OrNode then dimacs_body << " "
        when NotNode then dimacs_body << "-"
        when VarNode then dimacs_body << @name_table[node]
        end
      end
      dimacs_body << " 0\n"

      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.3.2 lib/ravensat/dimacs/dimacs_encoder.rb