summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Wernick <justin@worthe-it.co.za>2022-12-04 19:44:11 +0200
committerJustin Wernick <justin@worthe-it.co.za>2022-12-04 19:44:11 +0200
commit8374ef5bc9d23c35b23ff1c9a9ba5f096b150921 (patch)
tree41ae2cc9d65f13bce1e8772d8ebff94c28333bc4
parent02973bde28a8a23d2657accda9b76bf9b6ebf61c (diff)
Day 4
-rw-r--r--2022/inputs/day_4.txt1000
-rw-r--r--2022/src/bin/day_4.rs88
2 files changed, 1088 insertions, 0 deletions
diff --git a/2022/inputs/day_4.txt b/2022/inputs/day_4.txt
new file mode 100644
index 0000000..eca0084
--- /dev/null
+++ b/2022/inputs/day_4.txt
@@ -0,0 +1,1000 @@
+28-88,85-88
+9-70,18-18
+76-90,53-89
+17-86,11-17
+8-8,8-82
+16-85,15-95
+20-76,19-20
+56-57,57-66
+95-99,1-96
+14-17,17-67
+95-99,32-98
+30-99,29-98
+12-95,11-94
+3-82,1-72
+4-88,88-88
+2-10,11-59
+8-16,8-16
+22-95,23-94
+46-51,78-99
+61-99,62-94
+30-72,26-73
+6-93,2-92
+16-93,17-96
+1-99,2-88
+23-89,88-93
+30-73,3-73
+9-75,75-76
+75-97,70-99
+4-23,22-23
+5-94,4-4
+16-48,15-22
+10-62,61-97
+34-82,81-87
+16-98,15-99
+16-22,17-22
+20-40,21-58
+67-86,22-87
+6-73,6-33
+27-73,40-55
+57-98,58-97
+94-95,14-80
+16-90,91-91
+2-89,5-89
+17-95,96-96
+46-48,19-47
+50-59,51-60
+45-98,44-97
+99-99,6-97
+3-29,1-29
+26-48,25-49
+10-17,19-57
+28-57,28-56
+79-96,80-97
+5-78,4-25
+35-84,35-84
+24-99,20-98
+80-80,53-79
+88-97,12-88
+9-20,9-72
+75-78,35-54
+11-29,28-91
+48-74,49-75
+56-56,56-98
+41-69,33-42
+6-40,6-40
+49-80,49-79
+12-29,18-70
+19-20,13-80
+96-96,15-95
+5-99,4-4
+47-47,41-46
+53-82,65-85
+88-90,89-90
+12-12,12-88
+52-68,51-67
+1-80,2-81
+75-81,70-76
+35-58,35-57
+19-91,18-19
+18-73,72-74
+9-13,8-10
+5-40,35-37
+43-71,70-71
+24-24,25-43
+60-92,35-60
+43-52,47-53
+8-97,97-99
+57-89,57-89
+69-70,31-69
+48-49,48-79
+5-13,14-97
+9-95,9-83
+80-80,79-83
+30-77,29-78
+67-75,67-76
+20-67,21-87
+22-99,74-99
+12-12,11-96
+26-61,25-67
+19-48,47-91
+4-88,81-89
+75-96,74-97
+37-38,37-75
+3-3,4-76
+7-87,7-8
+1-99,2-99
+11-84,83-84
+71-95,69-95
+92-94,2-93
+7-95,21-95
+28-45,27-46
+16-24,16-63
+62-72,68-71
+36-96,90-98
+14-95,94-99
+26-67,25-55
+21-73,21-90
+35-44,34-43
+48-65,48-65
+80-89,80-99
+3-45,44-44
+27-86,67-85
+4-58,4-58
+12-38,11-39
+61-83,82-83
+4-86,4-85
+40-58,10-41
+8-9,8-98
+70-71,12-70
+40-40,40-78
+4-38,17-39
+5-23,22-94
+43-82,47-83
+32-74,86-96
+5-91,90-97
+10-93,11-86
+82-83,44-82
+61-69,57-68
+31-95,30-32
+42-59,42-98
+11-91,9-92
+42-81,19-63
+71-74,72-87
+88-89,6-88
+83-83,21-75
+50-61,59-62
+95-98,25-57
+13-17,16-87
+4-24,3-23
+4-56,3-5
+51-86,50-87
+49-55,30-56
+8-86,8-85
+3-99,3-3
+10-16,10-19
+6-96,5-95
+1-82,17-69
+35-62,35-55
+32-82,83-83
+9-76,75-75
+1-2,3-99
+86-94,93-99
+41-89,47-89
+2-60,3-61
+21-27,18-29
+5-6,6-54
+13-99,13-76
+71-71,34-70
+29-77,29-77
+7-83,6-64
+22-84,12-21
+93-97,15-94
+94-94,7-89
+24-94,32-99
+31-67,43-67
+46-61,46-60
+11-61,58-60
+5-58,5-5
+30-97,30-97
+65-83,82-83
+96-99,3-97
+11-97,6-12
+38-86,39-87
+24-24,24-66
+98-98,43-99
+5-32,29-33
+22-60,22-60
+9-72,71-71
+4-6,5-86
+27-30,31-94
+47-93,48-94
+1-2,5-91
+14-87,87-87
+26-75,25-96
+9-93,13-70
+6-10,9-95
+11-14,13-87
+69-71,2-69
+89-97,77-96
+5-16,4-14
+31-99,31-99
+30-39,33-88
+16-96,10-99
+20-74,19-73
+71-89,17-90
+50-51,26-50
+50-97,51-98
+4-84,4-84
+71-79,60-96
+39-83,81-82
+87-88,10-88
+93-99,68-99
+22-98,23-89
+12-96,13-97
+12-85,13-83
+3-97,3-98
+30-52,29-52
+11-96,97-97
+76-96,45-91
+22-97,23-98
+1-97,96-96
+4-83,5-84
+7-61,60-87
+62-66,37-61
+83-87,54-93
+40-74,7-40
+56-62,48-63
+88-94,57-89
+91-94,58-75
+1-88,87-87
+33-35,26-38
+9-10,9-94
+13-30,29-97
+95-95,23-95
+5-54,54-61
+16-73,72-73
+28-99,29-29
+32-91,33-90
+17-73,18-72
+20-34,13-20
+7-74,8-8
+43-58,42-59
+35-93,96-98
+31-71,62-89
+7-86,6-87
+37-78,38-79
+10-88,9-89
+5-94,20-94
+82-91,83-99
+14-34,4-14
+13-13,12-72
+1-98,16-98
+6-33,33-72
+35-83,36-36
+95-98,34-96
+23-23,22-68
+37-94,37-94
+42-97,96-99
+11-78,2-5
+23-88,87-87
+42-78,41-77
+58-74,58-78
+15-97,15-16
+3-11,5-83
+91-92,47-92
+63-96,62-99
+40-72,9-71
+64-89,37-69
+53-99,98-98
+28-33,26-34
+89-97,14-95
+16-93,92-97
+5-53,52-79
+52-52,53-96
+25-32,26-31
+35-73,35-74
+10-91,4-13
+2-28,5-28
+87-88,22-88
+31-76,32-75
+82-84,7-83
+38-61,60-60
+3-17,2-18
+74-93,4-94
+4-72,18-71
+69-71,19-70
+26-94,4-95
+44-77,52-78
+32-79,31-80
+45-79,23-46
+11-85,10-84
+75-95,19-76
+5-76,5-6
+60-71,65-70
+53-61,52-82
+4-4,5-95
+6-91,90-98
+45-92,46-92
+20-97,10-84
+21-45,31-46
+67-69,43-68
+49-70,12-70
+85-96,96-97
+7-77,8-69
+44-77,77-78
+13-86,85-85
+17-17,17-37
+77-79,13-78
+4-38,5-87
+22-23,23-47
+78-87,30-87
+12-20,1-11
+47-56,46-54
+3-52,1-2
+3-95,2-3
+9-40,8-13
+81-98,18-94
+42-69,38-89
+8-23,24-24
+16-73,15-17
+92-92,18-92
+3-78,78-79
+2-34,35-35
+19-61,60-83
+3-81,81-82
+7-61,6-40
+15-84,1-16
+52-70,30-69
+15-41,14-40
+32-73,32-74
+24-28,27-54
+2-98,18-98
+85-85,15-86
+1-88,2-88
+45-84,46-83
+20-26,34-52
+40-60,19-43
+51-81,80-81
+58-79,57-91
+12-52,28-38
+18-57,19-96
+4-99,2-3
+99-99,5-99
+52-75,53-53
+24-96,24-95
+9-93,10-87
+77-93,7-78
+17-81,18-80
+1-2,4-42
+24-47,46-73
+57-58,50-58
+21-58,21-82
+31-65,3-65
+5-10,3-8
+55-97,94-96
+31-40,30-34
+18-37,36-94
+18-88,17-27
+57-65,58-64
+55-56,55-56
+12-87,12-88
+69-98,14-52
+53-61,20-52
+40-62,16-63
+1-97,98-98
+2-84,1-2
+8-55,7-56
+91-91,91-92
+5-95,5-95
+9-17,2-16
+73-73,72-91
+44-88,5-87
+47-83,48-82
+1-23,22-83
+11-84,12-86
+90-93,5-92
+63-75,7-70
+60-89,89-90
+2-93,93-93
+14-60,13-28
+36-89,36-36
+49-99,4-97
+15-42,15-41
+12-90,90-91
+71-96,99-99
+37-37,37-70
+40-72,39-73
+25-60,26-59
+49-94,49-49
+20-80,21-81
+11-29,24-54
+12-88,55-89
+9-71,8-70
+4-69,5-68
+37-72,48-73
+26-98,27-58
+85-91,13-95
+8-41,8-8
+56-98,30-55
+21-92,20-97
+33-99,3-32
+1-61,3-94
+15-98,14-97
+60-99,59-61
+54-82,53-91
+21-33,17-41
+74-97,75-96
+10-51,52-52
+5-70,4-69
+41-93,42-92
+6-96,7-97
+17-28,2-27
+17-83,6-11
+53-99,54-96
+5-5,4-80
+36-81,53-72
+60-77,65-94
+44-87,87-88
+19-93,19-20
+63-80,43-70
+15-46,14-45
+61-78,77-78
+79-94,70-95
+20-41,20-20
+4-11,4-10
+10-98,4-10
+94-95,67-90
+9-56,10-10
+4-93,3-94
+49-59,49-83
+10-94,11-90
+20-21,20-92
+19-95,17-62
+1-95,69-96
+6-91,49-90
+12-98,11-99
+56-89,56-80
+42-96,42-97
+41-92,13-52
+78-94,57-86
+2-82,2-81
+1-1,1-60
+17-71,71-96
+10-88,9-34
+17-17,17-18
+35-99,34-90
+8-97,8-35
+73-85,74-85
+3-56,47-55
+1-4,3-76
+66-93,66-93
+27-27,26-66
+6-79,27-80
+49-89,48-89
+60-99,83-95
+64-64,48-64
+63-64,57-65
+15-17,30-95
+59-62,59-66
+4-29,5-99
+52-72,70-70
+5-91,1-98
+16-19,16-34
+35-35,1-34
+33-85,28-89
+7-78,6-79
+36-79,10-35
+52-74,51-75
+45-77,47-95
+26-26,26-93
+1-3,3-93
+69-88,8-69
+63-64,14-63
+46-46,45-88
+11-37,12-18
+5-92,6-91
+67-68,68-69
+31-89,32-32
+49-89,50-90
+3-4,4-94
+1-96,2-86
+6-91,7-90
+77-78,8-78
+38-76,38-77
+2-98,97-99
+43-48,48-71
+12-76,11-77
+25-40,25-41
+16-55,15-55
+1-91,2-91
+42-82,42-42
+32-90,31-33
+13-98,13-97
+18-80,18-65
+92-97,7-78
+1-3,2-69
+3-88,2-89
+6-94,7-67
+22-98,5-97
+24-32,33-96
+5-70,83-93
+1-61,60-61
+1-99,78-96
+88-98,4-89
+95-97,50-96
+56-93,55-97
+13-76,52-65
+86-87,40-87
+35-62,34-69
+26-44,27-60
+47-66,65-66
+2-97,1-87
+1-96,3-85
+13-82,16-82
+25-85,3-86
+36-63,3-99
+12-98,97-99
+4-6,2-5
+38-67,65-67
+77-96,27-30
+15-95,14-14
+22-87,22-60
+12-19,12-81
+16-79,8-80
+34-94,3-93
+26-62,25-62
+9-91,8-9
+94-98,30-33
+14-68,68-91
+79-95,84-95
+92-95,93-96
+2-96,95-99
+25-58,9-57
+7-87,6-6
+44-84,43-83
+78-88,77-87
+67-70,61-71
+35-64,64-65
+40-40,5-39
+9-74,9-74
+70-81,82-82
+11-58,10-11
+2-13,13-83
+56-71,70-88
+4-8,7-94
+5-88,4-93
+40-88,39-88
+14-84,69-83
+5-30,29-30
+91-94,92-94
+4-73,2-45
+69-98,30-70
+44-72,73-73
+32-41,32-38
+76-81,68-81
+62-75,62-69
+23-36,35-69
+95-96,26-95
+15-89,14-64
+8-75,9-97
+15-17,14-58
+16-18,18-92
+57-77,58-76
+90-98,23-91
+1-97,96-96
+37-96,1-38
+8-99,9-53
+4-9,10-10
+11-27,11-22
+83-95,80-86
+88-90,54-89
+53-66,53-57
+14-14,15-90
+6-9,8-98
+6-99,32-93
+28-70,29-70
+6-64,64-98
+18-68,19-69
+16-42,16-43
+3-91,2-91
+1-95,2-94
+18-19,8-19
+2-99,9-97
+76-86,42-86
+83-94,25-84
+21-64,9-87
+89-95,29-90
+4-96,3-97
+20-96,19-20
+28-74,28-29
+19-22,22-93
+62-87,83-97
+72-73,23-73
+22-52,21-51
+39-39,39-98
+9-95,9-95
+53-95,66-95
+36-87,19-37
+86-87,34-86
+12-56,11-11
+48-97,47-81
+26-62,54-58
+21-63,22-64
+27-90,90-90
+54-70,64-68
+7-84,92-94
+15-35,35-57
+19-91,20-92
+99-99,78-95
+46-89,46-47
+8-68,9-57
+4-77,1-69
+21-36,35-58
+24-30,26-30
+50-90,91-91
+2-31,8-64
+3-98,98-98
+43-70,70-71
+24-79,25-78
+30-30,31-73
+7-10,11-90
+1-95,2-2
+70-82,82-93
+90-90,4-59
+2-82,2-68
+4-19,4-31
+33-68,10-39
+13-22,21-91
+24-67,24-25
+1-9,4-10
+3-3,2-50
+42-84,43-83
+23-84,62-83
+78-79,78-80
+30-58,30-58
+71-71,38-72
+35-43,46-82
+49-55,31-75
+22-98,22-99
+27-57,26-57
+24-24,24-77
+89-92,79-89
+70-95,10-93
+13-36,14-21
+13-98,80-97
+11-14,17-48
+59-92,59-92
+19-26,18-40
+6-32,7-31
+12-48,12-12
+22-87,23-98
+5-96,6-88
+3-85,1-4
+85-88,43-85
+19-89,20-81
+52-52,53-71
+87-96,14-88
+4-5,1-1
+8-79,7-78
+76-77,7-77
+67-99,68-98
+21-68,66-69
+93-94,91-95
+24-88,8-87
+10-52,19-53
+27-86,28-84
+35-95,36-94
+27-86,85-86
+30-31,31-57
+39-87,38-91
+92-92,16-93
+2-83,1-92
+74-74,73-73
+5-25,23-26
+11-12,12-73
+68-80,71-80
+67-92,66-91
+23-33,25-33
+46-77,34-47
+25-78,23-78
+95-97,53-96
+99-99,1-99
+42-43,43-89
+17-18,9-18
+7-48,48-55
+36-61,60-62
+45-82,82-94
+1-96,3-96
+33-66,34-65
+21-81,20-82
+74-76,15-75
+25-25,25-86
+10-79,94-96
+8-94,5-9
+16-89,8-93
+20-21,21-95
+48-94,49-74
+88-89,89-89
+24-60,25-91
+85-85,31-86
+4-82,4-41
+27-88,27-87
+18-94,17-95
+67-76,51-89
+13-49,26-48
+9-88,9-9
+41-86,42-85
+57-96,14-58
+95-95,11-92
+58-58,57-86
+23-93,12-15
+1-97,2-97
+22-22,8-22
+51-91,50-90
+7-25,51-92
+74-88,73-87
+3-82,4-81
+89-98,67-90
+7-99,7-98
+26-62,31-71
+32-88,32-88
+14-65,46-64
+56-82,81-82
+54-64,53-65
+4-85,5-5
+85-86,3-85
+7-58,1-8
+4-82,5-56
+47-92,48-75
+27-79,28-80
+7-34,8-94
+35-40,35-46
+84-94,80-95
+83-99,84-98
+10-81,11-73
+5-91,20-23
+1-2,2-99
+50-50,9-51
+5-78,4-79
+9-99,61-98
+79-79,61-78
+13-20,14-20
+8-93,7-92
+3-27,3-99
+28-66,29-65
+15-97,14-99
+31-43,42-67
+53-57,54-56
+11-89,88-93
+77-82,78-78
+4-99,4-99
+16-75,12-14
+17-52,33-51
+8-83,41-55
+48-90,44-49
+1-4,3-72
+25-91,91-92
+3-10,4-9
+32-98,8-94
+32-33,1-33
+33-43,14-42
+23-83,24-83
+30-31,31-49
+7-84,84-85
+26-50,49-65
+73-85,46-92
+85-86,13-39
+7-78,7-75
+32-93,26-26
+59-96,5-97
+48-99,48-79
+21-24,21-25
+58-95,99-99
+26-27,22-26
+19-19,3-99
+46-97,46-96
+2-3,2-99
+26-92,6-21
+1-99,1-2
+22-31,31-81
+10-65,9-86
+1-99,2-98
+13-78,13-79
+96-96,54-96
+8-94,7-23
+1-97,96-99
+28-70,27-71
+37-95,37-94
+9-90,4-89
+9-92,10-93
+8-80,86-94
+2-2,4-9
+6-41,6-41
+25-76,24-77
+95-98,85-95
+4-82,1-2
+56-73,56-84
+2-99,20-99
+14-17,17-91
+56-74,55-75
+45-97,99-99
+56-56,16-55
+43-93,44-86
+61-84,25-83
+82-99,5-83
+19-37,3-18
+42-42,4-42
+34-41,35-78
+12-79,11-80
+3-72,4-71
+16-99,23-85
+21-46,47-47
+33-65,33-33
+36-57,36-58
+5-82,82-83
+2-95,1-95
+1-37,5-31
+70-70,7-69
+17-86,18-87
+17-91,44-91
+73-88,73-89
+40-89,39-92
+68-97,91-96
+25-97,7-96
+36-83,37-83
+70-74,30-63
+56-93,57-93
+98-99,58-99
+15-95,94-97
+26-40,40-41
+3-99,2-44
+20-32,31-31
+57-97,56-57
+38-61,17-37
+13-62,12-63
+60-76,21-78
+57-66,56-67
+60-97,77-98
+43-68,42-43
+23-56,23-79
+34-44,35-44
+39-74,38-90
+3-84,2-85
+3-31,4-99
+74-85,73-85
+11-19,18-79
+25-25,26-64
+86-91,93-94
+16-95,15-92
+64-71,63-69
+45-45,35-44
+94-97,17-92
+29-97,28-98
+67-71,20-71
+7-86,7-85
+14-45,22-39
+6-66,6-19
+44-93,94-94
+52-62,52-61
+3-3,4-71
+22-80,21-81
+35-98,35-98
+37-44,38-43
+50-64,50-54
+50-99,51-99
+9-24,10-23
+24-24,23-86
+24-72,25-72
+33-61,49-62
+35-72,73-77
+78-79,79-96
+30-30,30-58
+58-76,36-75
+34-69,35-68
+7-91,5-6
+1-91,1-91
+2-2,2-99
+46-78,40-46
+7-78,6-79
+54-70,4-32
+63-76,5-77
+15-60,59-86
+1-75,69-75
+4-66,67-67
+15-99,15-95
+10-17,2-53
+2-46,18-61
+71-71,48-71
+19-98,14-99
+12-48,11-31
+30-30,30-98
+63-92,6-64
+21-94,95-95
+13-66,65-67
+7-11,14-79
+18-18,16-17
+11-45,91-97
+26-34,25-34
+40-60,4-81
+19-69,18-68
+34-79,99-99
+29-39,25-57
+2-98,98-98
+96-99,47-96
+6-45,9-45
+1-11,10-85
+6-77,5-76
+68-79,68-79
+45-55,46-49
+66-69,68-70
+14-80,20-77
+25-69,31-70
+16-53,15-54
+56-99,56-99
+45-47,32-46
+50-63,44-62
+18-75,29-76
+11-11,12-31
+19-91,90-91
+16-95,17-96
+19-95,19-94
+20-95,19-20
+17-96,16-95
+13-16,13-78
+50-62,34-63
+80-99,81-98
+13-81,83-96
+92-98,42-93
+38-89,57-89
+62-65,66-88
+54-85,55-85
+17-87,16-17
+3-6,6-74
+5-99,6-98
+22-41,73-73
+14-78,12-78
+35-51,34-47
+94-94,15-94
+58-75,13-71
+20-51,18-21
+31-60,30-96
+29-89,28-95
+39-40,40-82
+14-85,17-84
+27-57,26-94
+24-91,23-24
+8-72,71-76
+49-69,6-69
+28-28,29-52
+25-88,54-87
+89-90,16-90
+28-99,28-30
+17-17,17-88
+19-67,68-77
+64-64,34-65
+3-97,22-98
+17-98,16-97
+30-89,91-97
+13-30,14-31
+1-4,3-97
+2-93,1-98
+13-83,13-83
+80-90,80-91
+7-10,3-9
+65-79,70-80
+24-92,24-93
+16-94,43-81
+33-86,62-85
+53-78,79-79
+3-70,69-99
+95-95,16-96
+41-69,42-74
+83-83,51-82
+2-39,3-39
+6-15,5-16
+6-49,6-49
+57-95,95-96
+7-78,6-99
+78-83,81-99
+41-99,7-98
+1-98,2-97
+41-90,23-42
+9-61,9-24
+13-79,40-55
+4-13,10-18
+51-55,50-77
+87-90,86-91
+15-16,15-96
+19-29,20-28
+46-46,47-49
+9-82,7-7
+12-55,6-20
+4-41,4-41
+1-94,66-93
+4-91,4-92
+7-61,21-91
+7-90,38-91
+12-32,32-35
+6-94,93-94
+6-7,7-7
diff --git a/2022/src/bin/day_4.rs b/2022/src/bin/day_4.rs
new file mode 100644
index 0000000..5f08d70
--- /dev/null
+++ b/2022/src/bin/day_4.rs
@@ -0,0 +1,88 @@
+use nom::{
+ bytes::complete::tag,
+ character::complete::{line_ending, u32 as nom_u32},
+ combinator::map,
+ multi::separated_list1,
+ sequence::tuple,
+ IResult,
+};
+use std::{fs, iter::Iterator, ops::RangeInclusive};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let input = fs::read_to_string("inputs/day_4.txt")?;
+ let assignments = Assignments::parser(&input).unwrap().1;
+ dbg!(assignments.count_containing_assignments());
+ dbg!(assignments.count_overlapping_assignments());
+ Ok(())
+}
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+struct Assignments(Vec<AssignmentPair>);
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+struct AssignmentPair {
+ elf_1: Assignment,
+ elf_2: Assignment,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+struct Assignment(RangeInclusive<u32>);
+
+impl Assignments {
+ fn parser(input: &str) -> IResult<&str, Assignments> {
+ map(
+ separated_list1(line_ending, AssignmentPair::parser),
+ Assignments,
+ )(input)
+ }
+
+ fn count_containing_assignments(&self) -> usize {
+ self.0
+ .iter()
+ .filter(|pair| pair.one_completely_overlaps_other())
+ .count()
+ }
+
+ fn count_overlapping_assignments(&self) -> usize {
+ self.0
+ .iter()
+ .filter(|pair| pair.one_overlaps_other())
+ .count()
+ }
+}
+
+impl AssignmentPair {
+ fn parser(input: &str) -> IResult<&str, AssignmentPair> {
+ map(
+ tuple((Assignment::parser, tag(","), Assignment::parser)),
+ |(elf_1, _, elf_2)| AssignmentPair { elf_1, elf_2 },
+ )(input)
+ }
+
+ fn one_completely_overlaps_other(&self) -> bool {
+ self.elf_1.contains(&self.elf_2) || self.elf_2.contains(&self.elf_1)
+ }
+
+ fn one_overlaps_other(&self) -> bool {
+ self.elf_1.overlaps(&self.elf_2)
+ }
+}
+
+impl Assignment {
+ fn parser(input: &str) -> IResult<&str, Assignment> {
+ map(tuple((nom_u32, tag("-"), nom_u32)), |(start, _, end)| {
+ Assignment(RangeInclusive::new(start, end))
+ })(input)
+ }
+
+ fn contains(&self, other: &Assignment) -> bool {
+ self.0.contains(other.0.start()) && self.0.contains(other.0.end())
+ }
+
+ fn overlaps(&self, other: &Assignment) -> bool {
+ self.0.contains(other.0.start())
+ || self.0.contains(other.0.end())
+ || other.0.contains(self.0.start())
+ || other.0.contains(self.0.end())
+ }
+}