{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Coded triangle numbers (Euler Problem 42)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The nth term of the sequence of triangle numbers is given by, $t_n = \\frac{1}{2}n(n+1)$; so the first ten triangle numbers are:\n",
    "\n",
    "    1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...\n",
    "\n",
    "By converting each letter in a word to a number corresponding to its alphabetical position and adding these values we form a word value. For example, the word value for SKY is 19 + 11 + 25 = 55 = $t_{10}$. If the word value is a triangle number then we shall call the word a triangle word.\n",
    "\n",
    "Using words.txt (right click and 'Save Link/Target As...'), a 16K text file containing nearly two-thousand common English words, how many are triangle words? (The file is saved in the same directory as this notebook file as EulerProblem042.txt)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_words():\n",
    "    with open(\"EulerProblem042.txt\", \"r\") as f:\n",
    "        s = f.read()\n",
    "    words = [w.strip('\"') for w in s.split(\",\")]\n",
    "    return words\n",
    "\n",
    "def calculate_word_value(word):\n",
    "    word = word.upper()\n",
    "    return sum([ord(letter) - 64 for letter in word])\n",
    "\n",
    "assert(calculate_word_value(\"sky\") == 55)\n",
    "\n",
    "def get_triangle_numbers(n):\n",
    "    return {n * (n + 1) // 2 for n in range(1, 101)}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "162\n"
     ]
    }
   ],
   "source": [
    "triangle_numbers = get_triangle_numbers(100)\n",
    "\n",
    "s = len([word for word in get_words() if calculate_word_value(word) in triangle_numbers])\n",
    "assert(s == 162)\n",
    "print(s)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "completion_date": "Thu, 20 Dec 2018, 16:14",
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python3.6",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  },
  "tags": [
   "triangle",
   "words"
  ]
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
