Added additional solutions to problem 31.
parent
c34ebd6181
commit
1444f7cc7e
|
@ -29,9 +29,7 @@
|
|||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
|
@ -51,59 +49,58 @@
|
|||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from math import ceil\n",
|
||||
"\n",
|
||||
"r = 200\n",
|
||||
"c = 0\n",
|
||||
"def calculate():\n",
|
||||
" r = 200\n",
|
||||
" c = 0\n",
|
||||
"\n",
|
||||
"if r % 200 == 0:\n",
|
||||
" c += 1\n",
|
||||
"for p200 in range(ceil(r / 200)):\n",
|
||||
" r200 = r - p200 * 200\n",
|
||||
" if r200 % 100 == 0:\n",
|
||||
" if r % 200 == 0:\n",
|
||||
" c += 1\n",
|
||||
" for p100 in range(ceil(r200 / 100)):\n",
|
||||
" r100 = r200 - p100 * 100\n",
|
||||
" if r100 % 50 == 0:\n",
|
||||
" for p200 in range(ceil(r / 200)):\n",
|
||||
" r200 = r - p200 * 200\n",
|
||||
" if r200 % 100 == 0:\n",
|
||||
" c += 1\n",
|
||||
" for p50 in range(ceil(r100 / 50)):\n",
|
||||
" r50 = r100 - p50 * 50\n",
|
||||
" if r50 % 20 == 0:\n",
|
||||
" for p100 in range(ceil(r200 / 100)):\n",
|
||||
" r100 = r200 - p100 * 100\n",
|
||||
" if r100 % 50 == 0:\n",
|
||||
" c += 1\n",
|
||||
" for p20 in range(ceil(r50 / 20)):\n",
|
||||
" r20 = r50 - p20 * 20\n",
|
||||
" if r20 <= 0:\n",
|
||||
" break\n",
|
||||
" if r20 % 10 == 0:\n",
|
||||
" for p50 in range(ceil(r100 / 50)):\n",
|
||||
" r50 = r100 - p50 * 50\n",
|
||||
" if r50 % 20 == 0:\n",
|
||||
" c += 1\n",
|
||||
" for p10 in range(ceil(r20 / 10)):\n",
|
||||
" r10 = r20 - p10 * 10\n",
|
||||
" if r10 % 5 == 0:\n",
|
||||
" for p20 in range(ceil(r50 / 20)):\n",
|
||||
" r20 = r50 - p20 * 20\n",
|
||||
" if r20 <= 0:\n",
|
||||
" break\n",
|
||||
" if r20 % 10 == 0:\n",
|
||||
" c += 1\n",
|
||||
" for p5 in range(ceil(r10 / 5)):\n",
|
||||
" r5 = r10 - p5 * 5\n",
|
||||
" if r5 % 2 == 0:\n",
|
||||
" for p10 in range(ceil(r20 / 10)):\n",
|
||||
" r10 = r20 - p10 * 10\n",
|
||||
" if r10 % 5 == 0:\n",
|
||||
" c += 1\n",
|
||||
" for p2 in range(ceil(r5 / 2)):\n",
|
||||
" r2 = r5 - p2 * 2\n",
|
||||
" if r2 % 1 == 0:\n",
|
||||
" for p5 in range(ceil(r10 / 5)):\n",
|
||||
" r5 = r10 - p5 * 5\n",
|
||||
" if r5 % 2 == 0:\n",
|
||||
" c += 1\n",
|
||||
" for p2 in range(ceil(r5 / 2)):\n",
|
||||
" r2 = r5 - p2 * 2\n",
|
||||
" if r2 % 1 == 0:\n",
|
||||
" c += 1\n",
|
||||
"\n",
|
||||
"s = c"
|
||||
" return c\n",
|
||||
"\n",
|
||||
"s = calculate()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
|
@ -117,13 +114,128 @@
|
|||
"print(s)\n",
|
||||
"assert(s == 73682)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"I came up with a more concise solution that can be implemented in Scheme. I would like to compare the performance of the solutions."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 34,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"73682\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def count_change(change, coins):\n",
|
||||
" if not coins:\n",
|
||||
" return 0\n",
|
||||
" count = 0\n",
|
||||
" coin, coins = coins[0], coins[1:]\n",
|
||||
" for i in range(change // coin + 1):\n",
|
||||
" if change - i * coin == 0:\n",
|
||||
" count += 1\n",
|
||||
" continue\n",
|
||||
" if change - i * coin < 0:\n",
|
||||
" break\n",
|
||||
" count += count_change(change - i * coin, coins)\n",
|
||||
" return count\n",
|
||||
"\n",
|
||||
"def calculate_iterative():\n",
|
||||
" return count_change(200, [200, 100, 50, 20, 10, 5, 2, 1])\n",
|
||||
"\n",
|
||||
"s = calculate_iterative()\n",
|
||||
"print(s)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 35,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"0.16300111500095227\n",
|
||||
"11.429953110000497\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import timeit\n",
|
||||
"print(timeit.timeit(calculate, number=10))\n",
|
||||
"print(timeit.timeit(calculate_iterative, number=10))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Turns out I was way smarter than I thought when I have developped calculate. It checks the remainder and by doing that saves a ton of iterations."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 36,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"73682\n",
|
||||
"0.34602016500139143\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def count_change(change, coins):\n",
|
||||
" count = 0\n",
|
||||
" coin, coins = coins[0], coins[1:]\n",
|
||||
"\n",
|
||||
" if change % coin == 0:\n",
|
||||
" count += 1\n",
|
||||
" \n",
|
||||
" if not coins:\n",
|
||||
" return count\n",
|
||||
" \n",
|
||||
" for i in range(ceil(change / coin)):\n",
|
||||
" count += count_change(change - i * coin, coins)\n",
|
||||
" return count\n",
|
||||
"\n",
|
||||
"def calculate_iterative():\n",
|
||||
" return count_change(200, [200, 100, 50, 20, 10, 5, 2, 1])\n",
|
||||
"\n",
|
||||
"s = calculate_iterative()\n",
|
||||
"print(s)\n",
|
||||
"print(timeit.timeit(calculate_iterative, number=10))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"completion_date": "Fri, 25 Aug 2017, 13:02",
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"language": "python",
|
||||
"language": "python3.6",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
|
@ -136,7 +248,7 @@
|
|||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.5.4"
|
||||
"version": "3.6.5"
|
||||
},
|
||||
"tags": [
|
||||
"recursion",
|
||||
|
|
|
@ -11814,48 +11814,51 @@ div#notebook {
|
|||
</div>
|
||||
<div class="cell border-box-sizing code_cell rendered">
|
||||
<div class="input">
|
||||
<div class="prompt input_prompt">In [2]:</div>
|
||||
<div class="prompt input_prompt">In [8]:</div>
|
||||
<div class="inner_cell">
|
||||
<div class="input_area">
|
||||
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">math</span> <span class="k">import</span> <span class="n">ceil</span>
|
||||
|
||||
<span class="n">r</span> <span class="o">=</span> <span class="mi">200</span>
|
||||
<span class="n">c</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="k">def</span> <span class="nf">calculate</span><span class="p">():</span>
|
||||
<span class="n">r</span> <span class="o">=</span> <span class="mi">200</span>
|
||||
<span class="n">c</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">r</span> <span class="o">%</span> <span class="mi">200</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">c</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="k">for</span> <span class="n">p200</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ceil</span><span class="p">(</span><span class="n">r</span> <span class="o">/</span> <span class="mi">200</span><span class="p">)):</span>
|
||||
<span class="n">r200</span> <span class="o">=</span> <span class="n">r</span> <span class="o">-</span> <span class="n">p200</span> <span class="o">*</span> <span class="mi">200</span>
|
||||
<span class="k">if</span> <span class="n">r200</span> <span class="o">%</span> <span class="mi">100</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">r</span> <span class="o">%</span> <span class="mi">200</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">c</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="k">for</span> <span class="n">p100</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ceil</span><span class="p">(</span><span class="n">r200</span> <span class="o">/</span> <span class="mi">100</span><span class="p">)):</span>
|
||||
<span class="n">r100</span> <span class="o">=</span> <span class="n">r200</span> <span class="o">-</span> <span class="n">p100</span> <span class="o">*</span> <span class="mi">100</span>
|
||||
<span class="k">if</span> <span class="n">r100</span> <span class="o">%</span> <span class="mi">50</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">p200</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ceil</span><span class="p">(</span><span class="n">r</span> <span class="o">/</span> <span class="mi">200</span><span class="p">)):</span>
|
||||
<span class="n">r200</span> <span class="o">=</span> <span class="n">r</span> <span class="o">-</span> <span class="n">p200</span> <span class="o">*</span> <span class="mi">200</span>
|
||||
<span class="k">if</span> <span class="n">r200</span> <span class="o">%</span> <span class="mi">100</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">c</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="k">for</span> <span class="n">p50</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ceil</span><span class="p">(</span><span class="n">r100</span> <span class="o">/</span> <span class="mi">50</span><span class="p">)):</span>
|
||||
<span class="n">r50</span> <span class="o">=</span> <span class="n">r100</span> <span class="o">-</span> <span class="n">p50</span> <span class="o">*</span> <span class="mi">50</span>
|
||||
<span class="k">if</span> <span class="n">r50</span> <span class="o">%</span> <span class="mi">20</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">p100</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ceil</span><span class="p">(</span><span class="n">r200</span> <span class="o">/</span> <span class="mi">100</span><span class="p">)):</span>
|
||||
<span class="n">r100</span> <span class="o">=</span> <span class="n">r200</span> <span class="o">-</span> <span class="n">p100</span> <span class="o">*</span> <span class="mi">100</span>
|
||||
<span class="k">if</span> <span class="n">r100</span> <span class="o">%</span> <span class="mi">50</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">c</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="k">for</span> <span class="n">p20</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ceil</span><span class="p">(</span><span class="n">r50</span> <span class="o">/</span> <span class="mi">20</span><span class="p">)):</span>
|
||||
<span class="n">r20</span> <span class="o">=</span> <span class="n">r50</span> <span class="o">-</span> <span class="n">p20</span> <span class="o">*</span> <span class="mi">20</span>
|
||||
<span class="k">if</span> <span class="n">r20</span> <span class="o"><=</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="k">break</span>
|
||||
<span class="k">if</span> <span class="n">r20</span> <span class="o">%</span> <span class="mi">10</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">p50</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ceil</span><span class="p">(</span><span class="n">r100</span> <span class="o">/</span> <span class="mi">50</span><span class="p">)):</span>
|
||||
<span class="n">r50</span> <span class="o">=</span> <span class="n">r100</span> <span class="o">-</span> <span class="n">p50</span> <span class="o">*</span> <span class="mi">50</span>
|
||||
<span class="k">if</span> <span class="n">r50</span> <span class="o">%</span> <span class="mi">20</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">c</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="k">for</span> <span class="n">p10</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ceil</span><span class="p">(</span><span class="n">r20</span> <span class="o">/</span> <span class="mi">10</span><span class="p">)):</span>
|
||||
<span class="n">r10</span> <span class="o">=</span> <span class="n">r20</span> <span class="o">-</span> <span class="n">p10</span> <span class="o">*</span> <span class="mi">10</span>
|
||||
<span class="k">if</span> <span class="n">r10</span> <span class="o">%</span> <span class="mi">5</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">p20</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ceil</span><span class="p">(</span><span class="n">r50</span> <span class="o">/</span> <span class="mi">20</span><span class="p">)):</span>
|
||||
<span class="n">r20</span> <span class="o">=</span> <span class="n">r50</span> <span class="o">-</span> <span class="n">p20</span> <span class="o">*</span> <span class="mi">20</span>
|
||||
<span class="k">if</span> <span class="n">r20</span> <span class="o"><=</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="k">break</span>
|
||||
<span class="k">if</span> <span class="n">r20</span> <span class="o">%</span> <span class="mi">10</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">c</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="k">for</span> <span class="n">p5</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ceil</span><span class="p">(</span><span class="n">r10</span> <span class="o">/</span> <span class="mi">5</span><span class="p">)):</span>
|
||||
<span class="n">r5</span> <span class="o">=</span> <span class="n">r10</span> <span class="o">-</span> <span class="n">p5</span> <span class="o">*</span> <span class="mi">5</span>
|
||||
<span class="k">if</span> <span class="n">r5</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">p10</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ceil</span><span class="p">(</span><span class="n">r20</span> <span class="o">/</span> <span class="mi">10</span><span class="p">)):</span>
|
||||
<span class="n">r10</span> <span class="o">=</span> <span class="n">r20</span> <span class="o">-</span> <span class="n">p10</span> <span class="o">*</span> <span class="mi">10</span>
|
||||
<span class="k">if</span> <span class="n">r10</span> <span class="o">%</span> <span class="mi">5</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">c</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="k">for</span> <span class="n">p2</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ceil</span><span class="p">(</span><span class="n">r5</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)):</span>
|
||||
<span class="n">r2</span> <span class="o">=</span> <span class="n">r5</span> <span class="o">-</span> <span class="n">p2</span> <span class="o">*</span> <span class="mi">2</span>
|
||||
<span class="k">if</span> <span class="n">r2</span> <span class="o">%</span> <span class="mi">1</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">p5</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ceil</span><span class="p">(</span><span class="n">r10</span> <span class="o">/</span> <span class="mi">5</span><span class="p">)):</span>
|
||||
<span class="n">r5</span> <span class="o">=</span> <span class="n">r10</span> <span class="o">-</span> <span class="n">p5</span> <span class="o">*</span> <span class="mi">5</span>
|
||||
<span class="k">if</span> <span class="n">r5</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">c</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="k">for</span> <span class="n">p2</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ceil</span><span class="p">(</span><span class="n">r5</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)):</span>
|
||||
<span class="n">r2</span> <span class="o">=</span> <span class="n">r5</span> <span class="o">-</span> <span class="n">p2</span> <span class="o">*</span> <span class="mi">2</span>
|
||||
<span class="k">if</span> <span class="n">r2</span> <span class="o">%</span> <span class="mi">1</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">c</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
|
||||
<span class="n">s</span> <span class="o">=</span> <span class="n">c</span>
|
||||
<span class="k">return</span> <span class="n">c</span>
|
||||
|
||||
<span class="n">s</span> <span class="o">=</span> <span class="n">calculate</span><span class="p">()</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -11863,7 +11866,7 @@ div#notebook {
|
|||
</div>
|
||||
<div class="cell border-box-sizing code_cell rendered">
|
||||
<div class="input">
|
||||
<div class="prompt input_prompt">In [3]:</div>
|
||||
<div class="prompt input_prompt">In [9]:</div>
|
||||
<div class="inner_cell">
|
||||
<div class="input_area">
|
||||
<div class=" highlight hl-ipython3"><pre><span></span><span class="nb">print</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
|
||||
|
@ -11884,6 +11887,140 @@ div#notebook {
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
|
||||
</div>
|
||||
<div class="inner_cell">
|
||||
<div class="text_cell_render border-box-sizing rendered_html">
|
||||
<p>I came up with a more concise solution that can be implemented in Scheme. I would like to compare the performance of the solutions.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cell border-box-sizing code_cell rendered">
|
||||
<div class="input">
|
||||
<div class="prompt input_prompt">In [34]:</div>
|
||||
<div class="inner_cell">
|
||||
<div class="input_area">
|
||||
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">count_change</span><span class="p">(</span><span class="n">change</span><span class="p">,</span> <span class="n">coins</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">coins</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="mi">0</span>
|
||||
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">coin</span><span class="p">,</span> <span class="n">coins</span> <span class="o">=</span> <span class="n">coins</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">coins</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
|
||||
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">change</span> <span class="o">//</span> <span class="n">coin</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">change</span> <span class="o">-</span> <span class="n">i</span> <span class="o">*</span> <span class="n">coin</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="k">continue</span>
|
||||
<span class="k">if</span> <span class="n">change</span> <span class="o">-</span> <span class="n">i</span> <span class="o">*</span> <span class="n">coin</span> <span class="o"><</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="k">break</span>
|
||||
<span class="n">count</span> <span class="o">+=</span> <span class="n">count_change</span><span class="p">(</span><span class="n">change</span> <span class="o">-</span> <span class="n">i</span> <span class="o">*</span> <span class="n">coin</span><span class="p">,</span> <span class="n">coins</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">count</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">calculate_iterative</span><span class="p">():</span>
|
||||
<span class="k">return</span> <span class="n">count_change</span><span class="p">(</span><span class="mi">200</span><span class="p">,</span> <span class="p">[</span><span class="mi">200</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">20</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span>
|
||||
|
||||
<span class="n">s</span> <span class="o">=</span> <span class="n">calculate_iterative</span><span class="p">()</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="output_wrapper">
|
||||
<div class="output">
|
||||
<div class="output_area">
|
||||
<div class="prompt"></div>
|
||||
<div class="output_subarea output_stream output_stdout output_text">
|
||||
<pre>73682
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cell border-box-sizing code_cell rendered">
|
||||
<div class="input">
|
||||
<div class="prompt input_prompt">In [35]:</div>
|
||||
<div class="inner_cell">
|
||||
<div class="input_area">
|
||||
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">timeit</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">timeit</span><span class="o">.</span><span class="n">timeit</span><span class="p">(</span><span class="n">calculate</span><span class="p">,</span> <span class="n">number</span><span class="o">=</span><span class="mi">10</span><span class="p">))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">timeit</span><span class="o">.</span><span class="n">timeit</span><span class="p">(</span><span class="n">calculate_iterative</span><span class="p">,</span> <span class="n">number</span><span class="o">=</span><span class="mi">10</span><span class="p">))</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="output_wrapper">
|
||||
<div class="output">
|
||||
<div class="output_area">
|
||||
<div class="prompt"></div>
|
||||
<div class="output_subarea output_stream output_stdout output_text">
|
||||
<pre>0.16300111500095227
|
||||
11.429953110000497
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
|
||||
</div>
|
||||
<div class="inner_cell">
|
||||
<div class="text_cell_render border-box-sizing rendered_html">
|
||||
<p>Turns out I was way smarter than I thought when I have developped calculate. It checks the remainder and by doing that saves a ton of iterations.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cell border-box-sizing code_cell rendered">
|
||||
<div class="input">
|
||||
<div class="prompt input_prompt">In [36]:</div>
|
||||
<div class="inner_cell">
|
||||
<div class="input_area">
|
||||
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">count_change</span><span class="p">(</span><span class="n">change</span><span class="p">,</span> <span class="n">coins</span><span class="p">):</span>
|
||||
<span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">coin</span><span class="p">,</span> <span class="n">coins</span> <span class="o">=</span> <span class="n">coins</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">coins</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">change</span> <span class="o">%</span> <span class="n">coin</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">coins</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">count</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ceil</span><span class="p">(</span><span class="n">change</span> <span class="o">/</span> <span class="n">coin</span><span class="p">)):</span>
|
||||
<span class="n">count</span> <span class="o">+=</span> <span class="n">count_change</span><span class="p">(</span><span class="n">change</span> <span class="o">-</span> <span class="n">i</span> <span class="o">*</span> <span class="n">coin</span><span class="p">,</span> <span class="n">coins</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">count</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">calculate_iterative</span><span class="p">():</span>
|
||||
<span class="k">return</span> <span class="n">count_change</span><span class="p">(</span><span class="mi">200</span><span class="p">,</span> <span class="p">[</span><span class="mi">200</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">20</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span>
|
||||
|
||||
<span class="n">s</span> <span class="o">=</span> <span class="n">calculate_iterative</span><span class="p">()</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">timeit</span><span class="o">.</span><span class="n">timeit</span><span class="p">(</span><span class="n">calculate_iterative</span><span class="p">,</span> <span class="n">number</span><span class="o">=</span><span class="mi">10</span><span class="p">))</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="output_wrapper">
|
||||
<div class="output">
|
||||
<div class="output_area">
|
||||
<div class="prompt"></div>
|
||||
<div class="output_subarea output_stream output_stdout output_text">
|
||||
<pre>73682
|
||||
0.34602016500139143
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cell border-box-sizing code_cell rendered">
|
||||
<div class="input">
|
||||
<div class="prompt input_prompt">In [ ]:</div>
|
||||
<div class="inner_cell">
|
||||
<div class="input_area">
|
||||
<div class=" highlight hl-ipython3"><pre><span></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
|
Loading…
Reference in New Issue