diff --git a/extra/project-euler/051/051.factor b/extra/project-euler/051/051.factor index b42a491e3c..ff45e9e58a 100644 --- a/extra/project-euler/051/051.factor +++ b/extra/project-euler/051/051.factor @@ -1,38 +1,60 @@ ! Copyright (C) 2009 Jon Harper. ! See http://factorcode.org/license.txt for BSD license. + +! http://projecteuler.net/index.php?section=problems&id=1 + +! DESCRIPTION +! ----------- + + +! By replacing the first digit of *3, it turns out that +! six of the nine possible values: +! 13, 23, 43, 53, 73, and 83, are all prime. +! By replacing the third and fourth digits of 56**3 with the same digit, +! this 5-digit number is the first example having seven primes among +! the ten generated numbers, yielding the family: +! 56003, 56113, 56333, 56443, 56663, 56773, and 56993. +! Consequently 56003, being the first member of this family, +! is the smallest prime with this property. +! +! Find the smallest prime which, by replacing part of the number +! (not necessarily adjacent digits) with the same digit, +! is part of an eight prime value family. + +! SOLUTION +! -------- + +! for each prime number, count the families it belongs to. When one reaches count of 8, stop, and get the smallest number by replacing * with ones. + USING: assocs kernel math math.combinatorics math.functions math.parser math.primes namespaces project-euler.common -sequences sets strings grouping math.ranges arrays ; +sequences sets strings grouping math.ranges arrays fry math.order ; IN: project-euler.051 - + - [ nip values [ fill-*-with-ones string>number ] map infimum ] + [ nip values [ fill-*-with-ones string>number ] [ min ] map-reduce ] [ drop 1 + (euler051) ] if ; +PRIVATE> + : euler051 ( -- answer ) 2 (euler051) ; + +SOLUTION: euler051