#!/usr/bin/env ruby
#
# https://projecteuler.net/problem=12
# The sequence of triangle numbers is generated by adding the natural numbers.
# So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28.
# The first ten terms would be:
#
# 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
#
# Let us list the factors of the first seven triangle numbers:
#
# 1: 1
# 3: 1,3
# 6: 1,2,3,6
# 10: 1,2,5,10
# 15: 1,3,5,15
# 21: 1,3,7,21
# 28: 1,2,4,7,14,28
#
# We can see that 28 is the first triangle number to have over five divisors.
#
# What is the value of the first triangle number to have over five hundred
# divisors?
#
# Answer: 76576500

require 'core_extensions/integer/divisors'

# @see http://en.wikipedia.org/wiki/Triangular_number
def triangle(num)
  return 3 if num == 1
  ((num + 1) * num) / 2
end

def highest_divisible_triangular_number(stop)
  i = 1
  i += 1 while triangle(i).divisor_count < stop
  triangle(i)
end

puts highest_divisible_triangular_number(500) if __FILE__ == $PROGRAM_NAME
