From b8dfb89771382ecafd793eea9c1729853c67f110 Mon Sep 17 00:00:00 2001 From: Aaron Schaefer Date: Fri, 8 Feb 2008 17:27:42 -0500 Subject: [PATCH] Solution to Project Euler problem 53 --- extra/project-euler/053/053.factor | 35 ++++++++++++++++++++++++ extra/project-euler/project-euler.factor | 6 ++-- 2 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 extra/project-euler/053/053.factor diff --git a/extra/project-euler/053/053.factor b/extra/project-euler/053/053.factor new file mode 100644 index 0000000000..37f1d87b66 --- /dev/null +++ b/extra/project-euler/053/053.factor @@ -0,0 +1,35 @@ +! Copyright (c) 2008 Aaron Schaefer. +! See http://factorcode.org/license.txt for BSD license. +USING: combinators.lib kernel math math.combinatorics math.ranges sequences ; +IN: project-euler.053 + +! http://projecteuler.net/index.php?section=problems&id=53 + +! DESCRIPTION +! ----------- + +! There are exactly ten ways of selecting three from five, 12345: + +! 123, 124, 125, 134, 135, 145, 234, 235, 245, and 345 + +! In combinatorics, we use the notation, 5C3 = 10. + +! In general, +! nCr = n! / r! * (n - r)! +! where r ≤ n, n! = n * (n − 1) * ... * 3 * 2 * 1, and 0! = 1. + +! It is not until n = 23, that a value exceeds one-million: 23C10 = 1144066. + +! How many values of nCr, for 1 ≤ n ≤ 100, are greater than one-million? + + +! SOLUTION +! -------- + +: euler053 ( -- answer ) + 23 100 [a,b] [ dup [ nCk ] with map [ 1000000 > ] count ] sigma ; + +! [ euler053 ] 100 ave-time +! 64 ms run / 2 ms GC ave time - 100 trials + +MAIN: euler053 diff --git a/extra/project-euler/project-euler.factor b/extra/project-euler/project-euler.factor index c3db60c481..b683b5bafa 100644 --- a/extra/project-euler/project-euler.factor +++ b/extra/project-euler/project-euler.factor @@ -13,9 +13,9 @@ USING: definitions io io.files kernel math math.parser project-euler.ave-time project-euler.033 project-euler.034 project-euler.035 project-euler.036 project-euler.037 project-euler.038 project-euler.039 project-euler.040 project-euler.041 project-euler.042 project-euler.043 project-euler.044 - project-euler.048 project-euler.052 project-euler.067 project-euler.075 - project-euler.079 project-euler.097 project-euler.134 project-euler.169 - project-euler.173 project-euler.175 ; + project-euler.048 project-euler.052 project-euler.053 project-euler.067 + project-euler.075 project-euler.079 project-euler.097 project-euler.134 + project-euler.169 project-euler.173 project-euler.175 ; IN: project-euler