Project Description
Chaow Framework is the set of class libraries designed for enhancing standard .NET framework. It allows you to write more simple but powerful code.
Features
1. Extend your .NET languageChaow.Extensions contains several extensions for array, list, date, int, string and more.
You can use the extensions to make you code easier.
var matchQuery = new {
BirthDate = 1.January(2000), //Create date easily
Iam = Sex.Man,
LookingFor = Array.Enum<Sex>(), //Looking for Man, and Woman! (Expand enum)
AgeRange = 18.To(25) //Create number range
}
You will also be able to write Functional Programming and Dynamic Programming.
Func<int, int> fibo = null;
fibo = x => fibo(x - 1) + fibo(x - 2);
fibo = fibo.When(x => x <= 1, x => x); //Able to do pattern matching
fibo = fibo.Memoize(); //Allow you to do memoization
var result = fibo(38);
2. Set of based class librariesWith
Chaow.Numeric, you will get several new based classes for using in your code.
Feature classes are BigInteger, Prime, and much more.
BigInteger a = 2;
var result = a.Power(1000); //2^1000 value is more than 300 digits of number, but BigInteger has no boundary
var prime = new Prime();
var isPrime = prime.Contains(142857); //Test for prime number
var primeList = prime.Take(10000); //Generate prime numbers
3. Solve polynomial problemsYou can easily analyze your math functions with
Chaow.Numeric 2.
ie. Solve integer of X, Y in 3XX + 14XY + 6YY - 17X - 23Y - 505 = 0
var solutions = Diophantine.Parse((x, y) => 3 * x * x + 14 * x * y + 6 * y * y - 17 * x - 23 * y - 505).Solutions;
var x = solutions[0].X0;
var y = solutions[0].Y0;
ie2. Find formula from sequence of numbers
var formula = MathExt2.PolynomialInterpolation(new Rational[] { 1, 8, 27, 64 });
Console.WriteLine(formula.Rewrite());
//Output is x => x.Power(3)
4. Solve nonpolynomial problemsChaow.Combinatorics will allow you to backtrack with any types of problem.
ie. Solve 8 Queens easily, with few lines of code.
var solutions = "ABCDEFGH".Backtrack(8);
solutions.BacktrackingModel = BacktrackingModel.Permutation;
solutions.AppendConstraint(set => q =>
set.All((x, i) => (set.Length - i != (x - q).Abs()))
);
var answer = solutions.First();
Have more than 1 CPU? You can do concurrent backtracking easily.
ie2. Create concurrent Sudoku solver with few lines of code.
//Just add AsConcurrent to transform normal enumeration into concurrent enumeration.
var solutions = 1.To(9).AsConcurrent().Backtrack(
valued,
(set, cell, i) => set.Append(cell),
set => set.Length == 81);
solutions.AppendConstraint(
set => cell => !set.Any((x, i) => x == cell && Sudoku.hasImpact(position[i], position[set.Length]))
);
var answer = solutions.SelectResults().First();
Finally, may I introduce new language LINCON (Language INtegrated CONstraint programming).
LINCON is strong type constraint programming, which fast, declarative style and fun!
ie3. Solving Einstein's puzzle with LINCON!
var solutions = from n in ArrayExt.Enum<Nationality>().ToConstraintList(5)
from c in ArrayExt.Enum<HouseColor>().ToConstraintList(5)
from s in ArrayExt.Enum<Smoke>().ToConstraintList(5)
from d in ArrayExt.Enum<Drink>().ToConstraintList(5)
from p in ArrayExt.Enum<Pet>().ToConstraintList(5)
from i in 0.To(4).ToConstraintIndex()
where Constraint.AllDifferent(n)
where Constraint.AllDifferent(c)
where Constraint.AllDifferent(s)
where Constraint.AllDifferent(d)
where Constraint.AllDifferent(p)
where n[0] == Nationality.Norwegian
where d[2] == Drink.Milk
where (n[i] == Nationality.British) == (c[i] == HouseColor.Red)
where (n[i] == Nationality.German) == (s[i] == Smoke.Prince)
where (c[i] == HouseColor.Yellow) == (s[i] == Smoke.DunHill)
where (n[i] == Nationality.Danish) == (d[i] == Drink.Tea)
where (c[i] == HouseColor.Green) == (d[i] == Drink.Coffee)
where (s[i] == Smoke.BlueMaster) == (d[i] == Drink.Beer)
where (n[i] == Nationality.Swedish) == (p[i] == Pet.Dog)
where (s[i] == Smoke.PallMall) == (p[i] == Pet.Bird)
where (c[i] == HouseColor.Green) == (c[i + 1] == HouseColor.White)
where (p[i] == Pet.Cat) ? (s[i - 1] == Smoke.Blend || s[i + 1] == Smoke.Blend) : true
where ((p[i] == Pet.Horse) ? (s[i - 1] == Smoke.DunHill || s[i + 1] == Smoke.DunHill) : true)
where ((n[i] == Nationality.Norwegian) ? (c[i - 1] == HouseColor.Blue || c[i + 1] == HouseColor.Blue) : true)
where ((s[i] == Smoke.Blend) ? (d[i - 1] == Drink.Water || d[i + 1] == Drink.Water) : true)
select 0.To(4).Select(x =>
new {
Nationality = n[x],
HouseColor = c[x],
Smoke = s[x],
Drink = d[x],
Pet = p[x]
});
var answer = solutions.First();
Download
Download now to get more samples and source codes.
Modules
module | description |
Chaow.Collections | provides additional types used as the collections ie. disjoint set, collection string |
Chaow.Combinatorics | enables you to do combinatoric search easier ie. combination, permutation, partition |
Chaow.Expression | enhances the power of expression ie. exp matcher, exp replacer, exp rewriter |
Chaow.Extensions | extends .NET framework types ie. int, string, ienumerable, func |
Chaow.LINCON | language integrated constraint programming, allows you to write cp with linq |
Chaow.Numeric | provides various high performance numeric types ie. prime, biginteger, rational |
Chaow.Numeric 2 | allows you to do mathematical analysis ie. diophantine solver, polynomial rewriter |
Chaow.Threading | enables you to write multi-thread code easier |
Links
-
my blog (Thai language)
-
donation