-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathFindAllTriplesWithSumLessThanN.cs
More file actions
81 lines (71 loc) · 2.77 KB
/
Copy pathFindAllTriplesWithSumLessThanN.cs
File metadata and controls
81 lines (71 loc) · 2.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Collections.Generic;
using System.Linq;
namespace TestConsoleTest
{
/// <summary>
/// Find all sets of triples in an input with a sum less than n.
/// O(n^3) worst case complexity.
/// </summary>
public class FindAllTriplesWithSumLessThanN
{
public IEnumerable<Tuple<int,int,int>> FindAllTriplesWithSumLessThan(IEnumerable<int> list, int n)
{
var sorted = list.ToList();
sorted.Sort();
foreach (var outer in list)
{
foreach (var inner in list)
{
var target = n - (inner + outer);
// All numbers less than target satisfy the condition.
for (int i = 0; i < sorted.Count ; ++i)
{
if (sorted[i] >= target)
break;
yield return new Tuple<int, int, int>(inner, outer, sorted[i]);
}
}
}
}
}
[TestClass]
public class FindAllTriplesWithSumLessThanNTests
{
[TestMethod]
public void WhenSortedInput_ExpectAllTriplesFound()
{
var sut = new FindAllTriplesWithSumLessThanN();
var results = sut.FindAllTriplesWithSumLessThan(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, 5);
Assert.IsTrue(results.All(x => (x.Item1 + x.Item2 + x.Item3) < 5));
Assert.AreEqual(4, results.Count());
}
[TestMethod]
public void WhenUnsortedInput_ExpectedAllTriplesFound()
{
var sut = new FindAllTriplesWithSumLessThanN();
var results = sut.FindAllTriplesWithSumLessThan(new int[] { 5, 9, 4, 7, 6, 10, 8, 3, 1, 2, }, 8);
Assert.IsTrue(results.All(x => (x.Item1 + x.Item2 + x.Item3) < 8));
Assert.AreEqual(35, results.Count());
}
}
//public static class Program
//{
// public static void Main()
// {
// var sut = new FindAllTriplesWithSumLessThanN();
// var results = sut.FindAllTriplesWithSumLessThan(new int[] { 1, 2, 3, 4, 5, 6 }, 5);
// DisplayResults(results);
// //var results2 = sut.FindAllTriplesWithSumLessThan(new int[] { 5, 9, 4, 7, 6, 10, 8, 3, 1, 2, }, 8);
// //DisplayResults(results2);
// Console.WriteLine("Press [Enter Key] to exit.");
// Console.ReadLine();
// }
// private static void DisplayResults(IEnumerable<Tuple<int, int, int>> results)
// {
// foreach (var result in results)
// Console.WriteLine(result.ToString() + " = " + (result.Item1 + result.Item2 + result.Item3).ToString());
// }
//}
}