Created
January 29, 2019 22:46
-
-
Save Chouser/12b9148d7478f8a31a9684e4381d5ca0 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; In England the currency is made up of pound, £, and pence, p, and | |
; there are eight coins in general circulation: | |
; | |
; 1p, 2p, 5p, 10p, 20p, 50p, £1 (100p) and £2 (200p). | |
; | |
; It is possible to make £2 in the following way: | |
; | |
; 1×£1 + 1×50p + 2×20p + 1×5p + 1×2p + 3×1p | |
; | |
; How many different ways can £2 be made using any number of coins? | |
; 0031b.clj, but cleaned up for "modern" clojure and idioms | |
(defn countpence | |
([] (countpence 0 [200 100 50 20 10 5 2 1])) | |
([sum opts] | |
(cond | |
(== sum 200) 1 | |
(> sum 200) 0 | |
(not opts) 0 | |
:else (+ (countpence sum (rest opts)) | |
(countpence (+ sum (first opts)) opts))))) | |
(prn (countpence)) |
jclaggett
commented
Jan 29, 2019
(defn make-change [total [coin & coins]]
(cond
(zero? total) 1
(nil? coin) 0
:else (apply +
(for [branch (range (inc (quot total coin)))]
(make-change (- total (* branch coin)) coins)))))
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment