Last active
August 29, 2015 13:59
-
-
Save tarynsauer/10613735 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
(defn all-duties-assigned? [apprentices duties-list] | |
(loop [apprentices apprentices assigned-duties '()] | |
(if (empty? apprentices) | |
(= (sort (remove nil? assigned-duties)) (sort (conj duties-list foreman-assignment))) | |
(let [apprentice (first apprentices) apprentices (rest apprentices)] | |
(recur apprentices | |
(if-not (= (:assigned-to apprentice) nil) | |
(conj assigned-duties (:assigned-to apprentice)) | |
assigned-duties)))))) | |
(defn all-apprentices-have-assignments? [apprentices] | |
(loop [apprentices apprentices assigned-duties '()] | |
(if (empty? apprentices ) | |
(every? identity assigned-duties) | |
(let [apprentice (first apprentices) apprentices (rest apprentices)] | |
(recur apprentices | |
(conj assigned-duties (:assigned-to apprentice))))))) | |
(defn assign-duty [apprentices assignments] | |
(loop [duties-list (shuffle assignments) | |
[a-map & more] (shuffle apprentices) | |
acc []] | |
(if a-map | |
(let [duty (first duties-list) duties (rest duties-list)] | |
(recur duties more | |
(if (and (in? (:duty-options a-map) duty) | |
(= (:assigned-to a-map) nil)) | |
(conj acc (assoc a-map :assigned-to duty)) | |
(conj acc a-map)))) | |
acc))) | |
(defn assign-all-required-duties [apprentices duties] | |
(let [orig-apprentices apprentices required-duties (required-duties duties)] | |
(loop [apprentices apprentices] | |
(let [apprentices (assign-duty apprentices required-duties)] | |
(if (all-duties-assigned? apprentices required-duties) | |
apprentices | |
(recur orig-apprentices)))))) | |
(defn assign-all-remaining-apprentices [apprentices duties] | |
(let [apprentices apprentices optional-duties (optional-duties duties)] | |
(loop [apprentices apprentices] | |
(let [apprentices (assign-duty apprentices optional-duties)] | |
(if (all-apprentices-have-assignments? apprentices) | |
apprentices | |
(recur apprentices)))))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment