Skip to content

Instantly share code, notes, and snippets.

@Swarchal
Created March 4, 2016 13:34
Show Gist options
  • Save Swarchal/ee7800061e3581a478a0 to your computer and use it in GitHub Desktop.
Save Swarchal/ee7800061e3581a478a0 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Mortal rabbits\n",
"\n",
"\n",
"- Pair of rabbits produce another pair.\n",
"- Takes 1 month to reach maturity\n",
"- Pair dies after $m$ months\n",
"- Find how many rabbits after $n$ months"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"source": [
"### How do I make this method work??"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def fib(n, m = 1):\n",
" if n < 2:\n",
" return 1\n",
" else:\n",
" return fib(n - 1) + fib(n - 2) - fib(n - m)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Since I can't figure out a recursive method:\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def mortal_rabbits(n, m):\n",
" ls = [1] + [0] * (m - 1)\n",
" for i in range(1, n):\n",
" ls = [sum(ls[1:])] + ls[:-1] \n",
" return sum(ls)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"669908100703859665L"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mortal_rabbits(87, 16)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Explanation:\n",
"\n",
"Vector of rabbits, each element is a month,\n",
"\n",
"```python\n",
"ls = [1] + [0] * (m - 1)\n",
"```\n",
"\n",
"so if the lifespan is 6 months: \n",
"```python\n",
"[1, 0, 0, 0, 0, 0]\n",
"```\n",
"\n",
"With the first element being the starting pair. \n",
"Then loop through the months\n",
"\n",
"Then sum of all the elements (except the first (since they're not mature)) are totaled and create the new first element. \n",
"All the others are shifted along by one month\n",
"\n",
"```python\n",
"for i in range(1, n):\n",
" ls = [sum(ls[1:])] + ls[:-1]\n",
"```\n",
"\n",
"\n",
"So the second month will be: \n",
"```python\n",
"[0, 1, 0, 0, 0, 0]\n",
"```\n",
"\n",
"\n",
"Third month: \n",
"```python\n",
"[1, 0, 1, 0, 0, 0]\n",
"```\n",
"\n",
"After $m$ months, total everything to find the number of rabbits.\n",
"\n",
"```python\n",
"return sum(ls)\n",
"```\n",
"\n",
"#### e.g:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0, 1, 0, 0]\n",
"[1, 0, 1, 0]\n",
"[1, 1, 0, 1]\n",
"[2, 1, 1, 0]\n",
"[2, 2, 1, 1]\n",
"[4, 2, 2, 1]\n",
"[5, 4, 2, 2]\n",
"[8, 5, 4, 2]\n",
"[11, 8, 5, 4]\n",
"\n",
"Sum of last row: 28\n"
]
}
],
"source": [
"def mortal_rabbits_(n, m):\n",
" ls = [1] + [0] * (m - 1)\n",
" for i in range(1, n):\n",
" ls = [sum(ls[1:])] + ls[:-1] \n",
" print(ls)\n",
" print \"\\nSum of last row: %i\" % sum(ls)\n",
"\n",
"mortal_rabbits_(10, 4)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0xb18827ac>"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n22bGWWedxWWXXXbMcyxZsoQOHTrw7LPPkpeXR/v27bnppptK948cOZJPP/2UE088sdZ1iohI4isq\nLmLl9pUADO82PORqqqdJhzar8Vu/KleX11nefvvtdOnSBYBzzz2X1NRURo4cCcDll1/OkiVLWLp0\nKQcOHOCee+4BYPTo0VxyySX88Y9/5MEHHyw915133kmPHj2i6ipb2BVXXFG6fdVVV/Hzn/+cjz/+\nmEsvvbTKOg8ePIgFf2mZmZl89NFHrFixgnPPPZfi4mJefvllbrrpJvLz83n++edJT08vE55OOOEE\nHn744Zr+9ZSRm5tLZmYm8+fPByJ/X9/61rcYMGAAACkpKWRlZdXpO0REJPGt372eg4UH6ZXci46t\nOoZdTrVoejQGRI9ytW7d+qjP+/fvJycn56j7yfr27Ut2dnaZtl69eh3zu+bOncupp55KSkoKKSkp\nZGZmsmPHjmrVWVRUVLq9ZcsWTjnlFD7//HMuv/xyrrjiCpYuXUr//v0ZN24c7dq1Y9WqVdU6b020\nb9+ek046qfRznz59WLx4cenn1q1bk5+fX+/fKyIiiSXepkahiY+01WV0rLH16NGDTZs2lWnbtGkT\ngwcPLtNmUcOHVm4ocdOmTdx66628++67nH322QCceuqpR43GVaZ58yO/LmPHjmXmzJlcf/31QGTq\n88QTT+SEE04A4K9//Ss//elPy/SPnh6NVpPp0eHDh/P++++Xfm7WrFmZMLlnzx46depUresREZGm\nK95WjkITD23x5KyzzqJt27bMnDmTu+++m/fff5/XX3+d6dMrf8Ft9+7dWbduHRdccAEQeVRGs2bN\n6NKlC8XFxTzzzDOsWLGi2jV0796dAwcO0LZtWwDefvtt5syZU7o9ZswYAD788EMGDRrEtm3b2L9/\nf+lCgdpOj0aHynPOOYf777+/9PO6detIT08v/fzVV18xdOjQGn+HiIg0LfE40qbp0ZCVH3Uq/7lE\n8+bNefXVV3nzzTfp0qULP/zhD5k3bx6DBg2qtO+9997LQw89RKdOnfjNb37D0KFDufvuuznrrLPo\n3r07mZmZfOtb36rW9wOcf/75pQ/WdXcKCgpKp2P/8Y9/cMkllwCR0a8ePXrwxRdflFnZWVO/+93v\nePLJJ8nIyGDGjBns27eP4447jvT0dB588EF+/OMfM3Xq1DL3zX322Wecc845tf5OERFpGuIxtFl1\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0xb4b3a2ec>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"### Procrastination\n",
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"plt.figure(figsize=(10, 6))\n",
"\n",
"# immortal rabbits function from previous week\n",
"def n_rabbits(n):\n",
" old = 0\n",
" young = 1\n",
" total = None\n",
" for i in range(1, n + 1):\n",
" total = old + young\n",
" buffer_young = old * 2\n",
" old += young\n",
" young = buffer_young \n",
" return total\n",
"\n",
"months = range(1, 20)\n",
"mortal_rab = [mortal_rabbits(i, m = 16) for i in months]\n",
"immortal_rabbits = [n_rabbits(i) for i in months]\n",
"\n",
"plt.plot(months, mortal_rab, label = \"mortal $(m = 16)$\", lw = 2)\n",
"plt.plot(months, immortal_rabbits, label = \"immortal\", lw = 2)\n",
"plt.title(\"Number of rabbits\")\n",
"plt.legend(loc = 0)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment