From 3fbb9f708179acf6f796c0be89062d9118565676 Mon Sep 17 00:00:00 2001 From: Samuel Tardieu Date: Sat, 27 Dec 2008 21:46:01 +0100 Subject: [PATCH] Project Euler - problem 57 --- extra/project-euler/057/057.factor | 43 ++++++++++++++++++++++++ extra/project-euler/project-euler.factor | 14 ++++---- 2 files changed, 50 insertions(+), 7 deletions(-) create mode 100644 extra/project-euler/057/057.factor diff --git a/extra/project-euler/057/057.factor b/extra/project-euler/057/057.factor new file mode 100644 index 0000000000..53240b0ec1 --- /dev/null +++ b/extra/project-euler/057/057.factor @@ -0,0 +1,43 @@ +! Copyright (c) 2008 Samuel Tardieu +! See http://factorcode.org/license.txt for BSD license. +USING: kernel math math.functions math.parser sequences ; +IN: project-euler.057 + +! http://projecteuler.net/index.php?section=problems&id=57 + +! DESCRIPTION +! ----------- + +! It is possible to show that the square root of two can be expressed +! as an infinite continued fraction. + +! √ 2 = 1 + 1/(2 + 1/(2 + 1/(2 + ... ))) = 1.414213... + +! By expanding this for the first four iterations, we get: + +! 1 + 1/2 = 3/2 = 1.5 +! 1 + 1/(2 + 1/2) = 7/5 = 1.4 +! 1 + 1/(2 + 1/(2 + 1/2)) = 17/12 = 1.41666... +! 1 + 1/(2 + 1/(2 + 1/(2 + 1/2))) = 41/29 = 1.41379... + +! The next three expansions are 99/70, 239/169, and 577/408, but the +! eighth expansion, 1393/985, is the first example where the number of +! digits in the numerator exceeds the number of digits in the +! denominator. + +! In the first one-thousand expansions, how many fractions contain a +! numerator with more digits than denominator? + +! SOLUTION +! -------- + +: longer-numerator? ( seq -- ? ) + >fraction [ number>string length ] bi@ > ; inline + +: euler057 ( -- answer ) + 0 1000 [ drop 2 + recip dup 1+ longer-numerator? ] count nip ; + +! [ euler057 ] time +! 3.375118 seconds + +MAIN: euler057 diff --git a/extra/project-euler/project-euler.factor b/extra/project-euler/project-euler.factor index f9fa0f4f18..318cf8a2bb 100644 --- a/extra/project-euler/project-euler.factor +++ b/extra/project-euler/project-euler.factor @@ -15,13 +15,13 @@ USING: definitions io io.files io.pathnames kernel math math.parser project-euler.041 project-euler.042 project-euler.043 project-euler.044 project-euler.045 project-euler.046 project-euler.047 project-euler.048 project-euler.052 project-euler.053 project-euler.055 project-euler.056 - project-euler.059 project-euler.067 project-euler.071 project-euler.073 - project-euler.075 project-euler.076 project-euler.079 project-euler.092 - project-euler.097 project-euler.099 project-euler.100 project-euler.116 - project-euler.117 project-euler.134 project-euler.148 project-euler.150 - project-euler.151 project-euler.164 project-euler.169 project-euler.173 - project-euler.175 project-euler.186 project-euler.190 project-euler.203 - project-euler.215 ; + project-euler.057 project-euler.059 project-euler.067 project-euler.071 + project-euler.073 project-euler.075 project-euler.076 project-euler.079 + project-euler.092 project-euler.097 project-euler.099 project-euler.100 + project-euler.116 project-euler.117 project-euler.134 project-euler.148 + project-euler.150 project-euler.151 project-euler.164 project-euler.169 + project-euler.173 project-euler.175 project-euler.186 project-euler.190 + project-euler.203 project-euler.215 ; IN: project-euler