{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Combinatoric selections (Euler Problem 53)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "[https://projecteuler.net/problem=53](https://projecteuler.net/problem=53)\n",
    "\n",
    "There are exactly ten ways of selecting three from five, 12345:\n",
    "\n",
    "$123, 124, 125, 134, 135, 145, 234, 235, 245, 345$\n",
    "\n",
    "In combinatorics, we use the notation, 5C3 = 10.\n",
    "\n",
    "In general,\n",
    "\n",
    "$nCr = \\frac{n!}{r!(n−r)!}$, where r ≤ n, n! = n×(n−1)×...×3×2×1, and 0! = 1.\n",
    "\n",
    "It is not until n = 23, that a value exceeds one-million: 23C10 = 1144066.\n",
    "\n",
    "How many, not necessarily distinct, values of  nCr, for 1 ≤ n ≤ 100, are greater than one-million?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import math\n",
    "\n",
    "def combinations_naiv(n, r):\n",
    "    return math.factorial(n) // (math.factorial(r) * math.factorial(n - r))\n",
    "\n",
    "assert(combinations_naiv(5, 3) == 10)\n",
    "assert(combinations_naiv(23, 10) == 1144066)\n",
    "assert(combinations_naiv(20, 20) == 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "count = 0\n",
    "\n",
    "for n in range (1, 101):\n",
    "    for r in range(1, n + 1):\n",
    "        if combinations_naiv(n, r) > 10**6:\n",
    "            count += 1\n",
    "\n",
    "s = count"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4075\n"
     ]
    }
   ],
   "source": [
    "print(s)\n",
    "assert(s == 4075)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "completion_date": "Mon, 24 Dec 2018, 23:29",
  "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": [
   "combinatoric",
   "selection",
   "factorial",
   "airplane"
  ]
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
