5ead51575b7f

Problem 40
[view raw] [browse files]
author Steve Losh <steve@stevelosh.com>
date Sat, 25 Feb 2017 13:19:47 +0000
parents 03ea7bc6d3b9
children e42edcf7b2e7
branches/tags (none)
files src/euler.lisp

Changes

--- a/src/euler.lisp	Sat Feb 25 12:57:22 2017 +0000
+++ b/src/euler.lisp	Sat Feb 25 13:19:47 2017 +0000
@@ -1170,6 +1170,29 @@
     (for p :from 1 :to 1000)
     (finding p :maximizing (length (pythagorean-triplets-of-perimeter p)))))
 
+(defun problem-40 ()
+  ;; An irrational decimal fraction is created by concatenating the positive
+  ;; integers:
+  ;;
+  ;; 0.123456789101112131415161718192021...
+  ;;
+  ;; It can be seen that the 12th digit of the fractional part is 1.
+  ;;
+  ;; If dn represents the nth digit of the fractional part, find the value of
+  ;; the following expression.
+  ;;
+  ;; d1 × d10 × d100 × d1000 × d10000 × d100000 × d1000000
+  (iterate
+    top
+    (with index = 0)
+    (for i :from 1)
+    (iterate (for d :in (digits i))
+             (incf index)
+             (when (member index '(1 10 100 1000 10000 100000 1000000))
+               (in top (multiplying d))
+               (when (= index 1000000)
+                 (in top (terminate)))))))
+
 
 ;;;; Tests --------------------------------------------------------------------
 (def-suite :euler)
@@ -1214,6 +1237,7 @@
 (test p37 (is (= 748317 (problem-37))))
 (test p38 (is (= 932718654 (problem-38))))
 (test p39 (is (= 840 (problem-39))))
+(test p40 (is (= 210 (problem-40))))
 
 
 ;; (run! :euler)