# Project Euler Problem 40: Champernowne’s Constant¶

The source code for this problem can be found here.

## Problem Statement¶

An irrational decimal fraction is created by concatenating the positive integers:

$0.12345678910\color{red}{1}112131415161718192021 \dots$

It can be seen that the $$12^{th}$$ digit of the fractional part is $$1$$.

If $$d_n$$ represents the $$n^{th}$$ digit of the fractional part, find the value of the following expression.

$d_1 \times d_{10} \times d_{100} \times d_{1000} \times d_{10000} \times d_{100000} \times d_{1000000}$

## Solution Discussion¶

Explicitly building this decimal representation is not clever but will work, a $$1000000$$ digit number is not large in the scheme of things.

Use Python to build the fractional part as a string of decimal digits and then simply index into the relevant points to extract each $$d_i$$ needed. Finally, multiply these values to compute the answer.

## Solution Implementation¶

from functools import reduce
from operator import mul

def solve():
""" Compute the answer to Project Euler's problem #40 """

upper_limit = 200000  # large enough s.t. the total string length exceeds the highest index

fractional_string = "".join(["{}".format(i + 1) for i in range(upper_limit)])  # build the string representation

# Extract the relevant d_i values
indices = [1, 10, 100, 1000, 10000, 100000, 1000000]
digits = [fractional_string[i - 1] for i in indices]  # Python using 0-based indices

# Multiply each d_i together to get the answer
answer = reduce(mul, map(int, digits))

return answer

expected_answer = 210

solutions.problem40.solve()

Compute the answer to Project Euler’s problem #40