Created
October 21, 2014 12:20
-
-
Save lifebeyondfife/f73674e4a86a853e5db6 to your computer and use it in GitHub Desktop.
Solving https://news.ycombinator.com/item?id=8486278 with the Decider constraint solver tool
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using Decider.Csp.BaseTypes; | |
using Decider.Csp.Integer; | |
using System; | |
using System.Collections.Generic; | |
namespace Chickens | |
{ | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
var x1 = new VariableInteger("x1", 1, 9); | |
var x2 = new VariableInteger("x2", 1, 9); | |
var y1 = new VariableInteger("y1", 1, 15); | |
var y2 = new VariableInteger("y2", 1, 15); | |
var z1 = new VariableInteger("z1", 1, 25); | |
var z2 = new VariableInteger("z2", 1, 25); | |
var p1 = new VariableInteger("p1", 1, 500); | |
var p2 = new VariableInteger("p2", 1, 500); | |
var constraints = new List<ConstraintInteger> | |
{ | |
new ConstraintInteger(p1 > p2), | |
new ConstraintInteger(x1 > y1), | |
new ConstraintInteger(y1 > z1), | |
new ConstraintInteger(x1 * p1 + x2 * p2 == 3500), | |
new ConstraintInteger(y1 * p1 + y2 * p2 == 3500), | |
new ConstraintInteger(z1 * p1 + z2 * p2 == 3500), | |
new ConstraintInteger(x1 + x2 == 10), | |
new ConstraintInteger(y1 + y2 == 16), | |
new ConstraintInteger(z1 + z2 == 26), | |
}; | |
IState<int> state = new StateInteger(new[] { p1, p2, x1, x2, y1, y2, z1, z2 }, constraints); | |
StateOperationResult result; | |
state.StartSearch(out result); | |
if (result == StateOperationResult.Solved) | |
{ | |
Console.WriteLine("x1:\t{0}", x1); | |
Console.WriteLine("x2:\t{0}", x2); | |
Console.WriteLine("y1:\t{0}", y1); | |
Console.WriteLine("y2:\t{0}", y2); | |
Console.WriteLine("z1:\t{0}", z1); | |
Console.WriteLine("z2:\t{0}", z2); | |
Console.WriteLine(); | |
Console.WriteLine("p1:\t{0}", p1); | |
Console.WriteLine("p2:\t{0}", p2); | |
} | |
Console.WriteLine("Done."); | |
Console.ReadKey(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment