Doesn't quite work but really not far off.
This commit is contained in:
parent
747bd2e98b
commit
0290045971
|
@ -5,7 +5,7 @@
|
||||||
(defn make-default-machine [] { :stock {:caramel-wafer 5 :teacake 5 :snowball 5}
|
(defn make-default-machine [] { :stock {:caramel-wafer 5 :teacake 5 :snowball 5}
|
||||||
:coins {:merk 1 :plack 4 :bawbee 4 :bodle 4}
|
:coins {:merk 1 :plack 4 :bawbee 4 :bodle 4}
|
||||||
:tendered nil
|
:tendered nil
|
||||||
:last-message ""
|
:message ""
|
||||||
:change nil
|
:change nil
|
||||||
:output nil} )
|
:output nil} )
|
||||||
|
|
||||||
|
@ -24,13 +24,18 @@
|
||||||
"Sum the value of these coins."
|
"Sum the value of these coins."
|
||||||
(apply + (map coin-value coins)))
|
(apply + (map coin-value coins)))
|
||||||
|
|
||||||
|
|
||||||
|
(defn message-machine [machine message]
|
||||||
|
"Return a machine with this message"
|
||||||
|
(assoc (dissoc machine :message) :message (.toString message)))
|
||||||
|
|
||||||
(defn coin-return [machine]
|
(defn coin-return [machine]
|
||||||
"Return all tendered coins in this machine."
|
"Return all tendered coins in this machine."
|
||||||
(assoc (dissoc machine :tendered) :change (:tendered machine)))
|
(message-machine (assoc (dissoc machine :tendered) :change (:tendered machine)) "Coins returned"))
|
||||||
|
|
||||||
(defn add-coin [machine coin]
|
(defn add-coin [machine coin]
|
||||||
"Add this coin to this machine."
|
"Add this coin to this machine."
|
||||||
(assoc (dissoc machine :tendered) :tendered (cons coin (:tendered machine))))
|
(message-machine (assoc (dissoc machine :tendered) :tendered (cons coin (:tendered machine))) (str "Added a " coin)))
|
||||||
|
|
||||||
(defn add-coins [machine coins]
|
(defn add-coins [machine coins]
|
||||||
"Add these coins to this machine"
|
"Add these coins to this machine"
|
||||||
|
@ -79,7 +84,6 @@
|
||||||
"Given this amount of change to make, and this number each of merks, placks, bawbees
|
"Given this amount of change to make, and this number each of merks, placks, bawbees
|
||||||
and bodles, return a tuple (merk plack bodle bawbee) which indicates the number remaining
|
and bodles, return a tuple (merk plack bodle bawbee) which indicates the number remaining
|
||||||
after making change, or nil if not possible"
|
after making change, or nil if not possible"
|
||||||
(print (list "in-make-change:" amount merk plack bawbee bodle))
|
|
||||||
(cond
|
(cond
|
||||||
(= amount 0) (list merk plack bawbee bodle)
|
(= amount 0) (list merk plack bawbee bodle)
|
||||||
(and (>= amount (:merk coin-values)) (> merk 0))
|
(and (>= amount (:merk coin-values)) (> merk 0))
|
||||||
|
@ -130,17 +134,17 @@
|
||||||
|
|
||||||
|
|
||||||
(defn get-item [machine item]
|
(defn get-item [machine item]
|
||||||
(print "get-item: Started")
|
|
||||||
(let [item-price (item item-prices)
|
(let [item-price (item item-prices)
|
||||||
tend (sum-coins (:tendered machine))
|
tend (sum-coins (:tendered machine))
|
||||||
change (make-change item-price (:merk tend) (:plack tend) (:bawbee tend) (:bodle tend))]
|
change (make-change item-price (:merk tend) (:plack tend) (:bawbee tend) (:bodle tend))]
|
||||||
(print (list "get-item:" item-price tend change))
|
(cond (>= 0 (item (:stock machine))) (message-machine (coin-return machine) (str "Sorry, " item " not in stock"))
|
||||||
(cond (<= 0 (item (:stock machine))) (coin-return machine)
|
(<= (coins-value (:tendered machine)) item-price) (message-machine machine "Please insert more money")
|
||||||
(<= (coins-value (:tendered machine)) item-price) (coin-return machine)
|
(empty? change) (message-machine (coin-return machine) "Sorry, I don't have enough change.")
|
||||||
(empty? change) (coin-return)
|
true (message-machine (deliver-item machine item change) (str "Enjoy your " item)))))
|
||||||
true (deliver-item machine item change))))
|
|
||||||
|
|
||||||
(defn get-caramel-wafer [machine]
|
(defn get-caramel-wafer [machine]
|
||||||
(get-item machine :caramel-wafer))
|
(get-item machine :caramel-wafer))
|
||||||
|
|
||||||
|
;; (get-caramel-wafer (add-coin (add-coin (make-default-machine) :merk) :merk))
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue