From a6a5245edb57fb9ee751c173fb25e4d9b8ba8541 Mon Sep 17 00:00:00 2001 From: Jon Harper Date: Sun, 4 Oct 2009 03:18:04 +0900 Subject: [PATCH] more library usage and readability improvements --- extra/project-euler/051/051.factor | 52 ++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 13 deletions(-) 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