this repo has no description
at master 7.1 kB view raw
1<!-- livebook:{"persist_outputs":true} --> 2 3# Day 04 4 5```elixir 6Mix.install([ 7 {:kino_aoc, git: "https://github.com/ljgago/kino_aoc"} 8]) 9``` 10 11<!-- livebook:{"output":true} --> 12 13``` 14:ok 15``` 16 17## Section 18 19<!-- livebook:{"attrs":{"day":"4","session_secret":"ADVENT_OF_CODE_SESSION","variable":"puzzle_input","year":"2022"},"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} --> 20 21```elixir 22{:ok, puzzle_input} = 23 KinoAOC.download_puzzle("2022", "4", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION")) 24``` 25 26<!-- livebook:{"output":true} --> 27 28``` 29{:ok, 30 "34-82,33-81\n59-59,69-73\n6-96,98-99\n1-94,3-96\n13-92,20-64\n37-75,76-93\n5-98,6-6\n40-65,40-64\n13-63,84-91\n31-75,31-35\n83-96,86-96\n65-85,64-85\n85-85,36-86\n71-73,72-81\n3-91,91-92\n45-72,45-73\n42-70,42-58\n45-45,16-45\n2-59,49-58\n46-59,60-60\n21-21,21-77\n65-72,69-72\n3-77,3-76\n2-91,23-89\n86-92,7-86\n25-86,24-86\n11-62,1-62\n23-30,23-23\n31-94,27-29\n58-90,59-89\n45-70,19-46\n56-56,57-97\n65-84,67-83\n47-77,44-48\n1-68,29-69\n18-18,19-68\n99-99,72-93\n3-60,1-60\n31-31,32-74\n2-2,7-62\n25-83,10-24\n7-96,16-47\n12-71,13-70\n56-57,20-56\n18-24,25-25\n58-89,58-90\n63-68,18-63\n26-70,69-71\n95-98,8-96\n21-94,22-94\n22-91,21-91\n16-22,20-23\n94-95,3-94\n2-20,19-80\n26-94,6-17\n30-82,29-82\n22-73,22-71\n51-62,50-62\n10-65,9-64\n35-36,1-35\n28-90,39-90\n21-22,20-21\n2-35,3-34\n10-79,79-79\n37-80,80-81\n7-93,99-99\n4-7,32-61\n2-37,1-38\n4-91,3-87\n32-92,31-91\n64-64,64-83\n7-87,3-8\n60-91,55-59\n35-41,35-46\n46-87,70-87\n3-14,4-88\n44-60,19-93\n10-31,10-74\n25-87,24-26\n80-97,90-91\n3-15,6-23\n18-83,49-77\n7-45,46-90\n73-91,11-79\n2-4,3-99\n66-98,7-96\n62-63,61-62\n30-97,97-98\n3-79,78-80\n15-32,30-72\n66-85,84-85\n35-76,45-76\n14-65,14-65\n81-82,42-81\n3-90,4-90\n3-4,5-99\n63-99,1-99\n65-66,9-65\n60-84,85-85\n17-17,6-18\n73-75,7-74\n57-98,56-99\n59-59,10-58\n10-18,20-52\n36-78,35-78\n1-99,99-99\n21-88,51-55\n42-97,42-96\n7-79,8-78\n32-71,72-96\n19-35,43-73\n2-12,4-11\n91-91,39-90\n49-86,50-89\n13-19,21-84\n60-81,67-81\n17-26,26-75\n59-95,60-95\n30-70,21-70\n7-60,8-61\n10-95,95-97\n20-22,21-84\n11-98,6-9\n2-24,3-26\n41-50,62-99\n13-25,26-99\n35-43,27-36\n99-99,42-81\n86-86,8-85\n13-46,13-84\n76-88,77-87\n19-77,4-77\n20-54,21-44\n19-91,90-91\n8-67,7-67\n8-74,29-73\n14-16,15-25\n64-70,70-71\n16-99,16-16\n6-94,5-95\n87-98,71-98\n1-60,7-60\n1-76,1-96\n31-92,24-30\n12-81,9-11\n4-85,2-78\n11-84,8-9\n4-4,8-90\n6-11,12-82\n2-96,2-70\n12-91,12-97\n79-89,2-89\n75-75,67-74\n5-81,5-5\n68-74,74-84\n81-82,82-95\n5-78,6-78\n53-87,38-88\n83-94,75-88\n53-79,31-48\n55-57,56-88\n3-69,69-70\n5-54,2-4\n48-85,28-47\n23-78,22-63\n13-20,29-96\n24-45,86-88\n43-64,44-71\n7-84,49-84\n16-89,15-88\n6-73,13-73\n71-71,53-70\n4-12,11-41\n36-53,37-52\n46-91,45-91\n5-58,4-6\n94-94,95-97\n9-55,55-94\n6-49,5-7\n4-99,3-5\n92-93,91-93\n61-83,62-84\n22-82,23-81\n8-94,7-94\n7-9,12-63\n1-51,73-73\n7-66,2-6\n44-45,7-44\n8-94,8-99\n90-97,96-97\n6-72,72-91\n55-60,59-62\n2-40,1-3\n51-75,36-75\n6-8,7-86\n1-1,2-97\n25-88,89-89\n19-94,18-20\n3-3,4-98\n32-68,52-67\n10-54,7-54\n17-69,18-70\n17-75,8-54\n53-65,16-52\n50-88,49-49\n8-63,3-7\n35-38,36-84\n50-54,14-54\n17-17,18-62\n20-26,27-83\n3-3,4-84\n9-25,41-56\n16-72,17-71\n22-89,5-89\n12-30,12-30\n78-94,55-78\n40-83,85-88\n49-84,48-50\n96-98,1-96\n78-78,76-77\n81-82,22-34\n93-94,5-92\n39-70,38-40\n80-84,85-85\n3-73,4-91\n13-49,13-89\n2-94,2-25\n18-72,71-75\n27-69,25-94\n20-78,16-79\n25-29,25-50\n75-95,93-95\n35-65,34-65\n58-91,57-90\n95-95,7-95\n31-31,31-81\n8-88,8-89\n90-90,4-90\n13-66,37-66\n17-17,18-19\n74-74,39-73\n28-30,29-31\n22-95,21-94\n12-16,11-15\n76-89,74-74\n28-91,29-92\n23-23,23-96\n2-99,98-99\n84-90,7-83\n17-19,20-20\n14-99,13-93\n39-81,40-81\n6-55,5-7\n63-63,11-62\n93-93,3-92\n69-79,4-69\n6-99,4-7\n65-87,60-88\n14-98,13-99\n10-58,11-64\n37-95,37-91\n24-95,99-99\n51-94,8-94\n3-61,1-1\n2-94,23-88\n18-86,17-86\n47-96,29-48\n11-79,24-79\n26-87,25-25\n10-70,9-70\n21-72,71-85\n29-69,69-90\n17-64,17-63\n34-83,8-33\n4-52,53-75\n89-99,2-90\n2-89,2-88\n11-34,9-87\n19-95,20-95\n32-67,32-67\n40-99,96-99\n29-87,87-95\n11-61,5-60\n3-96,1-80\n12-87,57-88\n34-93,93-98\n36-76,35-37\n2-70,2-71\n1-5,8-58\n27-91,27-27\n1-60,1-61\n26-80,27-81\n5-91,92-94\n82-82,63-81\n35-99,36-99\n8-8,8-52\n93-96,5-94\n11-18,17-94\n17-81,17-85\n42-66,43-66\n23-83,22-24\n47-60,46-48\n81-82,5-81\n58-89,58-90\n10-48,11-83\n12-93,11-93\n98-99,27-94\n21-61,18-19\n95-95,52-95\n18-99,17-95\n19-75,15-75\n43-44,6-44\n63-86,62-64\n85-90,30-62\n2-78,77-78\n13-72,87-96\n62-86,49-61\n5-33,15-34\n26-71,59-83\n2-85,76-87\n8-14,15-72\n19-77,17-76\n4-68,2-2\n23-92,22-91\n15-72,4-72\n8-70,8-46\n8-74,8-83\n9-75,29-58\n14-97,13-96\n9-61,9-61\n9-10,13-44\n16-48,40-49\n73-78,79-79\n32-54,54-54\n13-99,13-98\n9-91,8-91\n8-42,12-42\n10-87,9-86\n5-5,6-93\n8-75,9-76\n20-94,17-99\n16-17,17-58\n70-88,89-89\n68-68,64-71\n23-94,74-94\n14-58,14-57\n69-70,3-70\n24-82,22-82\n19-97,12-18\n4-5,7-72\n23-79,79-80\n61-83,61-88\n37-49,34-36\n86-98,86-99\n43-84,44-85\n96-96,2-89\n85-86,4-85\n41-43,24-43\n18-72,18-65\n7-7,6-93\n20-94," <> ...} 31``` 32 33```elixir 34ranges = 35 puzzle_input 36 |> String.split("\n", trim: true) 37 |> Enum.map(fn pair -> 38 pair 39 |> String.split(",") 40 |> Enum.map(fn elf -> 41 [start, stop] = 42 elf 43 |> String.split("-") 44 |> Enum.map(&String.to_integer/1) 45 46 start..stop 47 end) 48 end) 49``` 50 51<!-- livebook:{"output":true} --> 52 53``` 54[ 55 [34..82, 33..81], 56 [59..59, 69..73], 57 [6..96, 98..99], 58 [1..94, 3..96], 59 [13..92, 20..64], 60 [37..75, 76..93], 61 [5..98, 6..6], 62 [40..65, 40..64], 63 [13..63, 84..91], 64 [31..75, 31..35], 65 [83..96, 86..96], 66 [65..85, 64..85], 67 [85..85, 36..86], 68 [71..73, 72..81], 69 [3..91, 91..92], 70 [45..72, 45..73], 71 [42..70, 42..58], 72 [45..45, 16..45], 73 [2..59, 49..58], 74 [46..59, 60..60], 75 [21..21, 21..77], 76 [65..72, 69..72], 77 [3..77, 3..76], 78 [2..91, 23..89], 79 [86..92, 7..86], 80 [25..86, 24..86], 81 [11..62, 1..62], 82 [23..30, 23..23], 83 [31..94, 27..29], 84 [58..90, 59..89], 85 [45..70, 19..46], 86 [56..56, 57..97], 87 [65..84, 67..83], 88 [47..77, 44..48], 89 [1..68, 29..69], 90 [18..18, 19..68], 91 [99..99, 72..93], 92 [3..60, 1..60], 93 [31..31, 32..74], 94 [2..2, 7..62], 95 [25..83, 10..24], 96 [7..96, 16..47], 97 [12..71, 13..70], 98 [56..57, 20..56], 99 [18..24, 25..25], 100 [58..89, 58..90], 101 [63..68, 18..63], 102 [26..70, 69..71], 103 [95..98, ...], 104 [...], 105 ... 106] 107``` 108 109```elixir 110defmodule Day04 do 111 def cmp(a..b, a..b), do: :equal 112 113 def cmp(a..b, c..d) 114 when a in c..d and b in c..d 115 when c in a..b and d in a..b, 116 do: :contain 117 118 def cmp(a..b, c..d) 119 when a in c..d 120 when b in c..d 121 when c in a..b 122 when d in a..b, 123 do: :overlap 124 125 def cmp(_, _), do: :disjunctive 126end 127``` 128 129<!-- livebook:{"output":true} --> 130 131``` 132{:module, Day04, <<70, 79, 82, 49, 0, 0, 16, ...>>, {:cmp, 2}} 133``` 134 135## Task 1 136 137```elixir 138Enum.count(ranges, fn [a, b] -> Day04.cmp(a, b) in [:equal, :contain] end) 139``` 140 141<!-- livebook:{"output":true} --> 142 143``` 144464 145``` 146 147## Task 2 148 149```elixir 150Enum.count(ranges, fn [a, b] -> Day04.cmp(a, b) != :disjunctive end) 151``` 152 153<!-- livebook:{"output":true} --> 154 155``` 156770 157```