{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Chutes & Ladders\n", "\n", "This is a fun evening exploration to teach myself how to code\n", "Python by asking the question \"What does the distribution of\n", "games of Chutes & Ladders look like by number of spins to win?\"\n", "\n", "If you're new to Jupyter or Python you might find this interesting.\n", "\n", "There's quite a long tail distribution - if you get very unlucky,\n", "the game might last well over 200 spins, but if you're super lucky\n", "you could get it in 7. :)\n", "\n", "- David E. Weekly " ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "you spun a 4\n", "after roll you landed on 4\n", "oh yay, a ladder to 14\n", "you spun a 6\n", "after roll you landed on 20\n", "you spun a 5\n", "after roll you landed on 25\n", "you spun a 1\n", "after roll you landed on 26\n", "you spun a 2\n", "after roll you landed on 28\n", "oh yay, a ladder to 84\n", "you spun a 6\n", "after roll you landed on 90\n", "you spun a 6\n", "after roll you landed on 96\n", "oh no, a chute to 75\n", "you spun a 1\n", "after roll you landed on 76\n", "you spun a 3\n", "after roll you landed on 79\n", "you spun a 6\n", "after roll you landed on 85\n", "you spun a 4\n", "after roll you landed on 89\n", "you spun a 5\n", "after roll you landed on 94\n", "you spun a 3\n", "after roll you landed on 97\n", "you spun a 5\n", "oh no, you can't go past 100\n", "you spun a 1\n", "after roll you landed on 98\n", "oh no, a chute to 78\n", "you spun a 1\n", "after roll you landed on 79\n", "you spun a 2\n", "after roll you landed on 81\n", "you spun a 2\n", "after roll you landed on 83\n", "you spun a 2\n", "after roll you landed on 85\n", "you spun a 5\n", "after roll you landed on 90\n", "you spun a 3\n", "after roll you landed on 93\n", "oh no, a chute to 73\n", "you spun a 4\n", "after roll you landed on 77\n", "you spun a 1\n", "after roll you landed on 78\n", "you spun a 3\n", "after roll you landed on 81\n", "you spun a 4\n", "after roll you landed on 85\n", "you spun a 5\n", "after roll you landed on 90\n", "you spun a 5\n", "after roll you landed on 95\n", "you spun a 5\n", "after roll you landed on 100\n", "you won in 28 spins!\n" ] }, { "data": { "text/plain": [ "28" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We'll be lazy and code both chutes and ladders as \"portals\",\n", "# first specifying the square FROM which the portal will go and\n", "# then the square TO which the portal will take you. This allows\n", "# both forward and backward movement. This set of coded portals\n", "# maps the Chutes & Ladders game.\n", "\n", "portals = {\n", " 1 : 38,\n", " 4 : 14,\n", " 9 : 31,\n", " 16 : 6,\n", " 21 : 42,\n", " 28 : 84,\n", " 36 : 44,\n", " 47 : 26,\n", " 49 : 11,\n", " 56 : 53,\n", " 51 : 67,\n", " 62 : 19,\n", " 64 : 60,\n", " 71 : 91,\n", " 80 : 100,\n", " 87 : 24,\n", " 93 : 73,\n", " 96 : 75,\n", " 98 : 78,\n", "}\n", "\n", "# Plays a game of Chutes & Ladders, returns # spins to win\n", "# If printGame is true, will print details of the game.\n", "import random\n", "def playGame(printGame):\n", " currentSquare = 0\n", " spins = 0\n", " while True:\n", " spin = random.randint(1,6)\n", " spins = spins + 1\n", " if printGame: print \"you spun a\", spin\n", " if currentSquare + spin > 100:\n", " if printGame: print \"oh no, you can't go past 100\"\n", " else:\n", " currentSquare += spin\n", " if printGame: print \"after roll you landed on\", currentSquare\n", " portalDest = portals.get(currentSquare)\n", " if portalDest is not None:\n", " if printGame:\n", " if portalDest < currentSquare: print \"oh no, a chute to\", portalDest\n", " if portalDest > currentSquare: print \"oh yay, a ladder to\", portalDest\n", " currentSquare = portalDest\n", " if currentSquare == 100:\n", " break\n", " if printGame: print \"you won in\", spins, \"spins!\"\n", " return spins\n", "\n", "playGame(True)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Playing games...\n", "100,000 games completed.\n" ] } ], "source": [ "# Now we're going to play a whole bunch of games to get a distribution.\n", "print \"Playing games...\"\n", "gameOutcomes = [playGame(False) for game in range(100000)]\n", "print \"100,000 games completed.\"" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Fastest game is in 7 spins.\n", "Slowest game is in 317 spins.\n" ] } ], "source": [ "print \"Fastest game is in\", min(gameOutcomes), \"spins.\"\n", "print \"Slowest game is in\", max(gameOutcomes), \"spins.\"" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Median game takes 33 spins.\n", "95th %ile game takes 89 spins.\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import pandas as pd\n", "from scipy import stats, integrate\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "print \"Median game takes\", int(np.median(gameOutcomes)), \"spins.\"\n", "print \"95th %ile game takes\", int(np.percentile(gameOutcomes, 95)), \"spins.\"\n", "sns.distplot(gameOutcomes, axlabel=\"spins to win\", hist_kws={\"histtype\":\"step\", \"alpha\":1, \"color\":\"g\" })" ] } ], "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.10" } }, "nbformat": 4, "nbformat_minor": 2 }