| 1 | (ns adventofcode2019.day14-test |
| 2 | (:require [clojure.test :refer :all] |
| 3 | [adventofcode2019.day14 :refer :all])) |
| 4 | |
| 5 | (deftest test-make-graph |
| 6 | (is (= (make-graph ["3 ORE => 2 ABC" |
| 7 | "3 ABC => 1 FUEL"]) |
| 8 | {"ABC" [{"ORE" 3} 2] |
| 9 | "FUEL" [{"ABC" 3} 1]}))) |
| 10 | |
| 11 | (deftest test-reduce |
| 12 | (is (= (reduce-reaction (make-graph ["9 ORE => 2 A" |
| 13 | "8 ORE => 3 B" |
| 14 | "7 ORE => 5 C" |
| 15 | "3 A, 4 B => 1 AB" |
| 16 | "5 B, 7 C => 1 BC" |
| 17 | "4 C, 1 A => 1 CA" |
| 18 | "2 AB, 3 BC, 4 CA => 1 FUEL"]) |
| 19 | "FUEL", "ORE") |
| 20 | {"A" [{"ORE" 9} 2] |
| 21 | "B" [{"ORE" 8} 3] |
| 22 | "C" [{"ORE" 7} 5] |
| 23 | "AB" [{"A" 3, "B" 4} 1] |
| 24 | "BC" [{"B" 5, "C" 7} 1] |
| 25 | "CA" [{"C" 4, "A" 1} 1] |
| 26 | "FUEL" [{"ORE" 165, "A" 0 |
| 27 | "B" -1, "AB" 0 |
| 28 | "C" -3, "BC" 0 |
| 29 | "CA" 0} 1]}))) |
| 30 | |
| 31 | (deftest examples |
| 32 | (is (= 31 (find-lowest-exchange-rate (make-graph ["10 ORE => 10 A" |
| 33 | "1 ORE => 1 B" |
| 34 | "7 A, 1 B => 1 C" |
| 35 | "7 A, 1 C => 1 D" |
| 36 | "7 A, 1 D => 1 E" |
| 37 | "7 A, 1 E => 1 FUEL"]) |
| 38 | "FUEL", "ORE"))) |
| 39 | (is (= 165 (find-lowest-exchange-rate (make-graph ["9 ORE => 2 A" |
| 40 | "8 ORE => 3 B" |
| 41 | "7 ORE => 5 C" |
| 42 | "3 A, 4 B => 1 AB" |
| 43 | "5 B, 7 C => 1 BC" |
| 44 | "4 C, 1 A => 1 CA" |
| 45 | "2 AB, 3 BC, 4 CA => 1 FUEL"]) |
| 46 | "FUEL", "ORE"))) |
| 47 | (is (= 13312 (find-lowest-exchange-rate (make-graph ["157 ORE => 5 NZVS" |
| 48 | "165 ORE => 6 DCFZ" |
| 49 | "44 XJWVT, 5 KHKGT, 1 QDVJ, 29 NZVS, 9 GPVTF, 48 HKGWZ => 1 FUEL" |
| 50 | "12 HKGWZ, 1 GPVTF, 8 PSHF => 9 QDVJ" |
| 51 | "179 ORE => 7 PSHF" |
| 52 | "177 ORE => 5 HKGWZ" |
| 53 | "7 DCFZ, 7 PSHF => 2 XJWVT" |
| 54 | "165 ORE => 2 GPVTF" |
| 55 | "3 DCFZ, 7 NZVS, 5 HKGWZ, 10 PSHF => 8 KHKGT"]) |
| 56 | "FUEL", "ORE"))) |
| 57 | (is (= 180697 (find-lowest-exchange-rate (make-graph ["2 VPVL, 7 FWMGM, 2 CXFTF, 11 MNCFX => 1 STKFG" |
| 58 | "17 NVRVD, 3 JNWZP => 8 VPVL" |
| 59 | "53 STKFG, 6 MNCFX, 46 VJHF, 81 HVMC, 68 CXFTF, 25 GNMV => 1 FUEL" |
| 60 | "22 VJHF, 37 MNCFX => 5 FWMGM" |
| 61 | "139 ORE => 4 NVRVD" |
| 62 | "144 ORE => 7 JNWZP" |
| 63 | "5 MNCFX, 7 RFSQX, 2 FWMGM, 2 VPVL, 19 CXFTF => 3 HVMC" |
| 64 | "5 VJHF, 7 MNCFX, 9 VPVL, 37 CXFTF => 6 GNMV" |
| 65 | "145 ORE => 6 MNCFX" |
| 66 | "1 NVRVD => 8 CXFTF" |
| 67 | "1 VJHF, 6 MNCFX => 4 RFSQX" |
| 68 | "176 ORE => 6 VJHF"]) |
| 69 | "FUEL", "ORE"))) |
| 70 | (is (= 2210736 (find-lowest-exchange-rate (make-graph ["171 ORE => 8 CNZTR" |
| 71 | "7 ZLQW, 3 BMBT, 9 XCVML, 26 XMNCP, 1 WPTQ, 2 MZWV, 1 RJRHP => 4 PLWSL" |
| 72 | "114 ORE => 4 BHXH" |
| 73 | "14 VRPVC => 6 BMBT" |
| 74 | "6 BHXH, 18 KTJDG, 12 WPTQ, 7 PLWSL, 31 FHTLT, 37 ZDVW => 1 FUEL" |
| 75 | "6 WPTQ, 2 BMBT, 8 ZLQW, 18 KTJDG, 1 XMNCP, 6 MZWV, 1 RJRHP => 6 FHTLT" |
| 76 | "15 XDBXC, 2 LTCX, 1 VRPVC => 6 ZLQW" |
| 77 | "13 WPTQ, 10 LTCX, 3 RJRHP, 14 XMNCP, 2 MZWV, 1 ZLQW => 1 ZDVW" |
| 78 | "5 BMBT => 4 WPTQ" |
| 79 | "189 ORE => 9 KTJDG" |
| 80 | "1 MZWV, 17 XDBXC, 3 XCVML => 2 XMNCP" |
| 81 | "12 VRPVC, 27 CNZTR => 2 XDBXC" |
| 82 | "15 KTJDG, 12 BHXH => 5 XCVML" |
| 83 | "3 BHXH, 2 VRPVC => 7 MZWV" |
| 84 | "121 ORE => 7 VRPVC" |
| 85 | "7 XCVML => 6 RJRHP" |
| 86 | "5 BHXH, 4 VRPVC => 5 LTCX"]) |
| 87 | "FUEL", "ORE")))) |