﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Euler.Helpers;

namespace Euler.Problems
{
    class Problem45 : BaseProblem
    {
        public override string ProblemDescription
        {
            get
            {
                return @"Triangle, pentagonal, and hexagonal numbers are generated by the following formulae:

Triangle	 	Tn=n(n+1)/2	 	1, 3, 6, 10, 15, ...
Pentagonal	 	Pn=n(3n−1)/2	 	1, 5, 12, 22, 35, ...
Hexagonal	 	Hn=n(2n−1)	 	1, 6, 15, 28, 45, ...
It can be verified that T285 = P165 = H143 = 40755.

Find the next triangle number that is also pentagonal and hexagonal.";
            }
        }

        public override string ProblemName
        {
            get
            {
                return "Triangular, pentagonal, and hexagonal";
            }
        }

        public override int ProblemNumber
        {
            get
            {
                return 45;
            }
        }

        protected override string Solve()
        {
            long result = 0;

            for (int i = 286; true; i++)
            {
                long triangle = NumberHelper.GetTriangleNumber(i);

                if (NumberHelper.IsPentagon(triangle) &&
                    NumberHelper.IsHexagon(triangle))
                {
                    result = triangle;
                    break;
                }
            }

            return result.ToString("0");
        }
    }
}
