{
 "metadata": {
  "name": "",
  "signature": "sha256:adff976ba2e90f02a574c5338362b13e82775ed8591a863fa5f3754ae22fd64b"
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 \u00d7 99.\n",
      "\n",
      "Find the largest palindrome made from the product of two 3-digit numbers."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "def product_gen(num):\n",
      "    x = num\n",
      "    y = num - 1\n",
      "    \n",
      "    while num < 2:\n",
      "        yield x * y"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 1
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "product_gen(2)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 2,
       "text": [
        "<generator object product_gen at 0x0000000003F5C1B0>"
       ]
      }
     ],
     "prompt_number": 2
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "num1 = 999\n",
      "num2 = 999\n",
      "prod = None\n",
      "prod_str = None\n",
      "reverse_str = None\n",
      "is_palindrome = False\n",
      "maxpal = 0\n",
      "\n",
      "while num1 > 2 and is_palindrome == False:\n",
      "    prod = num1 * num2\n",
      "    prod_str = str(prod)\n",
      "    reverse_str = prod_str[::-1]\n",
      "    \n",
      "    if prod_str == reverse_str:\n",
      "        is_palindrome = True\n",
      "        \n",
      "    if num2 == 99:\n",
      "        num2 = 999\n",
      "        num1 -= 1\n",
      "    \n",
      "    else:\n",
      "        num2 -= 1        \n",
      "print prod"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "580085\n"
       ]
      }
     ],
     "prompt_number": 31
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "def is_palindrome(num):\n",
      "    return int(str(num)[::-1]) == num"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 29
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "high_pal = 0\n",
      "prod = None\n",
      "\n",
      "for x in range(999, 99, -1):\n",
      "    for y in range(x, 99, -1):\n",
      "        prod = x * y\n",
      "        if is_palindrome(prod) and prod > high_pal:\n",
      "            high_pal = prod\n",
      "            \n",
      "print high_pal"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "906609\n"
       ]
      }
     ],
     "prompt_number": 30
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [],
     "language": "python",
     "metadata": {},
     "outputs": []
    }
   ],
   "metadata": {}
  }
 ]
}