Class: Whatnot::DimacsCNFVar

Inherits:
Object
  • Object
show all
Defined in:
lib/whatnot/dimacs_cnf_var.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, domain, key_iter: 1) ⇒ DimacsCNFVar

Returns a new instance of DimacsCNFVar.



29
30
31
32
33
34
35
# File 'lib/whatnot/dimacs_cnf_var.rb', line 29

def initialize(name, domain, key_iter: 1)
  @name = name
  @domain = domain
  @key_iter = key_iter

  generate_keys
end

Instance Attribute Details

#all_keys_as_arrayObject (readonly)

Returns the value of attribute all_keys_as_array.



27
28
29
# File 'lib/whatnot/dimacs_cnf_var.rb', line 27

def all_keys_as_array
  @all_keys_as_array
end

#key_iterObject (readonly)

Returns the value of attribute key_iter.



27
28
29
# File 'lib/whatnot/dimacs_cnf_var.rb', line 27

def key_iter
  @key_iter
end

Class Method Details

.interpret(solution) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
# File 'lib/whatnot/dimacs_cnf_var.rb', line 15

def self.interpret(solution)
  keys = solution.split(" ").map(&:to_i).select { |k| k > 0 }
  values = DimacsCNFVar.names.values_at(*keys)

  values = values.map do |val|
    key, v = *val.match(/\A([^=]+)=(.*)\Z/)[1..2]
    [key.to_sym, JSON.parse(v)]
  end

  Hash[values]
end

.keysObject



7
8
9
# File 'lib/whatnot/dimacs_cnf_var.rb', line 7

def self.keys
  @@keys ||= {}
end

.namesObject



3
4
5
# File 'lib/whatnot/dimacs_cnf_var.rb', line 3

def self.names
  @@names ||= {}
end

Instance Method Details

#argument_setObject



43
44
45
# File 'lib/whatnot/dimacs_cnf_var.rb', line 43

def argument_set
  keys_by_value.to_a
end

#matching_pairs(var2) ⇒ Object



37
38
39
40
41
# File 'lib/whatnot/dimacs_cnf_var.rb', line 37

def matching_pairs(var2)
  (self.keys_by_value.keys & var2.keys_by_value.keys).map do |value|
    [self.keys_by_value[value], var2.keys_by_value[value]]
  end
end

#value_name_from_pair(name, value) ⇒ Object



11
12
13
# File 'lib/whatnot/dimacs_cnf_var.rb', line 11

def value_name_from_pair(name, value)
  "#{name}=#{value.to_json}"
end