require 'csp' include CSP problem = Problem.new var1 = Variable.new('1', [1,2,3,4]) var2 = Variable.new('2', [1,2,3,4]) var3 = Variable.new('3', [1,2,3,4]) var4 = Variable.new('4', [1,2,3,4]) cons = [] cons.push(Constraint.new( Proc.new {|a,b| a != b}, [var1,var2])) cons.push(Constraint.new( Proc.new {|a,b| a != b}, [var1,var3])) cons.push(Constraint.new( Proc.new {|a,b| a != b}, [var1,var4])) cons.push(Constraint.new( Proc.new {|a,b| a != b}, [var2,var3])) cons.push(Constraint.new( Proc.new {|a,b| a != b}, [var2,var4])) cons.push(Constraint.new( Proc.new {|a,b| a != b}, [var3,var4])) cons.push(Constraint.new( Proc.new {|a,b| (a - b).abs != 1}, [var1,var2])) cons.push(Constraint.new( Proc.new {|a,b| (a - b).abs != 1}, [var2,var3])) cons.push(Constraint.new( Proc.new {|a,b| (a - b).abs != 1}, [var3,var4])) cons.push(Constraint.new( Proc.new {|a,b| (a - b).abs != 2}, [var1,var3])) cons.push(Constraint.new( Proc.new {|a,b| (a - b).abs != 2}, [var2,var4])) cons.push(Constraint.new( Proc.new {|a,b| (a - b).abs != 3}, [var1,var4])) cons.each do |c| problem.add_constraint(c) end solver = Solver.new(problem) solver.set_ordering([var1,var2,var3,var4]) solver.solve