X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=09-resolving-the-bill%2Fresolving-the-bill-solution.ipynb;h=dc846ae48a37dd38c6d0f608bde46ee34550e1d0;hb=9016ac45d2a303fbd6499a902cce3619d1f4f1d4;hp=ed427e6b9a64f08d7e3c66085a448cb1e58cbddd;hpb=737bfafa601efeaee26d9d6cfd3c18ea34722868;p=ou-summer-of-code-2017.git diff --git a/09-resolving-the-bill/resolving-the-bill-solution.ipynb b/09-resolving-the-bill/resolving-the-bill-solution.ipynb index ed427e6..dc846ae 100644 --- a/09-resolving-the-bill/resolving-the-bill-solution.ipynb +++ b/09-resolving-the-bill/resolving-the-bill-solution.ipynb @@ -78,7 +78,19 @@ }, { "cell_type": "code", - "execution_count": 104, + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import sys\n", + "sys.setrecursionlimit(10**6)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -87,7 +99,7 @@ "148" ] }, - "execution_count": 104, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -100,7 +112,7 @@ }, { "cell_type": "code", - "execution_count": 105, + "execution_count": 4, "metadata": { "collapsed": true }, @@ -114,7 +126,7 @@ }, { "cell_type": "code", - "execution_count": 106, + "execution_count": 5, "metadata": { "collapsed": true }, @@ -134,7 +146,7 @@ }, { "cell_type": "code", - "execution_count": 107, + "execution_count": 6, "metadata": { "collapsed": true }, @@ -158,7 +170,7 @@ }, { "cell_type": "code", - "execution_count": 108, + "execution_count": 7, "metadata": { "collapsed": true }, @@ -178,7 +190,7 @@ }, { "cell_type": "code", - "execution_count": 109, + "execution_count": 8, "metadata": { "collapsed": true }, @@ -195,7 +207,7 @@ }, { "cell_type": "code", - "execution_count": 110, + "execution_count": 9, "metadata": { "collapsed": true }, @@ -250,7 +262,7 @@ }, { "cell_type": "code", - "execution_count": 111, + "execution_count": 10, "metadata": { "collapsed": true }, @@ -301,7 +313,7 @@ }, { "cell_type": "code", - "execution_count": 112, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -310,7 +322,7 @@ "22" ] }, - "execution_count": 112, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -323,7 +335,7 @@ }, { "cell_type": "code", - "execution_count": 113, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -332,7 +344,7 @@ "22" ] }, - "execution_count": 113, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -345,7 +357,7 @@ }, { "cell_type": "code", - "execution_count": 114, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -354,7 +366,7 @@ "22" ] }, - "execution_count": 114, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -367,14 +379,14 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "1 loop, best of 3: 7.07 s per loop\n" + "100 loops, best of 3: 13.1 ms per loop\n" ] } ], @@ -382,12 +394,32 @@ "%%timeit\n", "sum(1 for s in bills\n", " if s != 0\n", - " if is_subseq(bills[0], bills[s]))" + " if is_subseq_greedy(bills[0], bills[s]))" ] }, { "cell_type": "code", "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1 loop, best of 3: 7.88 s per loop\n" + ] + } + ], + "source": [ + "%%timeit\n", + "sum(1 for s in bills\n", + " if s != 0\n", + " if is_subseq(bills[0], bills[s]))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, "metadata": { "scrolled": true }, @@ -419,7 +451,7 @@ " 146]" ] }, - "execution_count": 14, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -432,15 +464,15 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 148 ms, sys: 0 ns, total: 148 ms\n", - "Wall time: 148 ms\n" + "CPU times: user 148 ms, sys: 4 ms, total: 152 ms\n", + "Wall time: 150 ms\n" ] }, { @@ -449,7 +481,7 @@ "(True, False)" ] }, - "execution_count": 15, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -460,7 +492,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "metadata": { "collapsed": true }, @@ -471,7 +503,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -698,7 +730,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 31, "metadata": { "collapsed": true }, @@ -709,20 +741,24 @@ " return s2 == s3\n", " elif not s2:\n", " return s1 == s3\n", + " elif len(s1) + len(s2) != len(s3):\n", + " return False\n", " else:\n", - " if s1[-1] == s2[-1] and s1[-1] == s3[-1]:\n", - " return is_interleave_recursive(s1[:-1], s2, s3[:-1]) or is_interleave(s1, s2[:-1], s3[:-1])\n", + " if s1[-1] == s3[-1] and s2[-1] == s3[-1]:\n", + " return (is_interleave_recursive(s1[:-1], s2, s3[:-1]) \n", + " or \n", + " is_interleave_recursive(s1, s2[:-1], s3[:-1]) )\n", " elif s1[-1] == s3[-1]:\n", " return is_interleave_recursive(s1[:-1], s2, s3[:-1])\n", " elif s2[-1] == s3[-1]:\n", - " return is_interleave(s1, s2[:-1], s3[:-1])\n", + " return is_interleave_recursive(s1, s2[:-1], s3[:-1])\n", " else:\n", " return False" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 20, "metadata": { "collapsed": true }, @@ -798,7 +834,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 21, "metadata": { "collapsed": true }, @@ -871,7 +907,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 22, "metadata": { "collapsed": true }, @@ -951,7 +987,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 23, "metadata": { "collapsed": true }, @@ -975,7 +1011,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -984,7 +1020,7 @@ "[30]" ] }, - "execution_count": 23, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -996,7 +1032,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 25, "metadata": {}, "outputs": [ { @@ -1005,7 +1041,7 @@ "[30]" ] }, - "execution_count": 24, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -1017,7 +1053,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 26, "metadata": {}, "outputs": [ { @@ -1026,7 +1062,7 @@ "[30]" ] }, - "execution_count": 25, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -1038,7 +1074,7 @@ }, { "cell_type": "code", - "execution_count": 102, + "execution_count": 27, "metadata": {}, "outputs": [ { @@ -1047,7 +1083,7 @@ "[30]" ] }, - "execution_count": 102, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -1060,7 +1096,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 28, "metadata": {}, "outputs": [ { @@ -1277,7 +1313,7 @@ "True" ] }, - "execution_count": 26, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -1291,7 +1327,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 32, "metadata": {}, "outputs": [ { @@ -1300,7 +1336,7 @@ "[30]" ] }, - "execution_count": 27, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -1312,14 +1348,14 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "1 loop, best of 3: 2.81 s per loop\n" + "1 loop, best of 3: 3.12 s per loop\n" ] } ], @@ -1331,14 +1367,14 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "1 loop, best of 3: 916 ms per loop\n" + "1 loop, best of 3: 971 ms per loop\n" ] } ], @@ -1350,14 +1386,14 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "1 loop, best of 3: 1.45 s per loop\n" + "1 loop, best of 3: 1.56 s per loop\n" ] } ], @@ -1369,14 +1405,14 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "1 loop, best of 3: 705 ms per loop\n" + "1000 loops, best of 3: 510 µs per loop\n" ] } ], @@ -1403,7 +1439,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 37, "metadata": {}, "outputs": [ { @@ -1412,7 +1448,7 @@ "(4.223305555555555, 4, 13, 23.899999999999636)" ] }, - "execution_count": 32, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -1428,7 +1464,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 38, "metadata": {}, "outputs": [ { @@ -1437,7 +1473,7 @@ "(11.13438888888889, 11, 8, 3.8000000000029104)" ] }, - "execution_count": 33, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } @@ -1453,7 +1489,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 39, "metadata": {}, "outputs": [ { @@ -1462,7 +1498,7 @@ "(15.36486111111111, 15, 21, 53.5)" ] }, - "execution_count": 34, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -1487,7 +1523,7 @@ }, { "cell_type": "code", - "execution_count": 95, + "execution_count": 40, "metadata": { "collapsed": true }, @@ -1501,7 +1537,7 @@ }, { "cell_type": "code", - "execution_count": 84, + "execution_count": 41, "metadata": { "collapsed": true }, @@ -1525,7 +1561,7 @@ }, { "cell_type": "code", - "execution_count": 82, + "execution_count": 42, "metadata": {}, "outputs": [ { @@ -1549,7 +1585,7 @@ }, { "cell_type": "code", - "execution_count": 83, + "execution_count": 43, "metadata": {}, "outputs": [ { @@ -1570,7 +1606,7 @@ }, { "cell_type": "code", - "execution_count": 85, + "execution_count": 44, "metadata": {}, "outputs": [ { @@ -1606,7 +1642,7 @@ }, { "cell_type": "code", - "execution_count": 99, + "execution_count": 45, "metadata": {}, "outputs": [ { @@ -1630,7 +1666,7 @@ }, { "cell_type": "code", - "execution_count": 100, + "execution_count": 46, "metadata": {}, "outputs": [ {