119 lines
2.7 KiB
Plaintext
119 lines
2.7 KiB
Plaintext
|
{
|
|||
|
"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
|
|||
|
}
|