### Champernowne's Constant - Project Euler Problem 40

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

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}x

*d*

_{10}x

*d*

_{100}x

*d*

_{1000}x

*d*

_{10000}x

*d*

_{100000}x

*d*

_{1000000}

Original Problem Source

**Solution**```
//speed depends on using StringBuilder, non-idiomatic since it is mutable
let rec NumArray start max maxLength (numString:System.Text.StringBuilder) =
if start = max || numString.Length >= maxLength then
numString.Append(start.ToString())
else
let newString = numString.Append(start.ToString())
let nextNum = start + 1
NumArray nextNum max maxLength newString
//cast string to int
let convertStringToInt32 (value:string) =
let mutable result = 0
let found = System.Int32.TryParse(value, &result)
result
//test for conversion
//let test_conversion = convertStringToInt32("1")
//starts timer
let startChampernowne = System.DateTime.Now
//create string builder and initialize it
let numStringStart = new System.Text.StringBuilder()
let startString = numStringStart.Append(".")
//variety of tests
//let test_numArray = NumArray 1 100 100000 numStringStart
//let test_stringPosition1 = test_numArray.Chars(0)
//let test_stringPosition10 = test_numArray.Chars(9)
//let test_stringPosition100 = test_numArray.Chars(99)
//let test_stringPosition12 = test_numArray.Chars(11)
//Create Champernowne's constant nd convert to string
let GetNumArray = NumArray 1 1000000 1000000 startString
let NumArrayToString = GetNumArray.ToString()
//find solution
let ProdOfValues =
convertStringToInt32(NumArrayToString.Chars(1).ToString())
* convertStringToInt32(NumArrayToString.Chars(10).ToString())
* convertStringToInt32(NumArrayToString.Chars(100).ToString())
* convertStringToInt32(NumArrayToString.Chars(1000).ToString())
* convertStringToInt32(NumArrayToString.Chars(10000).ToString())
* convertStringToInt32(NumArrayToString.Chars(100000).ToString())
* convertStringToInt32(NumArrayToString.Chars(1000000).ToString())
//end times
printfn "%s" ((System.DateTime.Now - startChampernowne).ToString())
```