diff --git a/elisp/day-4/solution.el b/elisp/day-4/solution.el new file mode 100755 index 0000000..14aafa9 --- /dev/null +++ b/elisp/day-4/solution.el @@ -0,0 +1,79 @@ +#!/usr/bin/env -S emacs --script + +;; -*- lexical-binding: t; -*- + +;; Copyright (C) 2022 notroot + +;; This program is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +(add-to-list 'load-path "../") + +(require 'ert) +(require 'cl-lib) +(require 'advent-of-code) + +(defvar solution-input + "../../input/day-4.txt") + +(defvar solution-example-input + "../../input/day-4-example.txt") + +(defun solution-parse-pair (s) + (let ((parts (string-split s "-"))) + (cons (string-to-number (car parts)) + (string-to-number (cadr parts))))) + +(defun solution-parse-pairs (line) + (let ((unparsed-pairs (string-split line "," t))) + (list (solution-parse-pair (car unparsed-pairs)) + (solution-parse-pair (cadr unparsed-pairs))))) + +(defun solution-pair-contains? (a b) + (and (<= (car a) (car b)) + (>= (cdr a) (cdr b)))) + +(defun solution-pair-overlaps? (a b) + (or (and (>= (car a) (car b)) + (<= (car a) (cdr b))) + (and (>= (cdr a) (car b)) + (<= (cdr a) (cdr b))))) + +(defun solution-part-1 (input) + (let ((pairs (seq-map 'solution-parse-pairs input))) + (seq-count (lambda (pair) + (or (solution-pair-contains? (car pair) (cadr pair)) + (solution-pair-contains? (cadr pair) (car pair)))) + pairs))) + +(defun solution-part-2 (input) + (let ((pairs (seq-map 'solution-parse-pairs input))) + (seq-count (lambda (pair) + (or (solution-pair-overlaps? (car pair) (cadr pair)) + (solution-pair-overlaps? (cadr pair) (car pair)))) + pairs))) + +(ert-deftest solution-part-1-example () + (should (equal (solution-part-1 (aoc-read-file-lines solution-example-input)) 2))) + +(ert-deftest solution-part-1 () + (should (equal (solution-part-1 (aoc-read-file-lines solution-input)) 644))) + +(when noninteractive + (ert-run-tests-batch)) + +;; Code + +;; Local Variables: +;; read-symbol-shorthands: (("solution-" . "advent-of-code-day-4-") ("aoc-" . "advent-of-code-")) +;; End: diff --git a/input/day-4-example.txt b/input/day-4-example.txt new file mode 100644 index 0000000..99a66c5 --- /dev/null +++ b/input/day-4-example.txt @@ -0,0 +1,6 @@ +2-4,6-8 +2-3,4-5 +5-7,7-9 +2-8,3-7 +6-6,4-6 +2-6,4-8 \ No newline at end of file diff --git a/input/day-4.txt b/input/day-4.txt new file mode 100644 index 0000000..0745f29 --- /dev/null +++ b/input/day-4.txt @@ -0,0 +1,1000 @@ +61-78,61-77 +1-98,23-98 +70-70,3-70 +7-41,7-40 +5-85,2-50 +13-59,13-13 +22-81,57-82 +4-26,27-70 +37-86,38-86 +3-49,48-48 +43-52,42-52 +6-95,6-94 +27-66,26-65 +15-16,16-89 +29-61,22-86 +9-82,10-83 +2-40,39-42 +5-67,6-68 +6-57,13-87 +70-92,69-71 +37-53,50-59 +2-94,1-94 +11-81,10-82 +3-83,1-3 +78-90,77-93 +10-93,10-11 +14-81,32-80 +6-29,5-47 +91-99,19-91 +6-87,6-86 +29-94,93-94 +3-18,17-18 +44-44,45-91 +25-25,26-54 +30-83,30-30 +50-86,27-87 +8-40,9-40 +25-78,24-79 +3-12,11-95 +47-53,47-52 +27-47,27-47 +19-67,19-20 +98-98,1-99 +9-38,8-90 +6-98,7-11 +8-59,50-53 +37-99,36-99 +1-98,1-99 +14-14,15-44 +13-95,4-95 +1-99,2-98 +43-80,44-79 +14-87,5-88 +21-57,38-56 +41-49,9-50 +30-67,29-66 +64-94,83-93 +18-93,2-13 +56-61,3-62 +99-99,42-90 +21-83,22-71 +20-86,12-41 +12-77,81-89 +61-97,60-61 +94-95,10-95 +7-98,7-99 +57-80,3-99 +15-88,16-57 +46-64,21-65 +59-78,59-99 +3-86,24-36 +3-45,2-63 +65-66,65-69 +11-63,41-64 +3-76,8-75 +26-50,49-86 +7-98,8-98 +44-88,43-87 +10-25,9-99 +35-83,34-83 +14-41,14-40 +26-35,29-36 +21-95,22-22 +3-84,2-83 +81-90,2-89 +11-50,11-11 +44-52,45-51 +10-67,10-68 +88-99,9-24 +20-85,6-86 +78-93,77-94 +13-14,13-35 +65-80,57-79 +47-98,46-48 +65-93,64-92 +36-79,37-78 +38-38,37-93 +25-83,24-83 +8-91,90-91 +15-85,15-84 +72-87,42-72 +13-83,11-84 +12-92,11-41 +4-86,74-84 +79-92,82-93 +37-89,88-88 +12-83,82-82 +64-83,63-82 +10-12,11-76 +5-70,5-69 +24-66,23-66 +51-63,27-63 +6-84,5-84 +68-85,77-86 +45-69,69-92 +28-90,17-91 +30-45,30-46 +39-40,40-86 +39-74,74-75 +29-98,14-28 +4-40,1-40 +15-90,15-97 +6-19,5-42 +2-72,1-73 +27-81,81-82 +4-91,3-90 +33-95,33-96 +24-90,23-23 +88-88,15-89 +77-78,70-78 +28-80,11-27 +36-91,35-93 +98-99,3-98 +13-70,63-70 +3-73,49-73 +66-87,65-86 +12-93,13-14 +76-96,89-96 +24-72,25-71 +68-71,67-73 +1-6,5-89 +19-88,19-96 +5-5,5-21 +19-20,20-50 +76-97,75-97 +7-98,18-97 +24-25,25-50 +4-94,3-94 +66-92,65-92 +21-29,21-29 +5-43,6-43 +19-94,19-95 +17-60,27-59 +10-75,11-74 +57-84,57-85 +6-68,67-69 +66-66,22-65 +62-63,61-63 +17-86,17-87 +10-81,82-86 +12-90,12-89 +32-98,31-99 +83-85,10-84 +19-90,2-18 +83-85,14-84 +50-69,68-68 +25-96,25-95 +77-90,80-91 +68-90,73-89 +17-89,14-88 +45-55,46-55 +28-98,98-98 +54-78,54-54 +28-34,28-34 +69-76,70-70 +13-54,12-54 +28-46,16-45 +20-92,18-92 +64-65,11-65 +49-67,11-49 +16-17,17-98 +19-67,8-66 +19-27,9-64 +52-59,29-59 +43-78,4-77 +62-62,63-99 +5-6,6-71 +5-91,4-92 +3-9,8-69 +52-53,53-53 +77-80,78-80 +26-97,97-99 +8-61,35-60 +22-92,6-91 +8-68,7-9 +3-6,5-83 +1-1,3-80 +4-91,90-92 +18-73,72-72 +12-19,13-18 +21-73,20-73 +69-92,70-70 +9-75,10-10 +78-80,79-80 +52-54,18-53 +95-98,30-95 +3-91,3-91 +3-95,2-95 +9-81,9-9 +13-88,14-89 +24-67,25-66 +23-97,23-98 +30-30,1-31 +20-61,57-61 +38-38,38-98 +2-95,1-96 +11-92,10-83 +22-92,8-27 +45-97,27-96 +25-98,1-99 +10-79,62-80 +2-25,1-90 +12-92,25-93 +1-99,98-98 +67-90,67-67 +15-95,2-96 +16-64,16-63 +4-18,17-89 +7-87,45-82 +2-3,3-95 +72-75,64-77 +3-5,6-56 +16-96,16-90 +76-84,75-83 +27-27,28-52 +24-39,38-84 +16-97,12-97 +11-98,10-99 +3-13,2-94 +26-40,25-41 +44-74,59-73 +66-75,53-74 +1-96,2-96 +1-85,1-85 +9-12,11-61 +45-82,46-82 +14-98,7-97 +65-65,19-65 +1-36,7-35 +20-49,19-50 +7-99,4-6 +20-85,21-86 +46-99,2-99 +6-6,7-89 +89-89,62-90 +7-93,3-92 +26-68,27-27 +30-61,29-61 +51-75,74-74 +7-76,19-75 +12-13,12-82 +22-55,23-54 +1-53,54-63 +20-87,20-86 +86-86,87-87 +46-72,46-47 +54-65,23-33 +8-93,6-6 +2-96,1-96 +87-99,86-98 +30-71,31-71 +3-94,93-93 +7-96,6-6 +21-74,20-75 +10-90,11-90 +19-90,18-19 +69-69,26-70 +59-97,59-98 +6-68,3-7 +2-17,16-65 +2-98,3-98 +71-95,31-71 +37-52,36-52 +72-87,73-87 +29-82,46-79 +65-77,14-78 +7-92,6-85 +8-35,15-36 +7-59,1-59 +93-95,6-93 +47-93,48-48 +5-24,1-23 +1-81,10-80 +32-65,1-66 +64-90,65-66 +21-65,7-20 +11-85,12-86 +89-89,73-90 +62-92,91-93 +48-60,2-59 +13-44,13-23 +11-32,30-33 +17-96,18-96 +19-91,14-14 +25-54,24-54 +7-92,9-93 +34-91,34-99 +80-89,71-88 +37-58,57-57 +27-99,5-99 +3-89,1-4 +34-90,91-95 +10-27,11-26 +37-58,37-59 +57-81,56-82 +9-73,66-74 +5-78,42-78 +30-77,26-92 +41-61,41-41 +65-74,65-74 +8-86,7-86 +1-94,2-93 +26-65,63-65 +4-95,4-71 +54-71,55-58 +9-49,11-48 +33-42,39-41 +55-69,56-68 +28-89,28-46 +7-91,91-94 +77-98,97-97 +19-37,15-37 +94-94,90-95 +3-63,2-97 +28-84,28-85 +18-20,19-44 +53-61,43-61 +76-98,76-77 +96-98,10-97 +33-89,17-89 +22-99,21-22 +17-28,23-28 +9-9,10-16 +55-57,10-56 +6-55,6-6 +10-82,5-81 +21-22,21-48 +16-98,4-15 +41-72,42-59 +32-49,46-49 +38-87,38-95 +2-2,2-29 +38-78,38-79 +19-25,17-25 +99-99,13-99 +1-2,3-80 +60-93,59-94 +35-84,34-84 +44-98,44-98 +16-32,70-78 +33-39,15-32 +13-86,13-85 +1-5,6-42 +38-48,38-38 +37-39,38-98 +94-94,10-95 +54-58,54-59 +20-68,21-68 +21-63,20-64 +73-74,8-73 +68-97,69-76 +54-89,2-90 +3-94,4-95 +32-94,29-55 +75-75,19-75 +7-67,8-68 +5-44,6-48 +84-84,5-84 +2-89,2-98 +22-45,21-45 +9-94,8-8 +13-87,20-87 +18-19,18-70 +18-46,17-47 +56-82,57-57 +17-77,28-78 +62-87,61-88 +8-87,7-88 +10-90,9-91 +4-92,4-93 +3-94,4-94 +51-57,46-57 +3-31,2-85 +51-55,51-54 +10-76,75-76 +20-64,49-62 +8-99,26-99 +3-55,2-2 +56-77,56-85 +31-82,1-81 +71-76,70-77 +40-52,53-77 +8-20,9-9 +19-41,40-40 +18-64,19-46 +85-85,23-86 +15-39,8-19 +57-64,56-70 +48-81,49-80 +17-92,1-93 +29-57,35-56 +43-98,42-97 +47-90,17-91 +73-73,72-72 +20-72,44-71 +2-95,2-96 +77-79,48-77 +17-88,18-92 +5-80,5-6 +1-49,50-64 +34-94,35-93 +2-22,3-23 +12-34,11-34 +46-55,40-55 +55-61,51-60 +2-70,3-69 +8-94,2-13 +43-60,47-60 +19-20,19-36 +64-72,63-65 +11-45,10-45 +23-87,22-87 +10-89,9-90 +1-1,2-97 +42-42,41-42 +12-95,11-95 +5-95,95-98 +2-99,3-61 +80-96,65-96 +41-94,41-42 +50-70,50-71 +36-51,50-52 +36-85,9-85 +16-24,16-23 +19-96,20-85 +89-90,15-90 +7-99,5-93 +17-26,16-59 +92-92,60-93 +35-80,35-90 +1-3,3-91 +78-89,78-88 +4-29,5-28 +20-60,15-79 +55-95,56-62 +58-97,59-98 +7-15,16-88 +15-43,16-48 +3-96,4-95 +34-35,2-34 +1-73,5-73 +1-97,4-97 +63-96,62-98 +76-78,77-78 +46-46,27-47 +11-11,12-50 +15-86,90-90 +54-74,53-74 +5-93,5-5 +14-85,15-85 +36-92,91-91 +50-74,51-62 +51-51,17-52 +10-79,1-80 +74-92,18-91 +17-24,23-51 +33-61,9-62 +6-97,2-98 +72-96,95-97 +43-80,33-80 +17-34,16-35 +60-83,59-83 +49-65,48-65 +70-71,18-71 +10-87,66-86 +19-69,20-69 +24-59,25-58 +11-36,12-35 +47-99,48-99 +14-96,96-97 +22-96,22-85 +68-68,17-69 +5-71,4-70 +23-48,22-49 +88-90,3-88 +29-55,37-56 +41-93,40-92 +91-91,37-92 +2-96,3-21 +40-76,75-75 +2-8,8-96 +8-96,99-99 +52-83,82-82 +15-92,80-86 +10-87,6-87 +15-29,14-30 +13-86,8-85 +9-95,41-44 +2-44,3-44 +8-91,70-87 +28-66,28-67 +2-86,1-3 +3-93,2-94 +11-18,8-19 +12-69,13-70 +4-13,8-12 +86-98,2-86 +75-91,62-79 +68-84,67-83 +3-94,2-94 +80-98,80-98 +54-89,54-55 +69-97,35-88 +39-99,38-89 +9-91,10-92 +16-17,16-86 +7-11,7-8 +7-57,7-8 +2-41,2-39 +18-63,17-64 +81-85,83-85 +97-97,69-98 +1-4,4-61 +90-93,58-93 +34-73,33-73 +7-87,86-88 +19-95,18-96 +4-5,5-77 +35-35,35-54 +43-43,42-82 +5-99,3-6 +14-29,15-65 +82-86,2-83 +8-20,9-15 +2-97,3-97 +69-88,70-88 +38-38,37-92 +17-42,17-41 +80-80,79-94 +24-45,24-72 +51-62,50-89 +5-72,6-61 +56-78,16-51 +71-84,70-71 +2-78,13-68 +63-92,12-73 +40-90,37-79 +47-93,49-93 +21-72,3-73 +96-97,3-97 +7-74,50-75 +58-87,86-87 +88-90,4-89 +16-16,17-29 +4-97,10-97 +22-92,22-91 +88-89,11-89 +37-87,37-94 +75-75,15-76 +20-77,76-76 +32-80,33-75 +17-68,18-69 +93-98,4-93 +19-20,19-79 +41-60,42-61 +92-93,2-93 +6-99,7-99 +52-94,53-94 +61-91,40-92 +76-76,15-77 +17-71,16-78 +23-35,35-48 +1-23,22-99 +11-50,4-80 +5-95,95-96 +98-98,1-99 +13-72,71-71 +35-94,34-34 +1-98,1-97 +9-69,17-69 +22-55,21-55 +42-85,26-41 +14-81,21-82 +24-53,40-53 +76-80,59-77 +16-22,17-23 +5-38,5-6 +18-20,18-19 +3-62,61-63 +8-63,4-63 +21-39,22-40 +43-91,90-92 +35-51,50-51 +14-82,34-82 +34-58,57-57 +20-68,21-68 +16-16,15-72 +38-40,37-41 +46-51,9-48 +4-96,4-97 +30-83,30-41 +3-9,9-10 +72-73,39-72 +6-95,94-94 +58-71,57-72 +11-86,10-55 +9-79,10-78 +12-92,5-93 +10-85,68-85 +11-95,10-12 +11-37,36-56 +28-87,87-97 +21-96,20-20 +71-80,18-81 +23-24,2-23 +7-9,9-38 +37-55,3-55 +72-86,54-87 +48-94,11-94 +68-92,69-87 +51-53,50-53 +39-88,40-87 +3-12,1-13 +5-82,2-82 +5-67,1-68 +94-94,16-95 +31-31,32-96 +9-99,10-99 +62-64,2-63 +11-98,11-97 +15-36,27-35 +39-41,39-40 +11-16,11-15 +14-16,15-53 +14-90,14-91 +20-81,20-82 +59-91,39-90 +39-83,38-83 +76-78,43-77 +69-91,15-69 +67-85,37-84 +20-63,52-63 +38-68,37-38 +33-34,33-92 +37-66,66-83 +3-99,2-99 +77-79,74-79 +45-76,46-75 +59-95,40-53 +10-65,64-66 +41-92,42-56 +6-77,6-77 +2-91,2-3 +16-75,16-83 +64-93,63-92 +13-91,8-90 +12-63,13-13 +98-99,4-99 +60-81,29-61 +31-96,96-96 +89-90,5-90 +34-39,37-40 +73-88,74-89 +37-59,46-59 +23-85,24-84 +8-31,6-32 +16-55,15-16 +37-37,10-77 +39-85,84-86 +2-80,2-82 +11-66,5-12 +34-48,33-35 +8-88,1-73 +39-91,40-92 +69-93,68-95 +18-49,18-77 +89-91,90-91 +98-98,18-98 +14-93,15-92 +11-12,11-46 +25-81,26-80 +27-95,26-27 +14-75,74-76 +53-80,53-81 +43-95,43-96 +27-89,84-90 +13-96,14-89 +12-13,13-47 +45-81,44-49 +95-97,5-96 +31-31,32-94 +74-84,39-85 +7-93,8-92 +30-61,62-97 +22-72,22-69 +58-74,59-75 +1-3,2-61 +4-17,11-16 +52-52,51-53 +31-93,4-92 +23-85,84-85 +17-98,16-97 +8-32,9-48 +7-90,89-90 +12-98,12-87 +62-88,61-61 +34-89,31-88 +13-15,14-98 +9-37,38-78 +23-43,22-44 +7-30,30-31 +43-43,42-84 +2-98,1-98 +15-84,14-85 +45-84,84-84 +14-14,15-42 +2-92,2-91 +90-91,23-90 +35-56,34-34 +2-91,4-90 +34-97,8-97 +9-75,9-75 +3-17,18-98 +55-91,55-92 +54-95,55-99 +42-43,43-74 +34-42,33-42 +13-79,79-79 +15-85,16-85 +25-30,29-29 +19-21,20-21 +37-72,36-48 +27-52,1-53 +27-34,33-33 +1-72,4-72 +28-67,66-66 +61-64,64-91 +42-75,68-74 +96-97,23-96 +3-29,4-13 +13-90,56-90 +7-89,8-89 +21-23,22-47 +95-96,57-96 +59-59,20-59 +4-5,4-90 +31-86,30-85 +13-91,14-91 +62-70,34-36 +66-67,12-67 +4-5,5-33 +10-54,9-55 +73-82,50-73 +59-68,60-68 +36-63,35-47 +30-87,31-86 +18-50,6-51 +18-64,17-64 +87-88,14-88 +66-66,35-75 +27-59,5-28 +6-53,1-52 +12-84,13-83 +36-74,53-75 +9-90,13-90 +94-96,62-95 +44-58,44-86 +26-81,82-92 +1-38,18-39 +81-81,39-80 +9-44,8-45 +15-84,12-15 +6-14,5-76 +15-88,15-87 +59-95,59-92 +78-98,28-78 +66-77,65-76 +49-63,19-64 +1-83,22-64 +19-91,20-92 +14-80,13-80 +14-56,43-55 +29-68,36-69 +46-72,47-73 +14-28,6-27 +39-54,39-40 +37-72,37-38 +96-98,11-97 +77-96,96-97 +47-64,60-91 +1-94,3-93 +81-98,56-98 +75-88,88-88 +40-94,93-93 +19-97,19-99 +18-18,19-97 +49-96,48-95 +5-93,92-93 +17-18,17-84 +77-77,23-77 +25-27,6-27 +6-98,98-98 +17-67,17-66 +4-34,4-50 +40-41,40-99 +38-96,38-95 +23-44,23-44 +38-59,58-58 +88-89,88-88 +40-46,39-83 +66-76,23-76 +15-64,16-65 +6-36,36-37 +17-53,17-52 +41-79,42-78 +1-71,70-71 +5-87,45-87 +25-29,7-29 +9-16,10-26 +69-85,67-86 +25-57,8-57 +2-56,3-55 +57-76,58-93 +7-7,6-94 +26-93,27-94 +3-89,34-88 +52-70,51-65 +7-73,59-72 +66-99,47-65 +16-45,26-45 +72-79,71-78 +79-79,20-80 +23-90,22-91 +71-96,70-96 +68-88,11-72 +31-76,86-87 +13-93,12-94 +20-98,20-98 +6-91,9-90 +7-92,20-86 +11-90,11-62 +8-89,9-88 +31-98,32-94 +19-19,18-73 +31-70,1-71 +2-81,33-82 +11-65,76-83 +11-89,90-97 +81-82,39-82 +1-96,3-95 +9-98,8-98 +22-25,23-25 +16-73,14-72 +5-79,44-80 +95-95,10-96 +1-90,1-97 +13-73,13-72 +95-96,23-96 +4-46,37-47 +19-34,19-99 +50-91,19-90 +5-72,13-68 +16-71,15-72 +8-95,89-94 +4-97,1-98 +45-89,44-90 +35-36,35-97 +28-79,16-78 +88-93,88-92 +18-85,89-92 +20-91,19-92 +6-49,12-48 +12-46,5-51 +36-98,75-97 +6-21,4-21 +5-83,60-84 +40-95,39-96 +96-97,17-97 +21-94,21-72 +19-90,10-20 +9-21,22-65 +4-55,4-54 +8-86,85-85 +3-82,3-81 +36-54,37-53 +15-87,14-14 +7-53,8-52 +96-96,13-97 +3-72,71-71 +1-79,5-78 +23-55,16-60 +15-41,41-76 +64-69,64-97 +3-99,3-99 +3-93,2-93 +16-94,17-94 +10-94,9-94 +26-96,15-96 +16-52,19-52 +12-91,12-92 +52-95,51-99 +2-48,2-3 +19-59,13-58 +6-90,7-7 +73-95,74-99 +7-74,74-74 +21-44,33-45 +41-89,40-42 +94-96,80-95 +77-86,82-85 +53-93,58-92 +5-98,97-97 +9-71,9-72 +6-84,6-84 +90-94,73-84 +1-98,2-9 +20-88,52-87 +9-89,9-96 +12-84,11-11 +2-29,1-2 +2-98,1-99 +44-45,31-44 +7-77,8-98 +3-4,3-6 +2-20,4-21 +36-63,62-62 +1-98,8-99 +43-82,81-81 +18-30,17-29 +49-94,14-49 +28-60,1-59 +2-98,3-98 +22-38,37-39 +2-79,78-95 +25-30,24-31 +1-82,4-82 +4-84,4-83 +8-96,8-8 +27-67,27-68 +9-27,17-27 +8-70,69-69 +19-20,20-88 +13-79,47-79 +2-67,3-68 +8-60,36-60 +29-33,32-34 +9-94,8-9 +15-28,15-28 +1-2,2-53 +43-47,8-55 +26-82,25-26 +10-97,96-96 +28-33,27-39 +77-81,76-82 +28-78,67-79 +14-80,48-79 +76-77,59-76 +11-11,10-89 +8-30,5-17 +11-75,12-75 +13-90,55-91 +14-15,14-39 +94-96,23-95 +20-84,20-89 +28-95,29-94 +3-55,1-54 +3-98,3-97 +44-89,43-89 +58-96,57-74 +26-85,26-26 +52-53,52-91 +2-95,6-96 +3-87,87-97 +9-25,7-26 +8-76,14-75 +14-38,7-43 +66-67,66-80 +49-98,48-50 +77-96,77-97 +29-89,27-28 +42-92,42-91 +9-71,8-8 +40-40,1-39 +26-27,26-89 +77-78,17-77 +20-33,31-34 +64-65,23-65 +31-62,32-60 +61-81,61-80 +57-87,87-87