]> gitweb.factorcode.org Git - factor.git/commitdiff
project-euler.common: add a digits>number.
authorJohn Benediktsson <mrjbq7@gmail.com>
Mon, 20 Jul 2015 01:05:29 +0000 (18:05 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Mon, 20 Jul 2015 02:18:47 +0000 (19:18 -0700)
extra/project-euler/024/024.factor
extra/project-euler/032/032.factor
extra/project-euler/035/035.factor
extra/project-euler/038/038.factor
extra/project-euler/041/041.factor
extra/project-euler/043/043.factor
extra/project-euler/055/055.factor
extra/project-euler/079/079.factor
extra/project-euler/common/common.factor

index 71e44ccb1e925dc09570a8274a19d21a46da8eb7..d95dc741eb8e459b3362004ed801235651d7bd39 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (c) 2008 Aaron Schaefer.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel math.combinatorics math.parser project-euler.common
+USING: kernel math.combinatorics project-euler.common
 sequences ;
 IN: project-euler.024
 
@@ -24,7 +24,7 @@ IN: project-euler.024
 ! --------
 
 : euler024 ( -- answer )
-    999999 10 iota permutation 10 digits>integer ;
+    999999 10 iota permutation digits>number ;
 
 ! [ euler024 ] 100 ave-time
 ! 0 ms ave run time - 0.27 SD (100 trials)
index de0cb72609faf3bb0f1d0755d97b32af09289b51..00de5e1a8543deb856a677d94ac3d1ffb3b79a19 100644 (file)
@@ -28,7 +28,7 @@ IN: project-euler.032
 
 : source-032 ( -- seq )
     9 factorial iota [
-        9 iota permutation [ 1 + ] map 10 digits>integer
+        9 iota permutation [ 1 + ] map digits>number
     ] map ;
 
 : 1and4 ( n -- ? )
index ee4af8172016213ced8ab0e03b7a9c50f241b35a..2b50634f1d712e81c240847e96a8944e6eac4f53 100644 (file)
@@ -38,7 +38,7 @@ IN: project-euler.035
 
 : (circular?) ( seq n -- ? )
     dup 0 > [
-        2dup rotate 10 digits>integer
+        2dup rotate digits>number
         prime? [ 1 - (circular?) ] [ 2drop f ] if
     ] [
         2drop t
index 34b4cd91faa5d42dfdcd55fc07250d5c4d9df7b0..92dbc51e1a926753b120d399ec0cc76ce6d5968c 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (c) 2008 Aaron Schaefer.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel math math.parser math.ranges project-euler.common sequences
+USING: kernel math math.ranges project-euler.common sequences
     strings ;
 IN: project-euler.038
 
@@ -37,7 +37,7 @@ IN: project-euler.038
 
 : (concat-product) ( accum n multiplier -- m )
     pick length 8 > [
-        2drop 10 digits>integer
+        2drop digits>number
     ] [
         [ * number>digits append! ] 2keep 1 + (concat-product)
     ] if ;
index 751ddd345052beddbdbd871a29fef2e55bf1a7d1..5bf7075208049a9f47ff3f41be24e8b1b80d673c 100644 (file)
@@ -32,7 +32,7 @@ IN: project-euler.041
 
 : euler041 ( -- answer )
     { 7 6 5 4 3 2 1 } all-permutations
-    [ 10 digits>integer ] map [ prime? ] find nip ;
+    [ digits>number ] map [ prime? ] find nip ;
 
 ! [ euler041 ] 100 ave-time
 ! 64 ms ave run time - 4.22 SD (100 trials)
index ab59843e2155ec30f91ec9cc48a50b6b00cdd990..985c53f745dd2146dd1674f7a5582c22b0a68dcf 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (c) 2008 Aaron Schaefer.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: combinators.short-circuit kernel math math.functions math.combinatorics
-    math.parser math.ranges project-euler.common sequences sets sorting ;
+    math.ranges project-euler.common sequences sets sorting ;
 IN: project-euler.043
 
 ! http://projecteuler.net/index.php?section=problems&id=43
@@ -36,7 +36,7 @@ IN: project-euler.043
 <PRIVATE
 
 : subseq-divisible? ( n index seq -- ? )
-    [ 1 - dup 3 + ] dip subseq 10 digits>integer swap divisor? ;
+    [ 1 - dup 3 + ] dip subseq digits>number swap divisor? ;
 
 : interesting? ( seq -- ? )
     {
@@ -54,7 +54,7 @@ PRIVATE>
 : euler043 ( -- answer )
     1234567890 number>digits 0 [
         dup interesting? [
-            10 digits>integer +
+            digits>number +
         ] [ drop ] if
     ] reduce-permutations ;
 
@@ -93,7 +93,7 @@ PRIVATE>
 PRIVATE>
 
 : euler043a ( -- answer )
-    interesting-pandigitals [ 10 digits>integer ] map-sum ;
+    interesting-pandigitals [ digits>number ] map-sum ;
 
 ! [ euler043a ] 100 ave-time
 ! 10 ms ave run time - 1.37 SD (100 trials)
index 1d8967ff6ce68b3961e3a602e3c4265189f0ce2c..586d76b957d537a04826fbe76ab4a53ca881668b 100644 (file)
@@ -1,6 +1,6 @@
 ! Copyright (c) 2008 Aaron Schaefer.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: kernel math math.parser math.ranges project-euler.common sequences ;
+USING: kernel math math.ranges project-euler.common sequences ;
 IN: project-euler.055
 
 ! http://projecteuler.net/index.php?section=problems&id=55
@@ -45,7 +45,7 @@ IN: project-euler.055
 <PRIVATE
 
 : add-reverse ( n -- m )
-    dup number>digits reverse 10 digits>integer + ;
+    dup number>digits reverse digits>number + ;
 
 : (lychrel?) ( n iteration -- ? )
     dup 50 < [
index 8e575daea9c38c1a057c4a14596427bbbc6755fc..4fb0effffe1c72c3f5418c707cafeb6687aec0b0 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (c) 2008 Aaron Schaefer.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: assocs io.encodings.ascii io.files kernel make math math.parser
-    sequences sets project-euler.common ;
+USING: assocs io.encodings.ascii io.files kernel make math
+    math.parser sequences sets project-euler.common ;
 IN: project-euler.079
 
 ! http://projecteuler.net/index.php?section=problems&id=79
@@ -55,7 +55,7 @@ PRIVATE>
     combine over diff append ;
 
 : euler079 ( -- answer )
-    source-079 >edges topological-sort 10 digits>integer ;
+    source-079 >edges topological-sort digits>number ;
 
 ! [ euler079 ] 100 ave-time
 ! 1 ms ave run time - 0.46 SD (100 trials)
index ac5835fae58608de4b244a05b3a11765f07a5cdc..8978ae036bfb141518125672bd7912215fab8c9d 100644 (file)
@@ -82,6 +82,9 @@ PRIVATE>
 : number>digits ( n -- seq )
     [ dup 0 = not ] [ 10 /mod ] produce reverse! nip ;
 
+: digits>number ( seq -- n )
+    0 [ [ 10 * ] [ + ] bi* ] reduce ;
+
 : number-length ( n -- m )
     abs [
         1