# Project Euler #14

I had so much fun doing #13 I thought I'd tackle #14 as well.

This problem wasn't too bad. I started by defining some extension methods on long:

1: static class Extensions

` 2: {`

3: public static long NextInSequence(this long number)

` 4: {`

5: if (number % 2 == 0)

` 6: {`

7: return number / 2;

` 8: }`

9: else

` 10: {`

11: return 3 * number + 1;

` 12: }`

` 13: }`

` 14: `

15: public static IList<long> GenerateSequence(this long number)

` 16: {`

17: List<long> seq = new List<long>();

` 18: `

19: long next = 0;

20: do

` 21: {`

` 22: next = number.NextInSequence();`

` 23: seq.Add(next);`

` 24: number = next;`

25: } while (next != 1);

` 26: `

27: return seq;

` 28: }`

` 29: }`

While I don't necessarily need the full list of terms (GenerateSequence), I used the list in testing to make sure my sequence logic was correct.

Now, the only thing left to do was to find the longest sequence. I used a LINQ query to order the list of sequence counts in descending order so the longest would be at the top:

` 1: var range = Enumerable.Range(1, 1000000);`

` 2: `

3: var biggest = (from n in range

4: let size = ((long)n).GenerateSequence().Count

` 5: orderby size descending`

6: select new { Number = n, Length = size }).ToArray();

` 7: `

8: Console.WriteLine("{0} has a sequence of {1}", biggest[0].Number, biggest[0].Length);