X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=01-ticket-prices%2Fticket-pricing-solution.ipynb;h=8ba20442b6dae95c16ff439de4d42a0c242d26c1;hb=9016ac45d2a303fbd6499a902cce3619d1f4f1d4;hp=59d7046222292e126af1014423668d418e2d8a14;hpb=c9390cdb3351a8dba8cb2f36b2118138099ceb08;p=ou-summer-of-code-2017.git diff --git a/01-ticket-prices/ticket-pricing-solution.ipynb b/01-ticket-prices/ticket-pricing-solution.ipynb index 59d7046..8ba2044 100644 --- a/01-ticket-prices/ticket-pricing-solution.ipynb +++ b/01-ticket-prices/ticket-pricing-solution.ipynb @@ -19,12 +19,12 @@ "For example, the data file might look like this:\n", "\n", "```\n", - "db61bb906d 769 Morgantown 3\n", + "db61bb90 769 Morgantown 3\n", "202c898b5f 1284 Morgantown 21\n", - "def36ffc7d 1514 Giessenmestia 21\n", - "389018bd07 1052 Estacada 21\n", - "a487c4270a 782 Geoje-Si 14\n", - "6caf2584a5 724 Stonington-Island 14\n", + "def36ffcd 1514 Giessenmestia 21\n", + "389018bd0707 1052 Estacada 21\n", + "a487c4270 782 Geoje-Si 14\n", + "6caf2584a55 724 Stonington-Island 14\n", "199608abc5 1209 Nordkapp 21\n", "```" ] @@ -36,7 +36,9 @@ "## Part 1\n", "You have a budget of £1200. How many of the holidays can you afford?\n", "\n", - "Given the example data above, you could afford four of the holidays: the 21 day trip to Morgantown and the trips to Giessenmestia and Nordkapp are all too expensive." + "Given the example data above, you could afford four of the holidays: the trips to Estacada, Geoje-Si and Stonnington-Island, and the three-day trip to Morgantown. \n", + "\n", + "The 21 day trip to Morgantown and the trips to Giessenmestia and Nordkapp are all too expensive." ] }, { @@ -48,18 +50,18 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[['5f12ce1b86', '1192', 'Sukhumi', '14'],\n", - " ['0279c8a91b', '1008', 'Estacada', '14'],\n", - " ['1faea40e9c', '1085', 'Tambon-Pa-Fa', '14']]" + "[['dda7d369', '1546', 'Uzupis', '21'],\n", + " ['68022753', '1239', 'Mamula', '21'],\n", + " ['b261dbd1cef', '996', 'Holmegaard', '21']]" ] }, - "execution_count": 7, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -67,7 +69,7 @@ "source": [ "holidays = []\n", "with open('01-holidays.txt') as f:\n", - " for hol_line in f.readlines():\n", + " for hol_line in f:\n", " holidays.append(hol_line.split())\n", " \n", "holidays[:3]" @@ -75,16 +77,40 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[['dda7d369', '1546', 'Uzupis', '21'],\n", + " ['68022753', '1239', 'Mamula', '21'],\n", + " ['b261dbd1cef', '996', 'Holmegaard', '21']]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "holidays = [line.split() for line in open('01-holidays.txt')]\n", + " \n", + "holidays[:3]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "57" + "59" ] }, - "execution_count": 25, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -98,6 +124,47 @@ "len(affordable_holidays)" ] }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "59" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "affordable_holidays = [h for h in holidays if int(h[1]) <= 1200]\n", + "len(affordable_holidays)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "124" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(holidays)" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -107,22 +174,22 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "57" + "59" ] }, - "execution_count": 6, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "sum(1 for h in open('01-holidays.txt').readlines() if int(h.split()[1]) <= 1200)" + "sum(1 for h in open('01-holidays.txt') if int(h.split()[1]) <= 1200)" ] }, { @@ -151,16 +218,18 @@ "\n", "## Example\n", "\n", - "Given the holiday list above, the holiday to Geoje-Si (with the standard weighting of 1) has a value of $\\frac{14}{782} = 0.0179$ nights per pound. The best value holiday is the 21 day trip to Morgantown, with a value of $2.9 \\times \\frac{21}{1284} = 0.0474$ nights per pound. Unfortunately, it's unaffordable. \n", + "Given the holiday list above, the holiday to Geoje-Si (with the standard weighting of 1) has a value of $\\frac{14}{782} = 0.0179$ nights per pound. \n", "\n", "The trip to Estacada looks promising, at $\\frac{21}{1052} = 0.0200$ nights per pound. Unfortunately, the weighting for Estacada is low, to the adjusted cost is $0.4 \\times \\frac{21}{1052} = 0.00798$ nights per pound.\n", "\n", + "The best value holiday is the 21 day trip to Morgantown, with a value of $2.9 \\times \\frac{21}{1284} = 0.0474$ nights per pound. Unfortunately, it's unaffordable. \n", + "\n", "The best value affordable holiday is the trip to Stonnington Island, with $\\frac{14}{1284} = 0.0193$ nights per pound." ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 16, "metadata": { "collapsed": true }, @@ -173,8 +242,10 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": {}, + "execution_count": 17, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "def value_of_destination(name):\n", @@ -186,8 +257,10 @@ }, { "cell_type": "code", - "execution_count": 32, - "metadata": {}, + "execution_count": 18, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "def value_of_holiday(holiday):\n", @@ -198,16 +271,16 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'dc16c9b87f'" + "'ee064e1e2ea'" ] }, - "execution_count": 36, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -233,32 +306,87 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'dc16c9b87f'" + "'ee064e1e2ea'" ] }, - "execution_count": 34, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ + "# Right answer\n", "max(affordable_holidays, key=value_of_holiday)[0]" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'c86e2e5826'" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Answer if you don't filter by affordability\n", + "max(holidays, key=value_of_holiday)[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'f60e203aaaf9'" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Answer if you don't scale by perceived value\n", + "max(affordable_holidays, key=lambda h: float(h[3]) / float(h[1]))[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'f60e203aaaf9'" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Answer if you don't scale by perceived value, AND don't filter by affordability\n", + "max(holidays, key=lambda h: float(h[3]) / float(h[1]))[0]" + ] } ], "metadata": {