Last active
          August 29, 2015 13:59 
        
      - 
      
 - 
        
Save tarynsauer/10613735 to your computer and use it in GitHub Desktop.  
Revisions
- 
        
tarynsauer revised this gist
Apr 14, 2014 . 1 changed file with 0 additions and 18 deletions.There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -29,24 +29,6 @@ (conj acc a-map)))) acc))) (defn assign-all-required-duties [apprentices duties] (let [orig-apprentices apprentices required-duties (required-duties duties)] (loop [apprentices apprentices]  - 
        
tarynsauer revised this gist
Apr 14, 2014 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -49,7 +49,7 @@ (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  - 
        
tarynsauer created this gist
Apr 14, 2014 .There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,64 @@ (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 annotate-av [apprentices apprentice-name] (map (fn [apprentice] (if (and (= (:name apprentice) apprentice-name) (= (:assigned-to apprentice) nil)) (assoc apprentice :assigned-to "av") apprentice )) apprentices)) (defn assign-av [apprentices fn] (let [potential-assignees (fn apprentices)] (annotate-av apprentices (:name (first (shuffle potential-assignees)))))) (defn av-experienced [apprentices] (filter (fn [apprentice] (>= (:av-count apprentice) 3)) apprentices)) (defn av-novice [apprentices] (filter (fn [apprentice] (< (:av-count apprentice) 3)) apprentices)) (defn assign-all-required-duties [apprentices duties] (let [orig-apprentices apprentices required-duties (required-duties duties)] (loop [apprentices apprentices] ;; this could be cleaner (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))))))