public void Run() { using (var reader = new StreamReader("algo1-programming_prob-2sum.txt")) using (var writer = new StreamWriter("output.txt")) { var numbers = GetNumbers(reader); var twoSumAlgorithm = new TwoSumAlgorithm(numbers); var sw1 = Stopwatch.StartNew(); var total1 = Partitioner.Create(-10000, 10001).AsParallel().Select( range => { int count = 0; for (var i = range.Item1; i < range.Item2; i++) { if (twoSumAlgorithm.CanGetSum(i)) { count++; } } return count; }).Sum(); sw1.Stop(); writer.WriteLine(total1); writer.WriteLine(sw1.ElapsedMilliseconds); var sw2 = Stopwatch.StartNew(); var total2 = Partitioner.Create(-10000, 10001).AsParallel().Select( range => twoSumAlgorithm.CheckSequence(range.Item1, range.Item2)).Sum(); sw2.Stop(); writer.WriteLine(total2); writer.WriteLine(sw2.ElapsedMilliseconds); } }
public void CanGetSumTest() { var numbers1 = Enumerable.Range(1, 10).Select(x => (long)x); var twoSumAlgorithm1 = new TwoSumAlgorithm(numbers1); twoSumAlgorithm1.CanGetSum(2).Should().BeFalse(); twoSumAlgorithm1.CanGetSum(5).Should().BeTrue(); twoSumAlgorithm1.CanGetSum(19).Should().BeTrue(); twoSumAlgorithm1.CanGetSum(20).Should().BeFalse(); var numbers2 = Enumerable.Range(1, 5).Select(x => (long)x * 2); var twoSumAlgorithm2 = new TwoSumAlgorithm(numbers2); twoSumAlgorithm2.CanGetSum(7).Should().BeFalse(); twoSumAlgorithm2.CanGetSum(12).Should().BeTrue(); var numbers3 = Enumerable.Range(1, 10).Select(x => (long)x); var twoSumAlgorithm3 = new TwoSumAlgorithm(numbers3); int count3 = Enumerable.Range(1, 20).Count(number => twoSumAlgorithm3.CanGetSum(number)); count3.Should().Be(17); var numbers4 = Enumerable.Range(1, 5).Select(x => (long)x * 2); var twoSumAlgorithm4 = new TwoSumAlgorithm(numbers4); int count4 = Enumerable.Range(1, 20).Count(number => twoSumAlgorithm4.CanGetSum(number)); count4.Should().Be(7); }