From 03cbaa117f50c18eba57cb93a50f70a4a58e0409 Mon Sep 17 00:00:00 2001 From: fuckwit Date: Thu, 23 Nov 2023 20:50:44 +0100 Subject: [PATCH] Solve year 2022 day 04 --- input/year2022/day04.txt | 1000 ++++++++++++++++++++++++++++++++++++++ src/lib.rs | 1 + src/main.rs | 1 + src/year2022/day04.rs | 44 ++ 4 files changed, 1046 insertions(+) create mode 100644 input/year2022/day04.txt create mode 100644 src/year2022/day04.rs diff --git a/input/year2022/day04.txt b/input/year2022/day04.txt new file mode 100644 index 0000000..0ef6c0b --- /dev/null +++ b/input/year2022/day04.txt @@ -0,0 +1,1000 @@ +24-91,80-92 +28-93,5-94 +30-81,33-82 +28-97,59-72 +65-66,54-70 +35-35,5-36 +3-5,4-91 +73-97,20-72 +53-77,2-54 +47-96,48-95 +7-75,8-75 +66-89,67-86 +23-25,24-95 +97-98,5-98 +58-61,13-57 +53-62,52-52 +5-93,92-93 +52-61,34-61 +83-85,82-92 +90-90,46-91 +35-95,94-98 +89-91,72-90 +3-98,81-97 +26-26,27-96 +41-54,53-55 +9-43,8-54 +14-14,14-86 +36-50,50-50 +79-84,78-78 +44-69,70-73 +6-51,5-5 +40-40,39-73 +10-65,9-11 +1-2,4-99 +8-36,5-5 +72-72,25-71 +66-66,67-96 +69-79,62-68 +46-57,5-56 +97-98,39-98 +98-99,4-97 +9-94,10-84 +3-15,6-14 +9-10,11-80 +9-9,9-69 +60-79,78-82 +50-70,70-90 +12-12,13-64 +8-92,3-8 +29-79,30-78 +96-97,5-97 +13-75,59-63 +45-78,45-79 +38-70,38-69 +13-33,19-25 +79-87,47-88 +9-67,8-67 +51-59,58-60 +28-61,28-62 +7-90,33-87 +5-5,5-33 +78-85,43-84 +18-94,18-95 +42-42,42-81 +12-93,11-92 +16-64,17-64 +2-99,1-98 +32-68,31-69 +14-73,15-15 +43-55,43-81 +13-65,66-66 +79-85,79-91 +81-84,52-80 +21-68,22-67 +32-80,33-80 +17-76,83-83 +11-65,39-65 +32-85,33-84 +25-58,26-57 +14-28,8-15 +64-87,20-86 +62-99,29-61 +26-40,27-47 +9-76,9-83 +42-90,43-89 +5-97,5-93 +6-16,15-87 +45-91,9-91 +34-34,35-85 +21-56,21-21 +38-79,47-80 +79-98,36-96 +25-99,73-99 +4-51,12-50 +9-10,14-50 +65-89,26-48 +17-19,18-18 +39-60,34-75 +61-76,61-61 +38-90,37-37 +36-67,68-68 +6-19,10-20 +3-91,3-97 +35-93,35-94 +63-89,59-62 +46-76,66-76 +31-63,31-64 +17-44,33-37 +35-43,35-68 +11-13,12-90 +39-83,40-63 +41-99,24-86 +41-76,41-56 +9-62,10-62 +3-92,92-92 +36-41,36-46 +6-21,5-26 +7-98,5-97 +24-95,9-35 +4-82,3-81 +45-74,7-35 +7-74,59-75 +62-68,32-61 +45-66,44-83 +36-94,36-37 +57-76,57-77 +34-71,71-72 +95-95,95-95 +58-75,57-79 +48-75,40-53 +21-94,21-31 +55-55,3-56 +48-80,3-80 +10-81,9-81 +13-66,6-7 +1-91,90-92 +4-5,4-83 +22-76,20-45 +4-13,3-3 +10-22,6-6 +18-91,18-90 +50-53,51-52 +23-33,21-24 +1-49,1-48 +8-40,8-39 +11-97,2-96 +79-81,55-75 +82-95,81-81 +9-10,10-68 +59-59,58-58 +2-99,2-2 +22-36,21-22 +49-77,49-50 +7-21,7-7 +65-98,66-72 +1-43,39-40 +25-60,25-25 +12-79,38-80 +89-90,26-90 +52-72,53-53 +15-96,97-99 +4-8,4-72 +2-73,72-72 +11-35,15-35 +99-99,1-98 +72-83,8-88 +29-35,1-3 +32-72,15-33 +50-86,51-51 +27-65,59-87 +11-11,11-52 +16-87,17-87 +60-62,61-61 +50-90,81-92 +86-86,43-86 +42-82,11-82 +93-94,3-94 +22-91,90-92 +14-91,13-75 +11-28,14-19 +76-85,75-77 +7-98,6-98 +25-40,2-41 +4-96,12-90 +61-75,1-62 +17-97,16-17 +38-93,38-52 +16-34,17-39 +61-78,29-79 +7-91,90-90 +30-59,20-60 +5-98,4-98 +55-55,55-99 +1-95,1-94 +15-87,14-14 +56-92,23-55 +9-97,46-58 +9-93,8-94 +4-10,16-96 +52-53,24-53 +11-59,10-59 +61-76,53-65 +26-45,45-46 +4-38,38-92 +46-46,46-87 +41-61,40-95 +7-17,2-17 +26-27,27-33 +58-92,58-90 +13-96,13-98 +76-76,1-77 +12-97,12-96 +30-30,29-79 +38-86,38-86 +6-94,93-93 +5-9,11-55 +52-52,51-51 +29-88,29-29 +22-65,2-22 +51-60,57-77 +16-78,4-77 +99-99,40-98 +90-90,71-91 +16-86,16-87 +37-92,37-86 +42-79,48-56 +25-47,24-49 +32-35,33-36 +64-75,5-53 +18-53,32-54 +59-74,64-75 +22-76,21-76 +3-90,3-90 +98-98,15-99 +4-17,17-77 +97-97,7-97 +94-95,13-95 +19-56,4-56 +8-12,12-95 +9-75,9-21 +1-45,25-43 +65-82,65-66 +27-63,27-27 +97-99,5-96 +15-85,14-15 +24-75,24-74 +34-81,34-82 +29-97,18-96 +13-80,13-17 +7-93,8-93 +81-82,16-82 +16-59,60-98 +88-93,22-88 +91-93,41-92 +16-57,16-85 +19-46,15-20 +16-52,16-72 +7-7,8-61 +80-86,80-82 +65-75,1-88 +7-78,1-77 +5-94,4-94 +59-88,60-87 +69-73,69-70 +16-16,17-52 +50-91,51-91 +39-57,38-40 +12-73,72-74 +2-4,10-66 +36-38,36-71 +23-80,63-98 +85-91,40-84 +47-48,6-48 +1-3,3-97 +33-33,33-34 +16-18,17-61 +81-83,1-82 +53-82,15-54 +54-84,63-84 +1-98,97-97 +3-77,4-61 +34-79,35-54 +24-24,25-82 +6-99,4-6 +29-49,30-49 +1-2,1-90 +1-37,1-1 +3-4,8-62 +10-85,11-86 +57-59,54-63 +3-93,1-93 +58-59,9-59 +37-38,25-38 +32-96,31-96 +2-91,23-90 +31-70,37-47 +18-77,67-76 +58-91,66-97 +21-44,45-45 +60-61,61-78 +12-12,11-55 +43-65,15-66 +21-70,20-21 +10-10,10-88 +11-71,12-72 +75-75,50-76 +29-29,11-28 +4-81,1-98 +36-54,37-53 +8-92,91-93 +37-76,37-77 +74-99,75-99 +3-98,12-97 +19-83,20-83 +97-99,2-96 +45-45,45-95 +3-87,2-86 +66-74,50-65 +12-12,12-77 +1-93,5-85 +40-52,43-82 +5-69,9-70 +2-11,10-31 +31-74,31-99 +40-96,41-64 +12-38,11-13 +18-55,18-88 +54-84,53-54 +10-95,5-94 +32-70,63-71 +20-84,8-47 +61-87,86-87 +16-31,4-16 +1-97,1-96 +1-5,6-28 +73-73,38-72 +23-50,22-22 +27-93,27-36 +99-99,6-99 +99-99,1-99 +99-99,34-75 +7-24,18-24 +5-43,9-18 +3-6,5-62 +35-67,17-66 +16-45,8-44 +2-90,2-91 +48-97,96-97 +35-74,7-73 +25-86,85-85 +13-78,13-89 +2-79,79-79 +5-98,1-98 +66-66,64-68 +15-85,20-86 +25-41,42-73 +18-30,29-29 +16-20,16-75 +4-6,5-89 +7-56,8-57 +11-64,11-65 +7-7,9-86 +6-68,6-72 +4-92,4-91 +26-28,25-65 +2-57,1-58 +96-98,22-95 +2-82,82-82 +96-98,95-97 +11-91,90-90 +8-87,7-8 +64-92,76-93 +2-4,4-30 +53-92,49-61 +17-50,18-51 +8-64,7-64 +35-60,5-36 +1-6,6-85 +7-62,62-62 +38-42,50-54 +3-3,3-60 +39-48,50-86 +1-97,16-89 +44-72,73-84 +14-68,16-68 +7-55,8-8 +13-79,19-79 +31-94,95-97 +30-63,19-31 +15-83,52-83 +27-27,27-83 +72-72,3-71 +35-99,1-98 +29-80,29-88 +40-71,20-70 +61-93,60-94 +3-93,1-93 +4-4,5-99 +22-69,10-26 +42-74,42-75 +18-39,19-38 +37-43,43-92 +29-31,16-30 +7-95,7-7 +72-73,72-72 +9-90,91-98 +7-51,8-47 +28-88,89-94 +3-94,4-94 +20-41,37-51 +19-34,4-34 +13-63,64-68 +5-98,5-90 +24-93,24-73 +26-56,11-56 +2-75,33-76 +1-99,2-96 +44-55,54-56 +64-99,64-80 +41-64,41-64 +15-80,17-75 +57-59,58-90 +5-12,7-58 +16-50,17-17 +41-48,40-47 +31-32,31-92 +1-91,1-37 +53-67,49-77 +3-75,2-79 +55-76,47-60 +42-42,42-58 +20-42,20-41 +94-98,51-97 +1-44,1-45 +19-50,2-51 +28-82,29-94 +18-97,18-18 +41-89,14-41 +3-36,5-35 +64-85,31-86 +72-96,95-96 +11-18,18-87 +19-63,62-62 +16-17,16-94 +97-97,1-98 +22-95,23-96 +16-16,17-35 +25-96,43-96 +50-87,50-50 +3-92,3-89 +20-78,20-20 +53-53,54-89 +5-43,8-44 +39-85,38-38 +47-76,46-77 +35-78,77-79 +28-47,27-29 +39-39,36-40 +87-98,76-78 +30-35,30-63 +39-53,21-30 +30-30,30-93 +65-97,19-96 +74-77,73-98 +21-95,6-22 +36-89,47-88 +99-99,8-98 +22-68,25-69 +38-90,38-42 +39-88,17-39 +79-85,78-84 +11-74,7-7 +38-45,38-45 +57-90,56-58 +1-2,3-83 +2-48,7-49 +30-95,30-96 +71-96,71-79 +4-89,96-99 +44-93,44-99 +16-16,15-98 +7-95,10-91 +12-15,23-41 +39-62,38-92 +5-10,7-12 +51-91,14-52 +12-12,12-76 +54-58,56-59 +9-9,10-56 +11-42,49-70 +14-76,19-77 +24-33,27-33 +23-98,23-88 +35-78,51-85 +1-1,3-86 +1-2,2-94 +30-36,22-58 +48-48,47-51 +7-82,83-99 +31-77,31-31 +4-6,9-97 +63-85,10-86 +30-80,28-81 +1-1,1-98 +7-97,18-89 +52-89,21-88 +9-69,14-70 +71-72,34-72 +55-61,10-97 +59-88,55-55 +31-54,31-53 +26-35,45-98 +36-79,6-99 +2-3,2-41 +6-85,6-84 +9-97,1-95 +16-45,43-46 +5-81,4-80 +4-91,90-92 +44-86,30-87 +72-74,53-73 +20-20,15-15 +40-62,40-40 +28-99,34-62 +4-89,4-94 +42-58,46-59 +43-72,42-81 +81-83,22-82 +29-43,10-53 +47-55,46-70 +10-84,4-5 +10-93,11-94 +38-74,74-74 +14-48,13-14 +11-91,10-10 +9-11,10-10 +7-60,6-42 +3-93,92-92 +14-69,14-68 +32-45,41-46 +2-99,3-99 +16-83,15-83 +39-44,39-40 +2-76,75-77 +91-92,20-82 +19-50,24-51 +31-77,9-78 +3-99,70-99 +35-36,36-65 +6-24,7-68 +64-91,64-92 +95-96,95-96 +44-58,2-57 +61-61,44-62 +11-98,11-55 +38-47,20-46 +8-15,8-97 +29-53,27-29 +84-95,59-89 +61-62,61-85 +19-77,20-46 +88-92,92-92 +2-99,98-99 +10-79,10-10 +6-91,20-88 +14-74,10-10 +13-34,12-35 +27-87,86-86 +1-1,1-86 +28-31,27-79 +38-80,21-73 +23-64,22-24 +38-94,93-95 +96-98,10-95 +50-51,49-50 +74-88,81-89 +27-62,24-28 +49-49,48-92 +3-5,5-8 +47-87,47-76 +66-86,50-67 +78-96,77-77 +3-91,2-92 +88-91,5-87 +47-88,49-88 +56-80,55-79 +96-96,2-96 +19-38,30-39 +6-93,93-93 +36-98,36-36 +37-37,14-37 +17-17,18-67 +10-83,66-88 +25-89,28-88 +47-99,1-97 +87-87,18-86 +55-60,55-55 +15-15,23-61 +33-67,32-77 +37-42,38-42 +41-41,23-40 +54-66,53-68 +57-98,53-76 +14-92,14-93 +12-96,12-13 +43-43,14-42 +23-91,45-54 +36-59,58-58 +6-6,7-90 +31-38,37-39 +8-94,7-94 +94-94,87-94 +35-78,36-91 +37-90,68-75 +93-93,9-92 +39-80,35-84 +16-89,16-82 +1-86,2-37 +22-75,31-97 +1-97,96-98 +70-82,66-81 +8-94,93-94 +5-94,5-5 +4-75,5-74 +65-65,44-80 +33-97,96-97 +4-58,48-59 +5-99,5-5 +62-70,49-69 +37-42,36-41 +1-98,1-99 +91-92,5-92 +80-89,1-80 +15-92,74-93 +26-93,25-25 +43-46,41-45 +14-14,15-75 +29-29,30-99 +64-98,64-97 +14-86,87-99 +5-6,5-27 +50-75,34-75 +9-24,23-94 +77-78,76-77 +11-27,2-43 +98-99,58-99 +8-87,8-9 +35-35,35-38 +22-85,2-23 +39-84,49-70 +7-15,15-77 +98-98,7-97 +42-47,15-41 +27-34,27-27 +37-37,38-91 +33-81,33-80 +30-51,11-52 +79-80,76-80 +59-98,13-77 +52-55,33-53 +3-67,68-68 +3-72,72-83 +20-43,24-51 +75-89,29-76 +31-56,55-56 +25-50,24-49 +93-99,98-98 +2-76,2-75 +8-80,8-81 +16-18,45-60 +1-1,2-96 +55-82,54-93 +60-89,83-88 +55-88,11-66 +2-99,98-98 +83-85,11-84 +54-69,12-55 +10-10,10-74 +11-21,16-22 +50-71,68-75 +28-99,11-78 +41-51,39-87 +10-11,16-92 +72-72,13-72 +92-92,2-91 +27-46,45-47 +13-47,9-46 +1-99,2-18 +21-96,21-95 +5-5,5-61 +66-66,59-66 +30-82,30-77 +19-19,20-58 +82-89,2-99 +15-15,15-99 +10-10,11-51 +47-97,47-92 +18-20,19-56 +7-11,20-82 +24-73,24-70 +45-45,46-50 +13-91,65-74 +19-82,19-77 +26-98,2-58 +87-88,17-87 +44-51,22-51 +3-95,11-86 +5-49,15-50 +14-77,13-77 +98-99,1-99 +15-60,14-65 +4-8,8-21 +39-86,85-97 +25-92,24-24 +29-29,29-78 +9-63,8-8 +76-76,14-55 +15-88,16-84 +9-89,90-94 +4-89,3-90 +4-33,32-64 +4-98,2-98 +78-86,20-81 +63-89,62-88 +8-56,7-97 +25-44,25-45 +3-32,4-8 +53-86,53-87 +5-85,3-95 +18-24,8-94 +93-98,92-94 +39-53,54-69 +28-73,17-72 +3-93,4-9 +8-46,8-16 +3-3,2-78 +13-22,23-26 +71-72,47-72 +3-8,7-20 +6-73,1-6 +31-99,33-91 +90-99,89-89 +9-81,7-7 +58-59,58-63 +64-83,83-83 +4-5,4-5 +54-92,19-86 +7-8,8-63 +31-48,48-80 +22-86,8-22 +76-91,73-76 +62-78,9-79 +16-93,19-94 +5-95,5-93 +13-80,14-81 +6-80,79-79 +78-84,77-79 +40-83,78-84 +11-68,5-6 +81-81,23-82 +1-27,29-29 +50-60,51-53 +44-49,44-45 +52-62,51-98 +1-98,1-99 +39-97,98-99 +25-52,15-92 +34-99,34-34 +10-35,5-69 +11-11,12-69 +47-53,53-53 +92-94,7-93 +8-8,8-81 +28-85,28-84 +39-88,33-34 +66-83,65-86 +45-94,45-61 +36-60,14-36 +10-40,11-90 +23-75,24-51 +61-63,7-62 +68-83,82-82 +55-60,55-73 +9-44,2-44 +11-95,95-97 +10-62,9-65 +81-81,82-98 +6-56,6-57 +17-50,34-50 +4-34,34-34 +20-98,19-21 +25-39,25-58 +40-79,8-80 +14-57,14-58 +94-95,67-95 +17-24,15-24 +16-18,17-89 +6-58,5-57 +6-99,6-37 +3-3,3-17 +46-74,47-66 +16-38,17-17 +22-97,13-23 +99-99,38-99 +52-65,62-62 +22-24,17-23 +60-98,1-97 +3-71,7-21 +10-94,10-95 +38-90,38-89 +24-45,23-62 +12-14,13-95 +37-87,38-53 +14-45,13-45 +77-77,27-77 +25-83,17-25 +21-94,9-99 +73-73,49-73 +50-82,49-64 +7-95,95-95 +64-86,63-87 +33-85,2-50 +33-87,34-53 +13-31,30-31 +62-63,63-91 +9-91,91-92 +16-72,15-72 +32-40,39-40 +10-98,10-93 +1-3,2-18 +12-62,12-43 +35-68,34-69 +50-52,32-51 +4-37,4-35 +6-94,65-96 +63-88,44-62 +17-49,9-49 +20-49,20-48 +7-91,6-91 +33-63,34-63 +62-63,63-89 +9-62,10-62 +31-31,32-38 +77-87,15-87 +34-89,42-89 +1-2,3-79 +59-65,58-87 +4-57,2-56 +34-54,13-34 +41-95,5-54 +28-76,77-86 +13-13,12-42 +12-97,12-96 +20-27,26-50 +70-84,70-72 +47-75,48-69 +5-75,75-75 +25-80,22-79 +28-78,79-79 +89-89,11-93 +39-74,75-75 +20-88,20-87 +79-80,37-78 +7-17,16-18 +31-68,31-68 +18-36,18-18 +73-96,35-73 +28-98,27-29 +26-75,19-74 +2-4,3-48 +2-3,4-79 +4-93,92-92 +58-89,70-89 +1-99,2-68 +57-78,56-56 +10-46,10-39 +6-61,6-60 +51-90,50-90 +27-90,27-28 +45-45,1-44 +18-31,13-31 +25-51,18-52 +7-28,4-29 +93-93,6-93 +9-50,8-51 +92-94,1-93 +29-91,30-30 +25-75,24-75 +55-55,15-55 +70-73,62-71 +8-84,8-42 +50-76,46-57 +45-80,44-79 +6-86,7-87 +8-83,7-82 +4-30,8-31 +57-95,58-96 +49-50,50-79 +90-92,89-95 +24-24,25-98 +60-75,69-75 +9-83,20-69 +32-33,32-36 +3-3,2-98 +1-84,83-85 +69-99,99-99 +92-97,87-92 +71-96,72-97 +49-49,49-66 +18-18,35-75 +7-94,7-7 +3-48,45-92 +47-86,86-86 +10-42,7-66 +11-85,12-96 +39-77,17-39 +14-24,3-23 +23-23,23-23 +66-66,54-67 +29-29,30-71 +20-89,56-90 +41-56,40-57 +1-99,3-97 +4-92,4-98 +7-39,38-38 +69-71,68-73 +95-97,13-96 +55-84,54-75 +61-79,64-88 +97-98,3-98 +9-42,6-41 +36-86,35-36 +8-91,9-86 +16-45,58-79 +43-43,11-44 +8-74,9-73 +2-78,3-78 +76-86,83-94 +1-96,2-97 +49-79,49-78 +1-1,3-76 +74-89,21-90 +7-97,1-2 +38-73,73-73 +24-76,29-77 +4-43,2-2 +19-20,20-96 +56-77,51-77 +10-82,10-65 +58-71,17-94 +20-74,74-87 +28-84,28-83 +5-81,87-89 +9-40,9-24 +38-80,39-81 +36-36,36-37 +76-76,33-76 +62-62,1-62 +11-27,21-25 +13-59,44-59 +36-89,36-37 +53-70,45-69 +5-42,41-41 +49-49,9-50 +35-59,12-35 +32-63,18-63 +38-69,37-71 +70-97,96-96 +52-80,53-75 +43-43,44-94 +49-83,52-84 +11-76,10-98 +4-91,90-92 +26-54,26-30 +57-86,57-58 +3-97,96-96 +1-1,3-98 +24-36,36-67 +8-64,3-64 +39-98,14-98 +59-62,59-63 +30-42,30-31 +3-87,2-4 +6-79,7-80 +7-66,67-80 +30-48,18-47 +91-96,82-95 +4-78,4-5 +67-68,24-68 +7-7,8-59 +1-83,5-79 +50-67,34-66 +27-74,26-73 +7-94,94-97 +2-27,3-18 +13-55,56-56 +3-3,4-40 +52-66,52-52 +40-40,39-81 +3-54,1-47 \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index aa3fb9e..8d43137 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -15,4 +15,5 @@ pub mod year2022 { pub mod day01; pub mod day02; pub mod day03; + pub mod day04; } diff --git a/src/main.rs b/src/main.rs index cd5a6f8..d1e6a7b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -85,5 +85,6 @@ fn year2022() -> Vec { solution!(year2022, day01), solution!(year2022, day02), solution!(year2022, day03), + solution!(year2022, day04), ] } diff --git a/src/year2022/day04.rs b/src/year2022/day04.rs new file mode 100644 index 0000000..fac1b70 --- /dev/null +++ b/src/year2022/day04.rs @@ -0,0 +1,44 @@ +use crate::util::parse::ParseExt; + +fn solve(input: &str, filter: fn(u32, u32, u32, u32) -> bool) -> usize { + input + .lines() + .filter_map(|line| { + let mut nums = line.u32s(); + + if (filter)(nums.next()?, nums.next()?, nums.next()?, nums.next()?) { + Some(()) + } else { + None + } + }) + .count() +} + +pub fn part1(input: &str) -> impl std::fmt::Display { + solve(input, |s1, e1, s2, e2| { + s1 <= s2 && e1 >= e2 || s1 >= s2 && e1 <= e2 + }) +} + +pub fn part2(input: &str) -> impl std::fmt::Display { + solve(input, |s1, e1, s2, e2| { + s1 >= s2 && s1 <= e2 || s2 >= s1 && s2 <= e1 + }) +} + +#[test] +fn test_part1() { + assert_eq!( + "2", + part1("2-4,6-8\n2-3,4-5\n5-7,7-9\n2-8,3-7\n6-6,4-6\n2-6,4-8").to_string() + ) +} + +#[test] +fn test_part2() { + assert_eq!( + "4", + part2("2-4,6-8\n2-3,4-5\n5-7,7-9\n2-8,3-7\n6-6,4-6\n2-6,4-8").to_string() + ) +}