Solution to Project Euler problem 40
parent
8b207d1f48
commit
557bde6206
|
@ -0,0 +1,51 @@
|
|||
! Copyright (c) 2008 Aaron Schaefer.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: kernel math math.parser sequences strings ;
|
||||
IN: project-euler.040
|
||||
|
||||
! http://projecteuler.net/index.php?section=problems&id=40
|
||||
|
||||
! DESCRIPTION
|
||||
! -----------
|
||||
|
||||
! 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
|
||||
|
||||
|
||||
! SOLUTION
|
||||
! --------
|
||||
|
||||
<PRIVATE
|
||||
|
||||
: (concat-upto) ( n limit str -- str )
|
||||
2dup length > [
|
||||
pick number>string over push-all rot 1+ -rot (concat-upto)
|
||||
] [
|
||||
2nip
|
||||
] if ;
|
||||
|
||||
: concat-upto ( n -- str )
|
||||
SBUF" " clone 1 -rot (concat-upto) ;
|
||||
|
||||
: nth-integer ( n str -- m )
|
||||
[ 1- ] dip nth 1string 10 string>integer ;
|
||||
|
||||
PRIVATE>
|
||||
|
||||
: euler040 ( -- answer )
|
||||
1000000 concat-upto { 1 10 100 1000 10000 100000 1000000 }
|
||||
[ swap nth-integer ] with map product ;
|
||||
|
||||
! [ euler040 ] 100 ave-time
|
||||
! 1002 ms run / 43 ms GC ave time - 100 trials
|
||||
|
||||
MAIN: euler040
|
|
@ -39,8 +39,8 @@ IN: project-euler.075
|
|||
! Basically, this makes an array of 1000000 zeros, recursively creates
|
||||
! primitive triples using the three transforms and then increments the array at
|
||||
! index [a+b+c] by one for each triple's sum AND its multiples under 1000000
|
||||
! (to account for non-primitive triples). The answer is just the number of
|
||||
! indexes that equal one.
|
||||
! (to account for non-primitive triples). The answer is just the total number
|
||||
! of indexes that are equal to one.
|
||||
|
||||
SYMBOL: p-count
|
||||
|
||||
|
|
|
@ -11,9 +11,9 @@ USING: definitions io io.files kernel math math.parser project-euler.ave-time
|
|||
project-euler.025 project-euler.026 project-euler.027 project-euler.028
|
||||
project-euler.029 project-euler.030 project-euler.031 project-euler.032
|
||||
project-euler.033 project-euler.034 project-euler.035 project-euler.036
|
||||
project-euler.037 project-euler.038 project-euler.039 project-euler.067
|
||||
project-euler.075 project-euler.134 project-euler.169 project-euler.173
|
||||
project-euler.175 ;
|
||||
project-euler.037 project-euler.038 project-euler.039 project-euler.040
|
||||
project-euler.067 project-euler.075 project-euler.134 project-euler.169
|
||||
project-euler.173 project-euler.175 ;
|
||||
IN: project-euler
|
||||
|
||||
<PRIVATE
|
||||
|
|
Loading…
Reference in New Issue