(defn cart [colls]
  (if (empty? colls)
    '(())
    (for [more (cart (rest colls))
          x (first colls)]
      (cons x more))))

(defn nuggets [[n6 n9 n20]] (+ (* 6 n6) (* 9 n9) (* 20 n20)))

(let [possible (distinct (map nuggets (cart (map range [18 13 6]))))
      mcmax (apply max (filter (fn [x] (not-any? #{x} possible)) (range 101)))]
  (printf "Maximum non-McNuggets number is%d\n" mcmax))