// Recommend running this in LINQPadvoidMain(){varnumbers=Enumerable.Range(0,10000).ToList();varconstraints=newList<IConstraint>{newMustBeFourDigitsLongConstraint(),newMustBeEvenConstraint(),newPalindromeConstraint()};varconstraintSolver=newConstraintSolver();varresult=constraintSolver.FindValues(constraints,numbers.ToList());result.Dump();}publicinterfaceIConstraint{boolFollowsConstraint(intvalue);}classMustBeFourDigitsLongConstraint:IConstraint{publicboolFollowsConstraint(intvalue){returnvalue.ToString().Length==4;}}classMustBeEvenConstraint:IConstraint{publicboolFollowsConstraint(intvalue){returnvalue%2==0;}}classFirstDigitMustEqualLastDigitConstraint:IConstraint{publicboolFollowsConstraint(intvalue){varvalueString=value.ToString();returnvalueString[0]==valueString[valueString.Length-1];}}classConstraintSolver{publicList<int>FindValues(List<IConstraint>constraints,List<int>values){if(constraints==null)thrownewArgumentNullException("constraints");if(values==null)thrownewArgumentNullException("values");varresult=values;foreach(varconstraintinconstraints){result=result.Where(x=>constraint.FollowsConstraint(x)).ToList();}returnresult;}}
Comments (0)
HTTPSSSH
You can clone a snippet to your computer for local editing.
Learn more.