]> gitweb.factorcode.org Git - factor.git/blob - extra/project-euler/031/031.factor
project-euler: Rewrap, update links, add copyrights, tests
[factor.git] / extra / project-euler / 031 / 031.factor
1 ! Copyright (c) 2008 Aaron Schaefer.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: kernel math project-euler.common ;
4 IN: project-euler.031
5
6 ! https://projecteuler.net/problem=31
7
8 ! DESCRIPTION
9 ! -----------
10
11 ! In England the currency is made up of pound, £, and pence, p,
12 ! and there are eight coins in general circulation:
13
14 !     1p, 2p, 5p, 10p, 20p, 50p, £1 (100p) and £2 (200p).
15
16 ! It is possible to make £2 in the following way:
17
18 !     1×£1 + 1×50p + 2×20p + 1×5p + 1×2p + 3×1p
19
20 ! How many different ways can £2 be made using any number of
21 ! coins?
22
23
24
25 ! SOLUTION
26 ! --------
27
28 <PRIVATE
29
30 : 1p ( m -- n )
31     drop 1 ;
32
33 : 2p ( m -- n )
34     dup 0 >= [ [ 2 - 2p ] [ 1p ] bi + ] [ drop 0 ] if ;
35
36 : 5p ( m -- n )
37     dup 0 >= [ [ 5 - 5p ] [ 2p ] bi + ] [ drop 0 ] if ;
38
39 : 10p ( m -- n )
40     dup 0 >= [ [ 10 - 10p ] [ 5p ] bi + ] [ drop 0 ] if ;
41
42 : 20p ( m -- n )
43     dup 0 >= [ [ 20 - 20p ] [ 10p ] bi + ] [ drop 0 ] if ;
44
45 : 50p ( m -- n )
46     dup 0 >= [ [ 50 - 50p ] [ 20p ] bi + ] [ drop 0 ] if ;
47
48 : 100p ( m -- n )
49     dup 0 >= [ [ 100 - 100p ] [ 50p ] bi + ] [ drop 0 ] if ;
50
51 : 200p ( m -- n )
52     dup 0 >= [ [ 200 - 200p ] [ 100p ] bi + ] [ drop 0 ] if ;
53
54 PRIVATE>
55
56 : euler031 ( -- answer )
57     200 200p ;
58
59 ! [ euler031 ] 100 ave-time
60 ! 3 ms ave run time - 0.91 SD (100 trials)
61
62 ! TODO: generalize to eliminate duplication; use a sequence to specify denominations?
63
64 SOLUTION: euler031