]> gitweb.factorcode.org Git - factor.git/blobdiff - extra/project-euler/148/148.factor
Delete empty unit tests files, remove 1- and 1+, reorder IN: lines in a lot of places...
[factor.git] / extra / project-euler / 148 / 148.factor
index ead9a4e58d4b6dca7d7b138ca67d2e2cdb013328..a75e65218350af7a051c881d383ea9bbfbb66dc7 100644 (file)
@@ -1,24 +1,54 @@
-! Copyright (c) 2008 Eric Mertens
+! Copyright (c) 2008 Eric Mertens.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel math math.functions sequences sequences.lib ;
-
+USING: kernel math math.functions sequences project-euler.common ;
 IN: project-euler.148
 
+! http://projecteuler.net/index.php?section=problems&id=148
+
+! DESCRIPTION
+! -----------
+
+! We can easily verify that none of the entries in the first seven rows of
+! Pascal's triangle are divisible by 7:
+
+!                             1
+!                         1       1
+!                     1       2       1
+!                 1       3       3       1
+!             1       4       6       4       1
+!         1       5      10      10       5       1
+!    1        6      15      20      15       6       1
+
+! However, if we check the first one hundred rows, we will find that only 2361
+! of the 5050 entries are not divisible by 7.
+
+! Find the number of entries which are not divisible by 7 in the first one
+! billion (10^9) rows of Pascal's triangle.
+
+
+! SOLUTION
+! --------
+
 <PRIVATE
 
 : sum-1toN ( n -- sum )
-    dup 1+ * 2/ ; inline
+    dup 1 + * 2/ ; inline
 
 : >base7 ( x -- y )
-    [ dup 0 > ] [ 7 /mod ] [ ] produce nip ;
+    [ dup 0 > ] [ 7 /mod ] produce nip ;
 
 : (use-digit) ( prev x index -- next )
-    [ [ 1+ * ] [ sum-1toN 7 sum-1toN ] bi ] dip ^ * + ;
-
-PRIVATE>
+    [ [ 1 + * ] [ sum-1toN 7 sum-1toN ] bi ] dip ^ * + ;
 
 : (euler148) ( x -- y )
     >base7 0 [ (use-digit) ] reduce-index ;
 
-: euler148 ( -- y )
+PRIVATE>
+
+: euler148 ( -- answer )
     10 9 ^ (euler148) ;
+
+! [ euler148 ] 100 ave-time
+! 0 ms ave run time - 0.17 SD (100 trials)
+
+SOLUTION: euler148