A farmer had a stone that he used to measure grain on his scale. One day his neighbor borrowed the stone; and when he returned; it was broken into four pieces. The neighbor was very apologetic; but the farmer thanked the neighbor for doing him a big favor. The farmer said that now he can measure his grain in one pound increments starting at one pound all the way to forty pounds (1; 2; 3; 17; 29; 37; etc.) using these four stones. How much do the four stones weigh?
Solution with LINQ...
var a = ((from myA in Enumerable.Range(1, 40)
from myB in Enumerable.Range(1, 40)
from myC in Enumerable.Range(1, 40)
from myD in Enumerable.Range(1, 40)
where myA + myB + myC + myD == 40
&& myA <= myB
&& myB <= myC
&& myC <= myD
select new[] {myA, myB, myC, myD}).Where(
myNum => Enumerable.Range(1, 40).All(
target => ((from myn1 in new[] { 0, 1, -1 }
from myn2 in new[] { 0, 1, -1 }
from myn3 in new[] { 0, 1, -1 }
from myn4 in new[] { 0, 1, -1 }
select myn1*myNum[0]
+ myn2*myNum[1]
+ myn3*myNum[2]
+ myn4*myNum[3]).
Any
(x => x == target))))).ToList();