Ammendments to update-quality

- logic of if statments changed to if not
- removed min/max
- Strings for Sulfuras and Backstage pass made to exactly match specification
- Code structure is based more on the clojure version
This commit is contained in:
mgd 2024-10-11 11:24:16 +01:00 committed by Peter Kofler
parent e9cf5311fd
commit ee775910b2

View File

@ -4,24 +4,34 @@
(defun update-quality (items) (defun update-quality (items)
(dolist (item items) (dolist (item items)
(if (string= (plist-get item :name) "Aged Brie") (if (and (not (string= (plist-get (car item) :name) "Aged Brie"))
(plist-put item :quality (min 50 (1+ (plist-get item :quality)))) (not (string= (plist-get (car item) :name) "Backstage passes to a TAFKAL80ETC concert")))
(if (string= (plist-get item :name) "Backstage passes") (when (> (plist-get (car item) :quality) 0)
(if (> (plist-get item :sell-in) 10) (when (not (string= (plist-get (car item) :name) "Sulfuras, Hand of Ragnaros"))
(plist-put item :quality (plist-get item :quality)) (setf (plist-get (car item) :quality) (1- (plist-get (car item) :quality)))))
(if (and (<= (plist-get item :sell-in) 10) (> (plist-get item :sell-in) 5)) (when (< (plist-get (car item) :quality) 50)
(plist-put item :quality (min 50 (+ (plist-get item :quality) 2))) (setf (plist-get (car item) :quality) (1+ (plist-get (car item) :quality)))
(when (string= (plist-get (car item) :name) "Backstage passes to a TAFKAL80ETC concert")
(if (and (<= (plist-get item :sell-in) 5) (> (plist-get item :sell-in) 0)) (when (< (plist-get (car item) :sell-in) 11)
(plist-put item :quality (min 50 (+ (plist-get item :quality) 3))) (when (< (plist-get (car item) :quality) 50)
(setf (plist-get (car item) :quality) (1+ (plist-get (car item) :quality)))))
(plist-put item :quality 0)))) (when (< (plist-get (car item) :sell-in) 6)
(when (< (plist-get (car item) :quality) 50)
(if (string= (plist-get item :name) "Sulfuras") (setf (plist-get (car item) :quality) (1+ (plist-get (car item) :quality)))))))
(plist-put item :quality (plist-get item :quality))
(when (not (string= (plist-get (car item) :name) "Sulfuras, Hand of Ragnaros"))
(plist-put item :quality (max 0 (1- (plist-get item :quality))))))))) (setf (plist-get (car item) :sell-in) (1- (plist-get (car item) :sell-in))))
(when (< (plist-get (car item) :sell-in) 0)
(if (not (string= (plist-get (car item) :name) "Aged Brie"))
(if (not (string= (plist-get (car item) :name) "Backstage passes to a TAFKAL80ETC concert"))
(when (> (plist-get (car item) :quality) 0)
(when (not (string= (plist-get (car item) :name) "Sulfuras, Hand of Ragnaros"))
(setf (plist-get (car item) :quality) (1- (plist-get (car item) :quality)))))
(setf (plist-get (car item) :quality) 0))
(when (< (plist-get (car item) :quality) 50)
(setf (plist-get (car item) :quality) (1+ (plist-get (car item) :quality)))))))))
(provide 'gilded-rose) (provide 'gilded-rose)