diff --git a/problems/015_problem/015_problem.ipynb b/problems/015_problem/015_problem.ipynb new file mode 100644 index 0000000..8783b73 --- /dev/null +++ b/problems/015_problem/015_problem.ipynb @@ -0,0 +1,73 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Problem 15:\n", + " \n", + "### [Euler Project #15](https://projecteuler.net/problem=15)\n", + " \n", + "### Starting in the top left corner of a 2×2 grid, and only being able to move to the right and down, there are exactly 6 routes to the bottom right corner.\n", + "\n", + "### How many such routes are there through a 20×20 grid?\n", + "\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Let's try to map the example cases, by assigning a binary value to RIGHT and DOWN moves.\n", + "\n", + " 0 = R
\n", + " 1 = D\n", + "\n", + " 0 0 1 1
\n", + " 0 1 0 1
\n", + " 0 1 1 0
\n", + " 1 0 0 1
\n", + " 1 0 1 0
\n", + " 1 1 0 0
\n", + "\n", + "### A couple things that shake out of this,\n", + "1. The total length of a sequence of moves is the equal to Length + Width of the grid.\n", + "2. Each unique sequence of moves has a twin which is a mirror across the diagonal.\n", + "3. Each valid sequence has an equal number of RIGHT and DOWN moves.\n", + "\n", + "### I'm sure there is some combinatorial mathematics that describes how to do this analytically, but I'd rather practice programming a loop, than researching an elegant solution. \n", + "\n", + "---" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "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.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}