new_contents: '''
  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
  '''
  import itertools
  
  def is_pentagonal(Pn):
      return ((1 + (1 + 24*Pn)**.5)/6).is_integer()
  
  def is_triangle(Tn):
      return ((2*Tn + .25)**.5 - .5).is_integer()
  
  
  def hexagonal_gen(start=1):
      return ((n * (2*n - 1), n) for n in itertools.count(start))
  
  
  def solve_p045():
      for n,i in hexagonal_gen(144):
          if is_pentagonal(n) and is_triangle(n):
              return n
  
subject: Solve p045