Solved problem 40.
This commit is contained in:
11890
ipython/EulerProblem040.html
Normal file
11890
ipython/EulerProblem040.html
Normal file
File diff suppressed because it is too large
Load Diff
118
ipython/EulerProblem040.ipynb
Normal file
118
ipython/EulerProblem040.ipynb
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
{
|
||||||
|
"cells": [
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"# Champernowne's constant (Euler Problem 40)\n",
|
||||||
|
"\n",
|
||||||
|
"<https://projecteuler.net/problem=40>\n",
|
||||||
|
"\n",
|
||||||
|
"An irrational decimal fraction is created by concatenating the positive integers:\n",
|
||||||
|
"\n",
|
||||||
|
" 0.123456789101112131415161718192021...\n",
|
||||||
|
"\n",
|
||||||
|
"It can be seen that the 12th digit of the fractional part is 1.\n",
|
||||||
|
"\n",
|
||||||
|
"If dn represents the nth digit of the fractional part, find the value of the following expression.\n",
|
||||||
|
"\n",
|
||||||
|
"$d_{1} × d_{10} × d_{100} × d_{1000} × d_{10000} × d_{100000} × d_{1000000}$"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"I do not see why we cannot hold $8 bytes \\times 10^{6} = 8 MB$ in memory."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 1,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"def get_irrational_fraction(digits_max):\n",
|
||||||
|
" s = []\n",
|
||||||
|
" n = 1\n",
|
||||||
|
" digits = 0\n",
|
||||||
|
" while digits < digits_max:\n",
|
||||||
|
" s.append(str(n))\n",
|
||||||
|
" digits += len(str(n))\n",
|
||||||
|
" n += 1\n",
|
||||||
|
" return \"\".join(s)\n",
|
||||||
|
"\n",
|
||||||
|
"assert(get_irrational_fraction(20)[12] == \"1\")\n",
|
||||||
|
"\n",
|
||||||
|
"f = get_irrational_fraction(1000001)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"Okay, we got the fractional. No we get the digits at the different positions and calculate the product. For that purpose we reuse our poduct function from problem 8."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 2,
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": true
|
||||||
|
},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"def product(xs):\n",
|
||||||
|
" from operator import mul\n",
|
||||||
|
" from functools import reduce\n",
|
||||||
|
" return reduce(mul, xs, 1)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 3,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"210\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"s = product(map(int, [f[10**i - 1] for i in range(7)]))\n",
|
||||||
|
"print(s)\n",
|
||||||
|
"assert(s == 210)"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"metadata": {
|
||||||
|
"completion_date": "Sun, 20 May 2018, 00:40",
|
||||||
|
"kernelspec": {
|
||||||
|
"display_name": "Python 3",
|
||||||
|
"language": "python3.5",
|
||||||
|
"name": "python3"
|
||||||
|
},
|
||||||
|
"language_info": {
|
||||||
|
"codemirror_mode": {
|
||||||
|
"name": "ipython",
|
||||||
|
"version": 3
|
||||||
|
},
|
||||||
|
"file_extension": ".py",
|
||||||
|
"mimetype": "text/x-python",
|
||||||
|
"name": "python",
|
||||||
|
"nbconvert_exporter": "python",
|
||||||
|
"pygments_lexer": "ipython3",
|
||||||
|
"version": "3.5.5"
|
||||||
|
},
|
||||||
|
"tags": [
|
||||||
|
"champernowne",
|
||||||
|
"product",
|
||||||
|
"fraction"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"nbformat": 4,
|
||||||
|
"nbformat_minor": 2
|
||||||
|
}
|
||||||
@@ -589,6 +589,21 @@
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>Problem 040</td>
|
||||||
|
<td>Sun, 20 May 2018, 00:40</td>
|
||||||
|
<td><a href="EulerProblem040.html">Problem 040</a></td>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
<kbd>champernowne</kbd>
|
||||||
|
|
||||||
|
<kbd>product</kbd>
|
||||||
|
|
||||||
|
<kbd>fraction</kbd>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>Problem 067</td>
|
<td>Problem 067</td>
|
||||||
<td>Fri, 5 Sep 2014, 07:36</td>
|
<td>Fri, 5 Sep 2014, 07:36</td>
|
||||||
|
|||||||
Reference in New Issue
Block a user