From 108f50e8ea8ec0967c0f082a0ce87c0118d6b2e8 Mon Sep 17 00:00:00 2001 From: Javier-Orestis MANTZIOS Date: Tue, 7 Jan 2025 10:39:37 +0200 Subject: [PATCH] initialise --- 1/input | 1000 +++++++++++++++++++++++++++++++++++ 1/main.go | 71 +++ 2/input | 1000 +++++++++++++++++++++++++++++++++++ 2/main.go | 115 ++++ 2/main.go.BAK | 50 ++ 3/input | 6 + 3/main.go | 63 +++ 4/exampleinput | 10 + 4/input | 140 +++++ 4/main.go | 73 +++ 5/input | 1374 ++++++++++++++++++++++++++++++++++++++++++++++++ 5/main.go | 109 ++++ 5/main.go.BAK | 80 +++ 5/test | 28 + 6/input | 130 +++++ 6/main.go | 160 ++++++ 6/test | 10 + 7/input | 850 ++++++++++++++++++++++++++++++ 7/main.go | 84 +++ 7/test | 9 + 8/input | 50 ++ 8/main.go | 93 ++++ 8/temp | 0 8/test | 12 + test/main.go | 17 + 25 files changed, 5534 insertions(+) create mode 100644 1/input create mode 100644 1/main.go create mode 100644 2/input create mode 100644 2/main.go create mode 100644 2/main.go.BAK create mode 100644 3/input create mode 100644 3/main.go create mode 100644 4/exampleinput create mode 100644 4/input create mode 100644 4/main.go create mode 100644 5/input create mode 100644 5/main.go create mode 100644 5/main.go.BAK create mode 100644 5/test create mode 100644 6/input create mode 100644 6/main.go create mode 100644 6/test create mode 100644 7/input create mode 100644 7/main.go create mode 100644 7/test create mode 100644 8/input create mode 100644 8/main.go create mode 100644 8/temp create mode 100644 8/test create mode 100644 test/main.go diff --git a/1/input b/1/input new file mode 100644 index 0000000..0ff99b9 --- /dev/null +++ b/1/input @@ -0,0 +1,1000 @@ +97924 12015 +50267 32019 +98415 10716 +64856 63472 +73972 11396 +85009 60876 +16084 81584 +63342 45754 +36722 57910 +71800 33139 +13657 42097 +31646 60883 +13033 45362 +98175 50742 +12224 82309 +26745 36160 +91733 22906 +63235 23212 +34149 43474 +55819 92797 +89877 82309 +63876 68418 +35017 24286 +71693 56515 +67230 56504 +32107 70146 +29455 43966 +10294 80966 +11503 97276 +45021 44890 +65889 45042 +22646 50684 +29246 40041 +94894 64304 +97487 32858 +11658 25139 +86638 37390 +77389 69681 +20834 20641 +43948 97853 +25169 18624 +47469 14334 +77677 51466 +67863 10346 +66135 44506 +22510 90140 +39330 56504 +96958 57081 +65629 98292 +40599 32865 +41131 50742 +41361 91497 +44833 76741 +32056 53741 +15025 58921 +32170 52656 +95391 10777 +55371 78010 +48305 51466 +65862 89174 +40636 54184 +97450 99374 +77105 83865 +34812 41764 +23999 77192 +25503 93924 +66670 24286 +30994 12382 +76175 60974 +43005 50445 +53741 14287 +67639 60769 +68473 53741 +16078 76080 +51006 54184 +74520 49015 +17232 40707 +25445 89174 +39404 16084 +23041 85801 +54140 17286 +46419 20749 +49484 46855 +19164 86911 +39289 12150 +59326 22031 +47693 53741 +89369 86087 +78926 99284 +46255 78050 +53879 65533 +27064 21120 +21756 63733 +46201 58079 +83358 45402 +67814 39702 +36582 27906 +68742 32858 +63598 80368 +46069 15449 +43061 21120 +82842 43966 +47757 41841 +11761 26946 +55059 78870 +73640 28789 +87885 16294 +76819 42168 +99933 82831 +96701 43783 +33926 50742 +53211 50456 +63392 97067 +86076 89174 +22252 52322 +82469 52960 +15384 19277 +17446 62973 +60995 85599 +67563 99208 +81796 42097 +13959 65386 +67714 81831 +98828 55717 +66905 59486 +12690 99284 +24626 21468 +14738 49115 +58555 17335 +23470 27139 +38356 94975 +21420 34794 +85109 99284 +88215 16754 +13822 56504 +78720 97465 +17622 49756 +27946 39646 +42737 85951 +39857 51466 +98335 73635 +51079 27139 +75618 80096 +55716 22031 +44439 79910 +74943 85951 +15914 69859 +94892 51466 +89851 26946 +58970 40772 +89048 21927 +79217 43966 +22327 21545 +15513 56526 +52584 39743 +17822 37390 +50437 45539 +26861 99284 +39402 43966 +44176 98943 +93367 38719 +85462 35314 +70936 30406 +64975 53741 +69603 40772 +27447 43966 +48913 50742 +55729 17033 +55903 55600 +58608 73308 +13030 62519 +79586 53741 +85885 78724 +47696 26716 +89036 95563 +51691 35314 +74369 27139 +83246 50742 +34233 53741 +87921 48574 +12660 51466 +15408 54159 +82361 21120 +78963 99205 +87395 10043 +73712 24286 +97972 97487 +77207 34050 +26598 21574 +51812 47558 +34508 90761 +26436 40460 +71011 60574 +50890 51466 +50493 24854 +16217 47118 +44890 73772 +44429 26946 +99607 43966 +38107 99307 +10208 32858 +73098 45260 +26515 70155 +53750 55600 +74904 44506 +89898 43966 +71445 37467 +77746 82076 +20131 34528 +67840 12429 +36620 80900 +18892 95044 +73474 85951 +83450 24551 +45728 11046 +66927 40772 +35585 85951 +93945 83865 +76199 18892 +26536 16084 +58275 26910 +51874 42097 +88833 57054 +75871 85642 +67764 32556 +69526 26946 +19475 16084 +80585 90761 +34189 82309 +96205 55600 +11371 24399 +38079 51194 +99465 44890 +21120 99284 +15731 84749 +82309 28950 +33121 47050 +84859 31889 +93071 22719 +69403 40772 +47701 55127 +94758 12405 +71944 40772 +59059 27139 +23522 48009 +69897 20227 +96432 53857 +40161 56742 +99974 31605 +28726 40772 +43411 19960 +52521 51466 +10024 51312 +84954 35314 +33296 99284 +77780 49638 +89571 26843 +13582 87187 +27081 74290 +29330 26946 +35469 42097 +96455 60260 +44473 20645 +52280 90488 +36181 17193 +83515 89920 +77203 22203 +31113 70569 +93446 50742 +94776 14334 +65132 74481 +76822 22765 +76108 25212 +88359 81025 +58602 89174 +71874 21120 +78276 98125 +39092 22656 +62278 65305 +40915 21120 +55896 26933 +89049 11422 +73736 82035 +41226 93643 +91298 94509 +48613 68016 +48763 50742 +72203 25900 +83036 90823 +40070 22471 +34155 77007 +66614 75044 +99172 34719 +10261 48242 +75196 91994 +60212 32858 +82136 42097 +68902 40955 +61584 61094 +18196 97838 +12112 99284 +28990 51912 +21082 40991 +45932 51466 +71891 70388 +93524 71891 +36886 20645 +84927 11097 +90640 82280 +12240 22031 +50754 79877 +12243 56504 +21896 69022 +27361 50742 +92599 91087 +50881 17965 +19258 92324 +48109 51450 +39617 66508 +33422 59580 +24453 21120 +70071 76583 +61099 99284 +32270 81634 +18554 90140 +57108 40772 +72972 82180 +44178 35314 +58969 35314 +68638 32858 +59752 97487 +91349 85951 +42541 91799 +11241 85951 +56014 40772 +18240 82309 +83562 82349 +99794 20645 +49642 24286 +26318 35314 +20645 16436 +95467 32543 +85129 29179 +63111 28393 +21776 47366 +17413 13453 +39834 96167 +54442 65122 +25618 90140 +67027 50742 +91899 59045 +36861 84429 +41069 24405 +39818 26532 +41305 57846 +50844 54184 +35314 52839 +13646 66988 +21610 72792 +84316 67867 +37390 27139 +33072 38672 +50742 68302 +95333 44890 +67978 10314 +54472 77425 +65124 64037 +62367 57908 +88774 40958 +71725 85651 +27200 73263 +72832 16084 +93194 20645 +84331 87651 +83654 96024 +98518 44506 +26270 85951 +17471 54184 +40445 40716 +24801 98329 +71775 48960 +63886 62621 +11574 58455 +36092 85951 +70761 10112 +61291 26292 +97303 19625 +44506 86054 +91586 95307 +58301 40772 +81698 27139 +72921 26946 +50502 36406 +16298 86304 +75558 37706 +22495 99284 +33661 82309 +85183 85951 +57125 55600 +32610 99284 +61179 38278 +59372 93008 +74037 14334 +48967 43966 +57442 16159 +26047 21120 +23188 89174 +23633 16084 +15300 57527 +11726 50556 +59493 94320 +66596 32570 +78092 75310 +48254 42097 +23338 50742 +36327 78906 +14142 94284 +26946 68750 +51040 40772 +69209 40772 +15882 54414 +31997 14334 +12496 32775 +54801 60587 +92254 34864 +54184 56224 +50128 37390 +46755 37390 +68205 42097 +16526 31984 +33415 89174 +95561 99284 +58231 11999 +12000 27968 +13762 24130 +20783 29706 +49870 13617 +31028 85455 +73097 31238 +36095 22031 +15523 97714 +41560 34014 +30530 90052 +34128 97988 +91541 54184 +97402 68624 +14133 22098 +95923 88909 +21065 76908 +54343 27139 +17923 52386 +39271 97487 +54329 47300 +29173 12083 +73679 66145 +25043 79638 +23367 27139 +47733 73848 +50178 19841 +61856 75136 +12334 99284 +24075 99000 +66813 16084 +68591 37390 +60548 26946 +47476 51466 +65067 34238 +27139 43966 +90127 90140 +71661 53741 +76564 86323 +14606 74629 +33073 20645 +28929 99210 +20290 16026 +55600 31919 +44895 95367 +69018 51466 +19996 10788 +79035 39402 +59205 55228 +38746 94339 +86509 76500 +99613 75251 +21577 12189 +97880 60387 +91425 85951 +84219 85951 +82752 51466 +24031 14334 +21843 51466 +67480 16084 +89728 72818 +28954 99145 +88314 89174 +18726 32858 +87526 25968 +85951 85741 +64143 78312 +42517 49699 +13848 22031 +43260 35799 +53772 81476 +54544 99120 +38528 26946 +75966 82991 +66179 95509 +58180 45829 +53138 99284 +43795 67657 +75091 16278 +82097 47194 +58590 11318 +50521 83696 +27323 81208 +33112 99284 +27922 49371 +65787 90869 +40517 36120 +20919 48795 +30416 63304 +88719 50742 +79993 75970 +27124 51458 +35850 70479 +47642 30113 +56934 42097 +99900 51466 +21591 33043 +97673 89174 +29342 22031 +75687 90761 +45898 50821 +22897 63031 +23889 77846 +63662 48377 +65299 75957 +44563 99284 +60281 51466 +49181 35314 +50909 52749 +21600 11254 +44988 13205 +58351 33964 +84132 90140 +33795 94103 +30993 90836 +23660 42097 +56833 67799 +84296 30712 +27172 23612 +41123 64339 +70231 50742 +65636 35314 +24047 72155 +11869 60279 +44666 91711 +81159 79500 +75418 66073 +18982 51466 +54865 26946 +91042 14334 +21791 89073 +86188 22769 +92550 56504 +63942 48743 +55260 92181 +97155 69816 +44593 25507 +94520 37390 +16803 31162 +99284 94474 +10940 16434 +51986 32334 +94727 54184 +79564 22031 +67524 42754 +96074 54184 +32231 87988 +82182 11698 +36414 29276 +16281 28226 +21085 86754 +98238 43817 +53299 42097 +19359 93023 +46340 72842 +16355 51322 +70234 51466 +50841 13798 +81149 71891 +58011 53741 +80355 58080 +62858 56427 +25160 14155 +29287 26946 +82307 37276 +45594 10162 +52167 67510 +66037 18892 +16339 26946 +74466 59737 +68243 96568 +70410 82183 +18833 81661 +52684 20077 +99904 14334 +64936 32858 +67435 35314 +25168 51466 +48685 52200 +87833 43966 +16974 56000 +82852 91407 +54986 42097 +56112 49272 +64314 67342 +66607 54466 +61959 45397 +20294 14988 +22416 99280 +15287 22031 +42081 17788 +69276 85883 +19958 89174 +14337 24625 +43966 45494 +56772 64995 +37195 65787 +71264 60398 +45446 14947 +27319 54184 +71714 56504 +98898 54184 +15964 53181 +35923 34140 +92462 99284 +70969 21414 +60163 81686 +26799 45525 +57327 92053 +19339 51466 +56504 91566 +53113 44890 +78876 51902 +96200 89174 +82490 70725 +44316 36065 +71051 88682 +89880 22031 +27972 74592 +58858 41411 +31090 64119 +99124 40772 +77060 35314 +67020 25937 +28781 22031 +58289 99284 +89174 50742 +38323 63710 +42607 42383 +12543 89055 +23349 38990 +70058 59526 +15437 50742 +59862 98161 +30674 37596 +14449 18706 +42471 22031 +41124 32858 +77330 44890 +91002 14369 +12075 40772 +51581 75361 +17412 76932 +57784 38581 +78558 99284 +68326 18310 +33313 54184 +18353 52449 +91690 32831 +31047 33504 +41819 19604 +97743 65016 +81549 20645 +72159 33409 +38296 27139 +39901 97487 +26924 14334 +77429 52218 +90666 42785 +25384 60133 +61440 92089 +42764 30200 +26668 94108 +44171 93942 +96575 54184 +77777 25665 +65805 84579 +66448 48617 +66204 20645 +67751 33623 +48577 64139 +14034 62738 +82234 33385 +94447 92116 +21669 80984 +76758 43995 +16998 91461 +10808 14581 +91668 92007 +42411 65834 +83439 51090 +57286 56504 +26423 85951 +47687 90581 +75978 35314 +79027 96347 +13122 76475 +43173 64852 +33696 85951 +26050 53741 +29903 49202 +55762 67069 +22725 93128 +92748 37390 +75292 46134 +84901 83013 +82424 53741 +49756 10496 +99049 95224 +21549 42097 +45030 90831 +42687 43966 +24675 43966 +64330 78889 +26258 21120 +11886 18810 +10674 55709 +80983 36441 +73290 20645 +91623 50742 +68510 82209 +96050 27139 +29559 40772 +87297 79655 +16161 22031 +69453 73178 +79979 36506 +28404 82655 +95222 38807 +61168 81721 +39809 74305 +24627 16084 +48823 82344 +22852 44523 +67111 26946 +22838 97487 +19454 33107 +84203 54184 +97780 35714 +53203 27139 +89425 97487 +16614 18100 +19219 99284 +20569 82309 +48161 40982 +17213 31332 +70935 40772 +86566 78489 +24611 91868 +54359 97873 +95758 54184 +20532 73488 +49070 58755 +66014 54184 +69011 69128 +54241 99864 +61068 82574 +64852 26325 +60260 90900 +26299 10028 +58452 27139 +26134 22031 +84291 31012 +94851 23134 +90147 21120 +88435 46853 +26639 32875 +98570 64925 +66700 61354 +57045 31104 +30983 77622 +77419 62276 +61144 34934 +79828 81916 +38801 34632 +71141 73192 +30543 33571 +33787 93024 +93255 97304 +27104 93186 +43923 23461 +70069 73947 +23376 79180 +82293 51960 +37692 27139 +91328 69682 +47801 37390 +90140 50742 +40772 21893 +77630 62221 +26106 24286 +82191 79832 +29674 85951 +32858 35263 +57709 50742 +70834 74783 +34807 23868 +40646 93606 +17334 72970 +79995 39402 +22031 14334 +59137 40772 +23515 23407 +69665 59362 +78363 31953 +74969 85136 +51172 40772 +11229 98531 +86385 53822 +71049 73230 +90321 64852 +15381 24392 +17377 14334 +35732 26946 +92220 98405 +75143 22448 +93217 22031 +12345 80271 +66240 40772 +63460 31057 +14334 59725 +52629 82139 +67549 57710 +32589 21120 +40973 51466 +48086 64809 +62405 56431 +69385 65345 +73015 28247 +47116 35314 +89461 53741 +89978 37390 +45093 43966 +95580 20645 +90761 22983 +61770 37390 +91506 17021 +37148 58211 +73119 29135 +83826 16084 +11602 46435 +79485 43966 +51373 14334 +71333 50742 +41091 71891 +60255 11833 +70778 44890 +76205 26946 +67609 32858 +65250 83865 +81623 12242 +20105 17154 +53573 89174 +67594 55600 +30437 56504 +74127 98641 +43012 24286 +82823 90761 +87461 43966 +35267 22031 +99386 71177 +47451 23934 +51886 43966 +45000 98769 +93502 69179 +26127 42438 +61492 44506 +16858 20657 +77633 89949 +29357 86929 +91974 85951 +87979 14334 +12707 83865 +38824 83968 +46482 25275 +69244 35249 +10765 99284 +30619 53741 +30590 55600 +99292 85951 +28244 43966 +18494 85951 +91105 44506 +73930 26946 +30813 85951 +67308 94250 +54758 85951 +43568 33487 +15869 34016 +82010 27139 +33131 52450 +57985 12045 +93101 51270 +15835 64414 +24286 23491 +56944 11795 +47755 10809 +82704 75027 +93787 90140 +51466 20555 +51856 14334 +30252 44890 +44052 31936 +20691 68431 +57033 63455 +13300 43535 +33712 84239 +97080 51559 +91808 22031 +90652 22031 +64155 44890 +65463 40772 +44798 52819 +43936 44156 +18253 27360 +73289 89174 +71164 56212 +34646 20645 +42097 89582 +15990 55600 +56628 41785 +68636 89174 +67043 16186 +25652 34811 +87109 70679 +83865 43966 +54773 24922 +12778 27139 +41699 62346 +59666 17557 +94699 37390 +77535 27125 +19069 18324 +34344 51466 +24906 41267 +91226 76330 +58992 17879 +21084 37390 +95352 27424 +14593 14167 +57258 79480 +41550 98477 +59908 49327 +63930 56501 +52103 49712 +98431 19293 +64232 64852 +10638 14334 +52217 35314 +11797 27139 +12501 53741 +39316 73238 +62625 54184 +54433 27493 +23801 35877 +15292 50742 +28822 55302 +90501 18892 +52285 33785 +42385 21120 +34500 97487 +39882 93726 +12013 47966 +42691 18536 +57217 14334 +31320 58173 +90532 42331 +65216 54184 +78393 42097 +48315 29944 +37332 48362 +40774 98927 +16062 28783 +73931 39391 +54344 21435 +17846 56504 +61807 42097 +93272 97487 diff --git a/1/main.go b/1/main.go new file mode 100644 index 0000000..494e3f4 --- /dev/null +++ b/1/main.go @@ -0,0 +1,71 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "strconv" + "strings" + "slices" +) + +func totalDistance(firstList, secondList []int) int { + slices.Sort(firstList) + slices.Sort(secondList) +// fmt.Println(thirdList) + result := 0 + for i := range firstList { + if firstList[i] > secondList[i] { + result = result + firstList[i] - secondList[i] + } else { + result = result + secondList[i] - firstList[i] + } + } + return result +} + +func similarityScore(firstList, secondList []int) int { + result := 0 + appearances := []int{} + for i:=range firstList { + count := 0 + for j:=range secondList { + if firstList[i] == secondList[j] { + count = count + 1 + } + } + appearances = append(appearances, count) + result = result + firstList[i] * count + } + return result +} + +func main() { + filePath := "input" + file, err := os.Open(filePath) + if err != nil { + fmt.Printf("Error opening file: %v\n", err) + return + } + defer file.Close() + var firstList []int + var secondList []int + scanner := bufio.NewScanner(file) + for scanner.Scan() { + // Split the line into parts + line := scanner.Text() + parts := strings.Fields(line) // Fields splits by whitespace + // Convert parts to integers + first, err1 := strconv.Atoi(parts[0]) + second, err2 := strconv.Atoi(parts[1]) + if err1 != nil || err2 != nil { + fmt.Printf("Error parsing numbers on line: %s\n", line) + continue + } + firstList = append(firstList, first) + secondList = append(secondList, second) + } + fmt.Println(totalDistance(firstList, secondList)) + fmt.Println(similarityScore(firstList, secondList)) +} + diff --git a/2/input b/2/input new file mode 100644 index 0000000..beadfd6 --- /dev/null +++ b/2/input @@ -0,0 +1,1000 @@ +75 76 77 80 82 85 84 +49 52 53 55 58 59 61 61 +54 57 60 62 66 +4 6 8 10 11 14 19 +82 85 86 83 85 87 89 +85 86 87 86 89 88 +69 72 73 76 77 74 75 75 +4 6 4 5 8 11 15 +6 9 10 12 15 16 15 20 +41 43 43 45 48 51 +48 51 53 53 56 58 59 58 +67 69 71 74 74 77 77 +82 83 85 85 89 +21 24 26 26 29 31 36 +4 7 10 11 15 18 20 21 +56 58 60 63 65 69 70 68 +24 26 30 32 33 35 35 +12 13 15 17 20 24 25 29 +52 53 54 57 58 59 63 68 +43 46 48 55 58 59 +15 16 23 26 27 28 26 +49 50 53 56 59 64 64 +56 58 59 65 69 +3 5 6 8 13 18 +45 44 46 47 50 52 54 +37 35 36 37 34 +53 50 51 53 54 56 56 +80 78 79 80 81 83 86 90 +32 31 34 37 40 45 +76 75 77 79 77 80 +26 25 22 24 23 +27 26 23 24 25 25 +96 93 96 93 97 +37 34 35 36 39 36 38 45 +68 65 66 67 67 70 72 +41 39 42 42 43 40 +88 86 89 90 90 91 93 93 +24 23 25 26 26 28 32 +79 77 77 80 83 88 +50 48 50 52 55 58 62 63 +39 38 39 41 45 47 48 45 +40 38 41 42 44 45 49 49 +50 49 53 56 60 +74 73 77 80 86 +40 37 38 39 42 48 49 50 +12 11 17 20 22 23 25 23 +74 71 73 75 80 83 83 +20 17 23 25 29 +32 30 37 39 42 48 +80 80 83 86 87 +73 73 76 78 80 83 85 82 +19 19 22 25 28 30 32 32 +43 43 46 49 53 +69 69 72 75 80 +24 24 25 22 25 27 +60 60 58 61 64 65 62 +52 52 50 51 53 55 55 +56 56 59 56 60 +37 37 38 36 38 45 +7 7 9 12 12 13 14 16 +52 52 55 57 57 56 +89 89 89 91 91 +7 7 7 10 13 15 17 21 +43 43 44 47 50 50 52 58 +4 4 5 9 10 11 14 17 +11 11 13 17 15 +7 7 11 14 14 +55 55 58 62 64 66 70 +75 75 78 79 81 85 88 94 +56 56 63 64 67 +5 5 7 10 12 13 18 16 +32 32 38 41 43 44 47 47 +36 36 43 44 48 +9 9 12 17 22 +11 15 16 18 20 21 23 26 +50 54 55 57 60 62 64 61 +86 90 92 94 95 95 +84 88 90 93 97 +3 7 9 12 15 21 +36 40 41 44 47 46 47 50 +39 43 45 43 46 47 50 47 +84 88 90 87 90 90 +2 6 7 4 6 10 +31 35 34 35 36 39 45 +11 15 15 16 18 +1 5 7 9 11 14 14 13 +54 58 60 60 63 63 +52 56 58 60 60 64 +61 65 65 66 71 +48 52 55 56 60 61 +77 81 84 88 89 86 +58 62 63 66 67 71 74 74 +71 75 78 81 82 84 88 92 +82 86 87 91 98 +41 45 48 50 55 58 61 +70 74 77 78 83 86 88 85 +71 75 82 84 84 +19 23 30 31 35 +59 63 70 72 77 +45 51 53 55 56 +8 14 16 19 17 +46 52 55 58 58 +71 77 79 82 84 87 88 92 +68 75 77 80 87 +29 35 38 35 36 38 39 +34 39 38 41 43 45 42 +26 33 35 34 36 39 41 41 +85 92 95 92 96 +33 38 40 39 40 41 48 +83 89 92 93 93 94 95 96 +85 92 95 95 97 96 +54 59 59 60 61 62 64 64 +27 34 35 37 37 41 +69 75 77 79 81 81 86 +25 30 31 32 36 38 +51 58 62 63 64 63 +54 61 62 65 69 72 74 74 +59 66 68 69 73 76 79 83 +14 19 20 24 30 +33 40 42 48 51 52 +28 33 36 37 42 45 43 +44 50 55 58 58 +14 21 22 29 30 34 +35 40 43 49 52 53 59 +63 61 58 56 54 51 53 +52 49 46 45 45 +74 72 69 68 67 63 +80 77 74 73 72 67 +77 74 76 73 70 68 67 +20 17 16 15 17 19 +45 42 41 38 36 35 38 38 +55 54 56 53 49 +20 18 17 15 14 16 10 +17 14 14 12 10 8 6 +72 71 69 68 66 66 63 65 +31 30 30 27 26 25 24 24 +51 49 48 48 47 43 +26 24 24 21 20 14 +19 18 14 13 10 8 +84 81 80 76 78 +47 45 41 38 35 35 +68 67 64 60 56 +74 71 68 66 62 60 54 +43 41 38 36 33 27 26 +63 60 53 51 54 +29 28 23 20 17 16 14 14 +46 45 42 39 34 31 30 26 +23 21 19 13 11 5 +27 29 26 24 23 22 19 +86 88 86 83 81 79 81 +57 59 57 54 52 50 47 47 +21 24 21 18 14 +61 63 62 61 59 57 50 +96 99 97 98 96 95 92 +66 69 71 69 71 +41 43 42 39 37 40 37 37 +79 82 85 84 80 +77 79 77 78 73 +22 24 24 22 20 +63 66 64 64 66 +19 22 22 21 18 18 +95 97 97 95 93 91 87 +32 33 31 29 29 28 25 18 +42 44 43 39 38 36 34 31 +27 29 27 24 22 18 20 +20 22 18 15 15 +68 69 65 63 59 +79 81 77 76 73 72 67 +68 70 69 63 62 60 59 56 +42 44 39 36 33 36 +88 90 87 82 81 79 79 +66 69 66 59 58 54 +70 71 70 68 66 60 54 +77 77 76 74 72 71 69 66 +43 43 40 37 34 33 36 +21 21 20 18 18 +34 34 32 29 27 25 22 18 +79 79 78 76 73 66 +89 89 92 90 88 +77 77 75 73 72 73 76 +84 84 83 85 85 +30 30 28 26 23 22 25 21 +22 22 25 23 21 20 15 +66 66 66 64 63 62 60 57 +75 75 73 70 67 67 68 +33 33 33 30 27 25 22 22 +55 55 52 50 50 46 +40 40 38 38 37 32 +63 63 62 58 55 +95 95 94 90 92 +87 87 85 82 78 78 +88 88 84 83 79 +85 85 83 79 73 +53 53 51 44 42 +12 12 7 5 4 6 +53 53 48 47 44 44 +35 35 32 25 22 18 +46 46 39 36 34 27 +26 22 21 19 18 15 +91 87 86 85 83 85 +24 20 17 15 14 14 +66 62 60 57 54 50 +67 63 62 60 59 57 51 +41 37 35 38 37 36 33 31 +18 14 15 12 9 8 5 8 +37 33 32 30 29 30 30 +70 66 64 63 60 61 58 54 +34 30 28 26 23 26 24 18 +28 24 22 19 16 16 15 +54 50 50 48 47 44 41 43 +82 78 75 75 75 +38 34 34 33 30 29 25 +52 48 47 46 46 43 37 +20 16 15 13 11 10 6 5 +57 53 51 47 48 +89 85 83 79 78 76 76 +28 24 23 21 17 16 15 11 +87 83 79 78 77 74 73 66 +63 59 58 56 49 48 +87 83 81 74 75 +43 39 37 31 31 +80 76 75 73 66 62 +48 44 43 41 34 27 +53 46 43 41 38 37 34 +60 55 52 49 46 45 48 +56 50 48 46 43 40 37 37 +93 86 85 84 82 80 76 +20 15 14 11 10 3 +73 67 64 63 60 58 59 58 +55 49 47 45 47 49 +15 10 9 8 7 9 9 +44 37 39 37 35 33 31 27 +94 87 84 87 80 +67 60 60 58 56 +72 66 63 63 60 57 60 +69 62 60 60 57 55 55 +17 10 8 6 6 2 +93 88 87 87 82 +40 33 31 27 26 +58 52 51 50 47 45 41 43 +87 82 81 77 77 +56 50 47 43 42 40 38 34 +86 79 77 75 71 68 62 +95 88 86 83 82 76 73 +78 73 71 64 65 +61 56 51 48 47 47 +68 63 58 56 54 50 +25 19 14 13 6 +49 51 52 54 51 +93 94 95 96 96 +23 24 26 28 29 31 34 38 +83 85 87 88 89 95 +66 68 67 68 70 +14 15 14 17 15 +6 8 6 8 10 10 +35 36 39 36 40 +38 39 36 39 46 +10 11 13 13 16 19 +23 25 28 29 31 31 28 +63 66 67 67 67 +67 70 70 73 77 +34 36 39 41 41 42 48 +85 87 89 93 94 96 +91 92 95 99 98 +17 19 22 26 28 28 +55 58 60 64 65 69 +78 80 84 87 89 91 97 +5 7 8 14 15 16 19 +2 4 6 9 12 17 19 18 +33 35 40 43 44 44 +1 4 11 13 17 +40 41 43 50 52 59 +67 66 68 69 72 +40 37 39 40 39 +56 55 58 61 61 +33 31 32 34 37 39 40 44 +58 57 58 60 61 63 65 70 +9 8 7 8 11 +41 39 37 39 42 43 41 +59 58 61 62 65 67 64 64 +92 91 94 95 92 93 95 99 +89 87 88 86 89 95 +81 79 79 82 84 87 90 93 +75 73 75 75 74 +11 10 11 13 13 14 14 +87 85 88 88 92 +63 62 65 67 70 70 76 +53 50 54 56 59 60 62 +7 5 8 11 15 18 21 20 +94 91 92 96 96 +62 60 63 67 71 +9 8 11 14 16 20 26 +63 61 66 67 68 71 74 +49 47 48 55 52 +29 26 28 31 38 41 42 42 +49 48 51 57 60 64 +65 64 67 74 76 79 84 +32 32 35 38 41 44 45 +80 80 81 82 85 88 85 +77 77 79 80 81 82 82 +78 78 81 82 86 +26 26 28 30 33 35 42 +91 91 92 90 91 92 +96 96 93 94 93 +73 73 72 74 76 76 +89 89 91 90 92 96 +22 22 20 23 29 +36 36 37 38 39 39 41 44 +87 87 90 92 94 96 96 94 +55 55 55 58 59 59 +33 33 33 35 37 41 +76 76 78 81 83 83 86 92 +71 71 75 76 77 79 +60 60 64 66 63 +8 8 11 15 18 20 21 21 +20 20 24 26 28 29 32 36 +23 23 27 30 35 +28 28 33 36 38 41 43 +45 45 46 48 50 55 53 +3 3 4 5 10 10 +72 72 74 75 78 83 85 89 +44 44 50 52 58 +1 5 7 10 12 +83 87 89 92 94 96 93 +74 78 81 84 86 87 87 +73 77 78 80 82 85 88 92 +47 51 52 55 57 59 64 +7 11 12 9 12 15 17 +50 54 55 52 54 51 +35 39 36 38 41 44 44 +89 93 91 92 94 98 +31 35 32 33 35 36 41 +60 64 64 67 68 +18 22 25 25 23 +48 52 55 55 55 +39 43 43 46 50 +17 21 23 26 29 29 32 37 +33 37 40 44 47 +23 27 31 33 35 34 +64 68 72 73 74 74 +20 24 25 29 32 36 +46 50 53 57 60 62 65 70 +60 64 67 74 77 79 +51 55 56 63 64 65 68 65 +14 18 23 26 27 30 32 32 +40 44 50 53 55 58 59 63 +30 34 36 37 38 44 51 +43 50 53 55 56 58 +63 68 69 70 69 +63 69 70 72 72 +34 40 41 43 46 47 49 53 +40 45 47 49 51 57 +6 13 15 18 15 17 19 +4 10 11 9 10 11 8 +27 34 37 40 42 41 43 43 +76 82 85 83 86 90 +22 27 26 27 34 +47 53 53 55 58 +52 59 59 61 63 65 68 66 +17 23 26 27 30 30 31 31 +16 23 26 29 29 32 36 +52 57 60 60 63 66 73 +23 29 30 34 36 +4 11 13 17 14 +20 25 26 30 32 34 34 +62 69 73 76 77 81 +34 41 44 48 50 55 +47 53 55 61 63 +40 45 48 51 57 60 61 59 +68 75 81 83 86 87 90 90 +68 74 77 82 83 86 90 +49 54 55 61 62 64 65 71 +60 57 56 54 53 50 51 +97 94 93 92 90 88 86 86 +67 64 62 61 57 +74 72 71 68 65 59 +97 94 95 92 91 90 89 +72 70 68 67 66 68 69 +76 73 70 67 66 63 64 64 +30 29 26 25 28 25 22 18 +77 76 74 75 69 +88 85 82 82 80 +73 72 69 67 64 61 61 62 +61 60 58 58 55 55 +47 46 43 43 42 41 37 +16 15 13 12 12 10 3 +26 25 23 19 16 +71 68 66 62 60 59 56 57 +55 52 50 46 45 42 41 41 +96 93 92 88 87 86 82 +87 84 80 77 74 73 68 +42 39 36 33 32 25 23 +93 92 91 88 86 80 79 81 +87 86 85 84 77 77 +84 83 80 79 74 73 70 66 +94 91 90 83 76 +8 9 8 5 2 +15 17 16 15 13 10 13 +75 78 77 75 74 73 73 +50 51 49 47 45 41 +60 63 61 58 51 +8 10 9 10 9 8 5 3 +51 54 52 49 52 50 48 50 +46 49 52 50 48 48 +27 30 28 30 28 26 22 +53 54 56 55 54 51 44 +52 55 52 52 49 46 44 43 +76 79 78 78 80 +59 60 58 57 54 53 53 53 +28 30 29 27 27 23 +22 23 20 20 17 14 9 +53 56 55 53 49 47 45 43 +67 70 66 63 65 +84 87 85 81 78 76 76 +47 48 47 43 42 38 +27 28 25 21 20 15 +75 77 72 70 69 +19 20 18 17 14 9 7 10 +53 55 48 47 44 44 +94 95 89 87 86 85 83 79 +93 95 89 88 86 81 +28 28 27 26 23 +21 21 18 17 16 19 +68 68 66 63 62 60 57 57 +70 70 68 65 61 +21 21 20 19 17 15 13 6 +33 33 31 30 32 31 28 +32 32 29 31 28 25 28 +20 20 18 15 12 9 10 10 +25 25 22 24 22 18 +92 92 95 93 86 +12 12 11 9 6 4 4 3 +45 45 43 40 37 37 40 +4 4 3 3 3 +8 8 7 7 6 2 +14 14 12 10 9 7 7 1 +18 18 16 14 11 9 5 3 +31 31 27 26 23 20 21 +31 31 29 26 22 21 21 +48 48 46 45 43 42 38 34 +93 93 90 88 86 85 81 74 +30 30 27 22 20 +92 92 87 85 88 +77 77 75 74 71 69 62 62 +25 25 23 20 17 16 10 6 +82 82 76 75 74 67 +20 16 14 12 10 8 7 6 +50 46 44 42 39 41 +78 74 71 68 68 +54 50 47 45 42 41 37 +99 95 92 91 89 82 +74 70 71 70 68 65 +55 51 50 52 49 52 +72 68 66 67 65 65 +33 29 30 27 24 22 21 17 +71 67 64 67 61 +51 47 44 42 42 39 +63 59 59 56 53 55 +81 77 75 73 73 71 71 +22 18 18 15 13 9 +80 76 76 73 66 +54 50 46 43 40 +87 83 82 78 75 73 71 74 +14 10 9 5 5 +37 33 29 26 25 22 20 16 +94 90 88 86 85 81 76 +45 41 39 32 30 +83 79 78 73 74 +94 90 89 88 83 83 +46 42 39 36 34 27 26 22 +22 18 13 10 5 +44 37 34 31 30 +51 45 44 42 41 44 +30 24 21 20 19 17 15 15 +59 53 50 47 43 +30 25 24 23 18 +52 47 49 46 43 41 40 +36 31 28 29 26 23 20 21 +13 7 10 8 7 4 4 +82 75 74 73 71 68 69 65 +77 70 68 67 68 67 60 +17 12 10 8 7 6 6 3 +83 76 73 72 71 71 72 +84 78 77 76 75 75 75 +54 49 48 47 45 45 41 +90 84 83 81 78 78 72 +63 58 54 51 50 47 45 +39 33 29 27 28 +83 78 74 71 71 +74 68 65 63 59 56 52 +41 35 32 30 26 19 +42 35 34 32 25 23 20 +45 40 39 38 36 35 29 31 +62 55 52 51 49 48 43 43 +61 56 55 49 47 45 41 +58 51 49 47 41 38 32 +57 56 54 54 53 50 53 +62 61 64 61 63 64 68 +43 38 38 35 32 30 24 +76 80 84 87 89 90 92 92 +56 60 62 69 72 +55 49 48 51 50 53 +77 73 72 69 65 +35 32 33 35 37 41 46 +92 89 86 82 81 84 +85 81 83 82 79 77 75 75 +59 56 53 50 47 47 44 41 +46 50 52 54 53 54 54 +76 75 78 81 81 82 82 +85 78 71 70 68 +51 48 49 51 58 59 57 +31 33 36 33 34 38 +51 47 44 40 37 36 31 +61 60 65 66 69 73 +10 10 11 12 13 17 +1 7 8 9 15 21 +70 71 73 74 75 78 79 83 +32 35 33 34 35 38 +35 40 41 38 40 42 49 +51 50 47 45 42 41 34 +52 52 49 50 49 +21 20 18 15 14 12 11 +37 39 42 43 44 46 49 52 +73 76 78 81 82 83 86 88 +17 19 20 22 24 +90 88 86 84 81 80 77 +76 75 74 71 68 66 63 62 +42 41 39 38 37 36 33 30 +96 93 91 90 87 +18 20 23 24 25 28 +46 49 51 52 55 +48 45 42 41 40 39 +71 69 66 64 61 +25 22 19 18 17 +43 46 49 52 55 58 60 +48 46 43 42 40 39 38 35 +68 69 72 73 74 +88 89 90 93 95 +68 71 72 73 76 78 80 82 +87 89 91 93 94 95 +93 92 91 90 88 86 83 80 +43 41 39 37 34 31 +98 95 94 92 89 86 +92 91 90 89 86 84 83 +84 82 81 79 76 +40 39 38 35 32 31 29 +79 77 75 72 70 69 +33 32 31 29 26 24 22 19 +76 73 72 71 68 67 +79 81 82 83 84 87 +70 68 65 64 63 60 +58 55 52 51 49 46 +17 18 21 22 23 +73 74 75 76 79 +97 96 93 90 89 86 83 81 +20 21 24 25 26 27 +51 54 56 59 62 65 +66 69 71 72 73 +24 22 21 18 16 +52 51 50 48 45 43 42 41 +64 61 59 56 54 +45 43 41 40 37 +92 89 87 85 82 81 78 75 +34 36 39 41 44 46 48 49 +65 66 69 71 74 76 +84 85 88 91 93 96 +43 42 41 40 39 +57 58 60 63 66 68 69 +35 36 38 41 42 43 45 46 +54 57 58 60 63 +76 79 82 85 86 89 90 +53 54 56 57 60 +89 86 83 82 79 +97 94 91 90 88 85 84 81 +64 65 66 68 69 70 +26 25 22 19 16 14 12 +49 46 44 43 42 40 +25 23 22 19 17 +95 94 91 88 87 86 83 82 +15 18 20 22 24 25 26 +13 11 8 5 4 3 +14 12 11 8 7 4 3 +40 38 36 35 33 30 27 +30 28 25 22 21 18 17 +22 23 25 26 29 31 33 34 +96 93 91 88 87 84 +89 86 84 81 79 77 +61 59 57 54 53 50 48 +84 83 82 81 78 75 +58 56 54 51 49 48 46 45 +87 84 83 82 81 80 79 78 +27 26 24 23 21 18 +13 15 17 20 21 24 25 28 +29 30 33 34 37 40 +65 64 62 61 60 +46 45 43 42 39 37 +62 64 66 69 72 74 +3 5 8 10 13 +74 77 80 81 83 84 87 +82 83 86 87 90 92 94 +80 78 75 72 70 69 67 +17 14 13 11 8 6 +39 38 37 35 34 31 30 27 +65 68 69 71 72 +27 24 23 22 20 17 16 +8 9 10 13 15 18 +89 87 86 84 83 +79 76 75 74 71 69 66 63 +20 18 15 13 12 11 10 9 +11 12 14 15 17 20 22 +99 98 96 93 90 +29 30 32 33 35 37 +71 73 76 79 82 83 84 +63 62 60 57 56 +84 82 79 77 74 73 70 +61 62 64 67 68 71 74 +36 33 31 29 26 +78 75 73 72 70 +63 61 58 56 55 52 49 48 +26 27 28 30 32 35 +56 54 53 51 49 +63 61 59 56 55 +75 76 78 79 82 84 86 89 +56 54 53 50 47 46 44 +27 26 23 22 21 20 17 15 +79 81 84 86 89 92 +88 85 82 79 78 77 76 74 +92 89 87 84 83 +98 95 93 90 89 88 +19 16 14 11 8 5 +67 69 70 73 76 +13 16 17 20 21 23 26 27 +94 93 92 91 90 +40 38 36 34 32 +6 7 9 11 13 15 16 +52 53 54 56 57 58 60 62 +46 45 43 41 40 37 36 +66 64 61 59 58 +15 18 19 21 23 25 26 28 +57 58 61 62 64 65 68 71 +79 80 83 85 87 89 90 +55 56 59 60 61 63 65 +40 38 37 34 31 29 28 26 +6 9 12 14 15 17 20 +23 22 19 17 15 +82 83 84 85 86 88 90 +48 46 44 41 38 36 34 +55 56 58 60 62 65 +82 84 87 88 91 93 95 +5 7 8 9 10 11 13 15 +43 41 39 37 36 35 +17 19 20 21 24 +42 45 48 50 53 54 55 +57 56 55 53 50 47 +46 45 44 43 42 +18 15 13 12 10 9 +28 26 25 23 22 20 19 18 +17 14 13 12 11 8 7 6 +91 94 96 97 99 +57 54 53 50 48 46 44 +54 52 49 48 46 +22 20 19 18 16 15 13 11 +49 48 45 42 41 +59 61 64 67 70 73 75 77 +27 25 23 20 18 +26 27 28 30 31 34 +37 38 40 42 44 47 48 +91 88 86 85 84 82 80 +35 34 33 30 27 +5 8 11 12 13 14 16 19 +35 33 32 31 30 29 +37 36 35 34 31 29 26 +16 14 13 10 8 +17 19 21 22 23 24 25 +54 56 57 58 60 62 63 66 +8 10 12 14 17 +16 14 11 8 5 +48 45 42 39 37 36 33 31 +8 11 14 17 20 22 25 26 +91 89 88 87 85 82 +26 24 22 21 20 17 16 +44 41 38 36 33 30 27 24 +6 8 11 14 16 19 +75 77 78 81 82 85 88 91 +63 65 67 68 69 72 73 +95 93 92 91 88 +70 68 66 65 64 63 61 60 +83 84 85 88 91 94 +57 56 53 50 47 44 +37 40 43 45 47 48 49 +81 82 83 85 87 90 +73 71 69 67 66 64 63 62 +78 81 84 85 86 87 +89 86 85 82 80 79 +58 59 61 62 63 66 67 70 +14 13 12 10 8 +99 97 96 94 93 91 90 87 +62 60 59 58 56 55 +79 80 83 85 86 88 91 93 +73 72 70 67 66 65 64 +11 10 9 8 7 +25 28 30 32 33 +56 58 61 63 66 68 69 +56 54 51 48 46 44 42 40 +73 76 79 80 82 83 +79 81 84 87 90 +27 28 31 34 36 39 +54 56 59 62 65 68 71 72 +37 40 43 45 48 +70 73 75 77 78 80 83 +84 85 88 90 91 92 +18 15 13 10 7 5 4 2 +92 90 88 85 83 +43 41 38 36 34 31 29 28 +32 29 27 25 22 19 +24 25 26 28 31 34 +3 6 9 12 13 16 19 20 +47 50 53 55 56 58 59 +36 38 40 41 44 47 +72 74 76 78 79 80 83 +13 16 19 21 23 24 26 +54 55 57 58 59 62 63 64 +29 32 33 35 38 41 44 +82 80 79 76 75 +60 61 64 67 70 +38 35 33 31 29 28 25 23 +87 90 93 94 95 97 +56 58 60 63 66 +49 51 54 57 59 62 65 +56 54 51 50 48 45 +74 73 72 69 67 65 62 61 +39 41 44 46 49 52 +38 35 32 29 26 +39 37 34 32 31 29 26 24 +37 35 33 30 29 +17 20 22 24 25 +13 14 16 18 20 23 26 +72 73 74 75 78 +95 94 91 89 87 84 82 +60 62 65 66 68 +58 60 62 64 65 +93 91 90 88 87 86 83 80 +38 41 44 46 48 50 51 54 +57 56 53 51 48 46 45 +24 26 27 28 31 34 +94 92 91 88 85 82 79 78 +96 93 90 88 86 85 84 81 +17 19 22 25 26 29 32 +69 68 66 63 62 59 57 +15 16 17 18 20 22 25 +41 44 45 48 51 53 56 +37 40 42 44 47 50 52 53 +49 48 46 43 41 +6 9 12 13 14 16 17 18 +51 53 55 58 59 60 63 66 +58 61 62 63 66 68 69 71 +76 75 74 71 68 66 +1 4 6 7 8 9 +48 51 52 53 54 57 +35 32 29 28 25 23 21 +16 15 12 11 9 7 4 +39 42 44 46 48 +51 52 55 56 58 60 62 65 +75 74 71 69 66 +73 71 68 65 62 61 59 57 +47 46 45 43 41 38 37 +69 72 75 76 79 80 +27 29 30 32 35 37 +96 93 91 88 85 +62 60 58 57 55 +54 55 56 58 60 61 62 +93 92 91 90 87 86 84 +64 65 68 70 72 75 +21 23 26 29 31 34 +23 20 18 17 16 +69 68 65 63 60 57 55 +65 67 68 70 73 74 +20 21 22 24 27 30 32 +55 57 60 61 63 65 66 +89 91 92 94 97 98 +80 82 83 84 87 90 93 96 +88 89 90 92 95 +57 59 61 62 64 66 67 +42 41 38 36 33 32 29 +77 76 75 74 72 70 68 67 +24 21 18 17 15 +91 90 88 87 85 +6 7 9 10 11 13 15 16 +97 94 91 88 87 86 +32 31 29 28 27 +21 20 19 16 13 10 9 +41 44 47 50 52 53 56 +65 63 61 58 55 53 50 48 +60 57 55 52 49 47 45 44 +91 90 87 86 85 84 82 +54 55 58 61 62 63 66 69 +50 51 52 55 56 59 62 +46 49 51 52 55 57 +48 46 45 42 39 +56 54 51 49 47 46 44 41 +70 68 65 64 61 58 56 54 +50 51 54 57 59 +20 21 22 24 25 +53 55 58 61 64 67 68 +5 7 9 11 13 +78 77 74 71 70 +15 17 20 23 25 26 29 31 +90 88 86 83 81 +36 35 32 31 28 +10 9 7 5 3 2 +43 41 38 36 33 +4 6 7 10 13 15 +62 60 58 56 53 51 50 +20 17 15 12 9 7 4 +43 46 47 50 52 +19 17 15 12 10 9 8 +50 47 44 42 39 38 37 +60 59 56 53 52 49 48 +45 43 41 39 36 33 30 +84 82 81 78 77 75 +57 59 62 63 65 67 70 +43 46 48 51 53 55 +73 72 71 68 67 64 61 58 +23 26 29 30 33 36 37 +52 49 47 44 43 41 +60 57 55 53 52 +50 52 53 56 58 60 +75 74 73 72 69 +77 75 72 69 66 64 63 +11 13 16 19 22 25 +67 64 61 59 58 56 55 53 +78 77 74 73 71 69 67 64 +70 67 65 63 62 59 +17 16 13 11 9 6 4 1 +5 7 8 9 11 14 15 +62 61 60 59 56 55 +15 12 10 9 7 +22 24 26 27 30 33 35 +82 84 86 87 89 +36 37 40 43 44 45 48 +34 33 32 30 29 27 26 25 +29 30 33 34 35 38 40 +84 86 88 89 91 92 94 96 +67 64 63 60 57 56 53 +62 64 66 69 70 71 +25 26 29 31 33 34 +40 37 36 33 30 29 26 +68 66 65 63 62 59 57 55 +53 55 57 59 60 +42 45 47 48 51 53 55 +65 66 67 68 69 +36 34 31 29 28 25 24 +75 78 81 83 84 85 +63 60 59 57 54 53 50 49 +13 10 9 7 5 4 2 +35 38 40 41 43 46 48 +19 21 22 25 28 29 32 +67 65 63 62 60 +45 48 51 52 54 +59 61 63 64 65 68 69 +9 10 11 12 14 16 19 20 +85 86 87 88 90 92 95 98 +10 9 7 5 4 +9 7 5 2 1 +1 2 3 6 9 12 13 16 +4 7 8 11 13 15 17 20 +74 76 77 80 82 85 87 90 +15 17 18 21 22 24 +45 48 50 51 54 57 +90 92 94 97 98 +49 46 43 42 41 38 37 34 +21 18 16 13 12 10 7 6 +9 11 14 16 17 19 20 22 +40 39 36 33 31 30 29 +21 22 23 24 25 +81 79 76 74 73 70 69 67 +16 14 13 12 11 10 9 +76 79 80 81 84 85 88 +90 88 87 85 84 83 80 +99 96 94 92 90 87 84 +21 24 25 27 30 +67 69 71 74 77 79 +54 56 57 58 59 61 62 64 +60 63 66 67 70 +77 79 81 83 84 86 88 +65 62 59 56 55 53 52 51 +57 58 59 61 62 65 67 +64 62 60 59 56 55 +12 14 16 17 19 20 +64 66 68 69 71 73 +12 11 10 9 8 7 6 +68 65 64 63 61 +24 21 20 17 16 13 10 7 +54 53 51 50 48 +99 96 93 91 90 87 84 +56 57 60 63 66 69 71 +78 77 76 73 71 +58 56 53 51 48 47 +12 13 16 17 20 22 +49 52 54 57 60 +72 74 76 78 79 81 +29 28 25 23 21 19 +29 28 26 25 24 23 20 +62 65 68 70 71 74 75 78 +63 61 59 57 54 52 +22 23 26 29 31 33 34 37 +41 44 45 48 49 50 52 +26 24 23 21 18 +18 21 22 24 27 30 33 36 +8 11 13 15 16 19 +31 34 35 38 40 42 44 45 +37 34 33 31 29 27 +81 79 76 73 71 69 68 +70 72 73 74 77 80 +88 89 92 94 96 +13 15 18 19 21 22 25 26 +63 64 65 67 70 72 +45 42 39 37 35 33 31 30 +42 45 47 49 51 52 +24 25 26 29 31 34 +55 52 49 47 46 44 43 40 +87 86 84 82 81 +33 31 29 26 23 21 +45 42 39 38 37 +79 77 75 74 71 70 68 +41 42 43 45 48 +59 61 64 66 68 69 72 73 +78 76 74 71 69 68 +76 75 72 70 67 66 +81 84 86 88 91 94 95 +11 10 7 5 4 2 +84 82 79 78 77 75 72 71 +26 25 22 20 17 15 +28 29 31 32 35 36 +29 26 23 21 19 18 16 +17 18 20 23 26 28 30 31 +12 10 8 5 2 1 +80 79 78 76 73 71 70 +61 64 65 66 69 71 73 +84 86 89 92 94 95 97 99 +76 77 78 80 81 83 +76 73 71 68 66 +81 83 84 85 87 +59 60 62 64 66 67 70 73 +29 31 34 37 38 39 +71 73 74 77 79 81 82 +13 16 19 20 23 24 25 28 +15 14 12 10 7 6 5 3 +41 43 45 47 50 53 55 56 +13 15 16 19 22 +73 76 77 79 82 84 87 +31 32 35 36 38 40 +31 28 26 24 23 21 +48 46 43 42 41 38 35 32 +27 26 24 23 22 20 17 +58 55 53 52 50 49 48 47 +2 5 6 9 12 15 18 +37 38 40 41 44 45 48 50 +53 50 49 46 45 +15 14 11 9 8 7 6 4 +9 8 7 6 4 2 +32 33 34 36 39 40 +85 82 79 78 76 73 70 67 +52 55 56 58 60 61 +59 56 55 52 51 +88 89 90 92 94 +19 18 17 14 13 +42 40 37 35 32 +34 35 38 39 42 44 45 +47 49 51 54 56 58 60 62 +38 37 35 33 32 30 +48 45 42 40 37 36 35 33 +14 15 18 21 23 26 +76 75 72 69 67 65 62 59 +21 24 26 28 31 32 +50 53 56 57 58 61 +29 28 26 25 22 19 16 15 +77 79 81 84 86 87 +20 18 17 15 13 10 9 6 +64 65 67 68 70 +20 19 17 16 14 +78 80 81 84 86 +87 88 90 92 93 +32 34 37 39 41 43 45 48 +95 92 90 87 86 +76 74 72 71 68 +77 75 74 71 69 68 +67 69 72 73 76 79 80 82 +92 90 88 85 84 83 81 78 +40 37 35 33 30 +59 58 56 53 51 +45 43 41 39 38 +61 64 67 68 70 +30 28 25 24 21 19 18 17 +76 78 80 83 86 +85 88 89 90 91 92 +43 42 40 37 35 33 31 29 +69 71 74 75 77 80 +53 56 59 61 63 65 67 70 +48 45 43 41 38 37 34 diff --git a/2/main.go b/2/main.go new file mode 100644 index 0000000..4b28c6b --- /dev/null +++ b/2/main.go @@ -0,0 +1,115 @@ +package main + +import ( + "bufio" + "fmt" + "math" + "os" +// "slices" + "strconv" + "strings" +) + +func rmIndex(s []int, i int) []int { + result := make([]int, 0) + result = append(result, s[:i]...) + result = append(result, s[i+1:]...) + return result +} + +func isSorted(s []int) bool { + n := len(s) + asc := true + desc := true + for i := 1; i < n; i++ { + if s[i-1] < s[i] { + desc = false + } + if s[i-1] > s[i] { + asc = false + } + } + if asc || desc { + return true + } else { + return false + } +} + +func isSafe(r []int) bool { + if isSorted(r) { + for i := range r { + if i < len(r)-1 { + if math.Abs(float64(r[i]-r[i+1])) < 1 || math.Abs(float64(r[i]-r[i+1])) > 3 { + return false + } + } + } + return true + } else { + return false + } +} + +func main() { + file, err := os.Open("input") + if err != nil { + panic(err) + } + defer file.Close() + scanner := bufio.NewScanner(file) + reports := [][]int{} + for scanner.Scan() { + line := scanner.Text() + parts := strings.Fields(line) + levels := []int{} + for i := range parts { + level,_ := strconv.Atoi(parts[i]) + levels = append(levels, level) + } + reports = append(reports, levels) + } + safeCount := 0 + dampSafeCount := 0 + for i := range reports { + if isSafe(reports[i]) { + safeCount++ + } else { + for j := range reports[i] { + dampenedReport := rmIndex(reports[i], j) + if isSafe(dampenedReport) { + dampSafeCount++ + break + } + } + } + } + fmt.Println("Safe Reports: ", safeCount) + fmt.Println("Dampened Safe Reports: ", dampSafeCount) + fmt.Println("Total Safe Reports: ", safeCount+dampSafeCount) +// sorted := 0 +// unsorted := 0 +// sortedUnsafe := 0 +// for i := range reports { +// if ! isSorted(reports[i]) { +// unsorted++ +// continue +// } else { +// sorted++ +// for j := range reports[i] { +// if j < len(reports[i])-1 { +// if math.Abs(float64(reports[i][j]-reports[i][j+1])) < 1 || math.Abs(float64(reports[i][j]-reports[i][j+1])) > 3 { +// fmt.Println(reports[i]) +// sortedUnsafe++ +// break +// } +// } +// } +// } +// } +// fmt.Println(len(reports)) +// fmt.Println("sorted lines: ", sorted) +// fmt.Println("unsorted lines: ", unsorted) +// fmt.Println("sortedUnsafe lines: ", sortedUnsafe) +// fmt.Println("safeCount math : ", len(reports) - unsorted - sortedUnsafe) +} diff --git a/2/main.go.BAK b/2/main.go.BAK new file mode 100644 index 0000000..2fe06d5 --- /dev/null +++ b/2/main.go.BAK @@ -0,0 +1,50 @@ +package main + +import ( + "bufio" + "fmt" + "math" + "os" + "slices" + "strconv" + "strings" +) + + +func main() { + filePath := "input" + file, err := os.Open(filePath) + if err != nil { + fmt.Printf("Error opening file: %v\n", err) + return + } + defer file.Close() + scanner := bufio.NewScanner(file) + report := [][]int{} + i := 0 + safeCount := 0 + safe := true + for scanner.Scan() { + safe = true + line := scanner.Text() + parts := strings.Fields(line) + for j := range parts { + level, _ := strconv.Atoi(parts[j]) + report[i] = append(report[i], level) + } + if slices.IsSorted(report[i]) { + for j := range report[i] { + if j < len(report[i]) { + if 1 >= math.Abs(float64(report[i][j]-report[i][j+1])) && math.Abs(float64(report[i][j]-report[i][j+1])) > 3 { + safe = false + } + } + } + } else { + safe = false + } + if safe { + safeCount = safeCount + 1 + } + } +} diff --git a/3/input b/3/input new file mode 100644 index 0000000..325e4f1 --- /dev/null +++ b/3/input @@ -0,0 +1,6 @@ +select(){,(where()+-mul(514,727);:]]what():^*from(764,547) mul(550,305)$^^%>select(587,376)mul(94,564)select()when(633,175)[[mul(302,490)$-}&**+mul(335,535)@select()>select()mul(241,166)when(800,629)mul(758,530)',^ &!~%/#mul(938,70)?&!from();mul(412,287)}/mul(230,620)(~select()what()select()'@mul(410,577)$mul(720,516)-mul(373,78)when()!^:@{)mul(793,973)who()when()mul(85,246)>what()}[#[@!^/mul(396,22)@when()-;:':>}mul(515,670)<[mul(38,415)?~select()why()^when()*#+($do()']select()>:^/when()^mul(440,923)@mul(48,816)mul(370,665)@*>who()^,when()mul(155,426) mul(132,914)^%select()&when()/from()(+}mul(296,176)mul(361,479)%{;!,'who()where():mul(506,495)#who()&%< ^mul(481,87))&!;mul(541,563)%don't(){}'-),from()$mul(495,427)^when()mul(640,499)select()}:] )%+()mul(967,918)?when()select()<{/who()what()mul(505,225)(mul(90,482)>!from()when()#do()mul(620,841):who()!mul(719,850)where()-)mul(931,185)?;select()]@,why()%]mul(39,103)mul(687,103)$%];how(337,314)[}$-when()mul(282,494):;!where(188,779);who()mul(342,554)<^who()(why()where()who(345,491)%mul(407,74)why()&}'%'mul(324,781)mul(90,925):from()mul(828,16)mul(438,549){what()>$why()*what(35,607)mulwho()mul(91,548)>,what()select()]&how()@mul(384,93!select(),where()$mul(835,662)@{don't():#<^/-+mul(489,462)>>where(){why()where()---when()mul(53,461)/~?mul(273,777)mul(119,879)+@'when()-mul(585,949)?['when()from(946,632)mul(22,105)>-:how())from();mul(439,876)?mulwho()@who()when()<@{-mul(111,687)$&mul(432,628)%*,{when()mul(287,508)'-select()}don't()/#~-@from()[:#mul(111,655)%: &;mul(518,391)don't()&mul(197,749)@who()*mul(935,21)+> who()why()mul(299,881)who()]@+%/from()[?do();{+[why()$select()#mul(264,731)]'select()what();+who()mul(713,161)where(931,649))mul(360,529)}where()!;]how()how()mul(619,728)how()<%}+}mul(420,324);{!from();mul;)>mul(144,181)who()}?~where():who()${ mul(261,691),why() /+mul(189,450) ++when()%^]]/when()~@mul(533,22)mul(231,586)mul(107,724)!@mul(504who()@}when(291,528)mul(691,859)/}#mul(726,544)from()[>>what()^?^from(762,977)mul(67,280)(who()^mul(586,844)}how()how()+where(),mul(886,320)#from(691,802)mul(376,296)'why()[@}how()#why(530,714)?>mul(791,363)?what()$${@why()>+mul(133,626))why()&}what(){%(mul(474,459)what()where()(^mul(311,372)mul(243,118)where()@mul(302,760):{who()-'{+mul(145,293)}why();how());$]mul(652,761%? ;]:@mul(259,51)@>'mul(474,995){don't():}*mul(309,511)?select();(mul(553,164)]how(){when()mul(556,560/~when(464,361),^<#[/&do()when()&who()*mul(22,727)from()):who()when()}mul(367,34/when()where()mul(226,816)mul(421,33'(,(#, ?who()do()%;+-:-mul(99,868)#{[why()who(504,690)?mul(119,337)+,mul(250,122))%#%mul(708,536)>select();from()mul(480,332)}&what(423,278)mul(891,459)}mul(852,128)mul(418,844)~select()[{when()(mul(69,312);!)where(419,852)<:*@-don't()what()!$-;{mul(91,636)-when()select()~from()(&mul(894,19)how()]@,[do()#,what()'@mul(116,57)why()from(),@-?mul(651,74)]what(704,54)how()<$mul(169,494) )from()$~-mul(44,491)$mul(29,368)'why()+-+mul(961,385)>who()select(137,499)mul(586,30)$%when(765,538)?why()(mul(378,568)}select()[:[%?$from()don't();mul(375,803)#']/@/^}*where(184,703)mul(21,508)>;+,mul(921,355)};mul(594,553@%])mul(793,439)]from(599,582)mul(982,538)}//^;how()~)'from()don't()~&who()<+#+mul(386,116)>/~who()mul(373,106)+#!do()(&-select(),+~;~mul(59,223)mul(233,653)mul(547,404)?where()~%don't()}}select() from()@] from()mul(150,196) ]}(>mul(514,824)where()+mul(332,418) +/>'^')what()mul(590,783)?$when()mul(55,422)from()~]select(198,113)from():}don't()mul(436,985)^:select()from()@//don't()/mul(675,976)$from(),!&]#*&don't()*[#how()~/*mul(172,297)<-{,select()};mul(866,305)$mul(938,509)+>mul(100,651)%where()how(223,719)/){!!;(mul(163,66)+''when()mul(217,127)^},(why()how()what()]who()mul(39,897)>/(mul(966,889)-]'}{,+,!$$why()from()mul(338,824)where()/&;mul(230,684)@'where(354,854)- )%when()mul(288,730){from()){}where()mul(124^}'(&don't()mul(688,399)from()++[how()why()mul(136,861who()!?#select()!]where()!do()&how()where()when()mul(968,380)'-$select()why()&:;mul(906>select()^~who())>:*mul(433,704)&why()#who()%@;what()>;mul(848,947) from(497,742)?select()~mul(590,692)why()* ,(<<)where()*mul(102,487)when()]where()>*when()!mul(406,710)mul(962,153)who()who()what()+&from()mul(419,854)$/mul(201,493)from()-)select()'^:[!;mul(779,883)why()why()}?why()(don't()what()]%~{mul(966,261)how()[when())^when()]mul(513,694)/*:when()select()who()'mul$?++~?:$mul(657,498)$ &why()mul(310,762)^+what()~,what()why()why()#}mul(320,448)%mul(886,159)(]what()?'@why():[mul(415@who()$what(){select()who())mul(912,558)select()where()%'why():mul(784,109)-&:-]mul(354,211):*#~mul(637,881),$from()mul(947,709)what():,'mul(284,267)&from()mul(259,860)/^],&(when()when()^mul@select() how()!mul(462,151)~,)where()mul(7,166)**what()<~mul(137,598)^]~>mul(561,283)*@ ;select()mul(262,658)who()<,-what()/-why()mul'$;;-]#why()>mul(510,757)$what()who()>mul(139,401)where()^#&/*mul(332,919)>?how()]when()/mul(218,127)[+mul(504,583)why()$>^mul(649,222)@?don't()from()&what())&'^mul(878,444),,mul(340,684)when()'why()when()?why()mul(852,617)mul(569,36)~(select():>~&/when()@do()why()from()>who()where()mul(93,146)(;why(863,117)mul(681,428);#mul)$from()how())?{] mul(793,537)where() @~?++?when()why()mul(163,958)select()}who()mul(540,501)$when()#who()/mul(331,537)[>~why()what(395,317)[)[mul(928,496):mul(127,943)$>mul(18,669)?&mul(443,860)when()!;;&select()*mul(624,669)[}:,*>]mul(941,338)?%where()((how();<~when()mul(483,529){)/'+'~$mul(254,159)when():when()'*!??%mul(731,125)when(670,595)]^^from()'?]mul(912,606) ):[^do()#{;?-mul(851,526)>'!'mul(689,174) >?{)how()/;what()mul(919,455)]mul(320,219){#+) {mul(267,831)((from()&:[-from()mul(84,102)mul(291,186)/+}*mulhow()?who()-*mul(973,390) + (~{$where()why(250,398)/how()&#!/usr/bin/perlwhy()-{{#^%>mul(772,422) 'how()}&)mul(184,89)$what()mul(376,816)when(),@#mul(949,642)'/+select() [mul(399,146)[~who(){;~ mul(526,131)when()mul(787,620)@~+?from()@-mul(310,482)}:$?what() ,mul(360,720)/why()why()#)^mul(561,462)+@:-{who()mul(403,894)from(),}{(('?!mul(555,514)?-:#&]$-mul(18,725)??mul(901,195)how()mul(814,623)$;~)select()/mul(4,986)#,{-]{!*~mul(833,296)/?mul(496,21why():@/#[what();mul(162,231))>~do()select();+*^?}?mul(38,18)?*who()&why()/who(479,558)from()%,mul(225,613)mul(494,841)'who()%@+{>&~mul(586,498) select()*!/]};-; /what()where()mul(614,161){select()where()+!what()/-mul(927,228)mul(432,16)when()?&+'^mul(539,745)]^when()what()mul(970,413)+<&:don't()$%mul(533,997))-mul(574,681)mul(978,225)&![who()why()(>mul(453,460)why()*+how()~!why()where()*-mul(840,804)>+mul(570,880)/>how()'-~*;+mul(367,248)$@what()mul(303,242)when()?>!!!-what()>%mul(547,184);when(300,185),^mul(196,377)~<{,[@from()when()from()'mul(727,421)>mul(199,873)],select()-+<&where()mul(962,772):what()/[${how()<*where()mul(534,770)select()/how()>*mul(356,156)((%where()}~how()#who()mul(801,644)from()mul#select(458,914)how()where()~}(}what()mul(273,584)who()mul(692,224)(>what()where();%,-mul(779,81)<[~who()!mul(786,30)]':mul(328,225)/when()#])(>:?:don't())*/mul(914,292)why()mul(83,290)[~mul(257,792),;+]*mul(949,612)*{;[-:]$^]mul(813,824)]/mul(5,572)}+don't():)from()*[>+(#who(422,860)mul(243,781)<-mul#<*<#&{?/'mul(579,115)(:mul(861,206)?)<&{>;mul(331,573)mul,^->,~>?who():from()mul(463,386)['{*>],when()?mul(740,88)]<[where()from()-]mul(685,334)+how()}how()^mul(973,106)select()$+mul(867,634)do()@-?mul(535,483)how()$[mul(161,41)]where(),#,mul(129,507)don't()who()what() mul(214,987)[ *^*[&mul(870,285)when()how())(+)+who()^how()how()'why(990,834)<@from(535,913)mul(741,712)why()when()who()@>-*!mul(296,759)$@where()mul(585,923)where()who()/why()]}>mul(163,233) ;;what(771,674)when()mul(553,949)select()when()'mul(545,530) +( !>{!-*}mul(646,888)]-?why()+mul(359,478)why()mul(186,893)]where()what()when() >select()mul(592,52)where()select()from()[select()from():~'/mul(164,308)what():>^)why()how()$&who()mul(377,499)why()((where()@~who(),mul(658,47)#how()+%from()'/select(287,448)]~mul(759,688)!@?]{(~mul(196,596)who()+mul(759,422)/@[#>where()mul)-how()>$&:$@},mul(861,458))mul(126,262)@;what(){};:don't()#mul(695,332)>what(),why()#++%select(){mul(471,679)^select()/mul(387,568)when()%(]*how()>do()' ^]?mul(777,56)>where()(why()select(14,295)mul(874,481)!from(){;~how()@mul(22,505))~who())when():&mul(395,566)-(~what(231,98)$$;$mul(326,815)>from() select()^who()#mul(189,720)what(),from()don't()>%+/mul(418,532)-;):don't())@:#!when():$[:<['mul(764,131)$:@&[from()%+~ mul(258,284)from(810,941)&how(232,473)mul(338,578);/select():mul(990,919)from()how()>[{!}mul(69,711),when()+do()}/[#who()*mul(907,255)?!}{]*mul(781,224)#select()mul(755,122))-:[',mul(863,596):how() who()%select()select()[what()do()+where()^+mul(722,58)^[,how()?#^ !:mul}&select()~{}mul(885,728)when()?mul(468,630)?where()from()select()>*~:don't()%#}$@-)mul(200,579)why() mul(10,435):)/;@{;mul(298,190)where()why()$ mul(9,631);where(7,826)@-don't():':;[,!@+mul(273,471)mul(325,690)mul(267,174)mul(339,952)}what()>)>@mul(307,862)do()why(335,510)]&>( mul(636,749)(-mul(592,773)!mul(2,50+'#mul(338,514)#;why()where()mul(127,711)@mul(146,911)mul(860,601)%select()mul(806,306)mul(410,847),:[mul(73,481)+don't()>}&)]mul(509,882)*/@~*where()-!mul)$do()where()?mul(308,113)/@?why()where()>%mul(970,425)~[$@'[mul(83,136)+<%who()who()who()^~where()mul(960,152)when()mul(714,401)how()?]from()*!what(313,652)mul(455,389)select()why()<-[)%:(%mul(929,53[-@%~;%]where()why()mul(293,806)from(258,940)[mul(959,603)!@)why()?{{$mul(744,798) '{}&<&?,mul(389,91)#'select()@,who()/$($-@,mul(792,652)how()mul&)!do())-}?~select()>mul(527,656)mul(220,657)who(453,708)mul&when()/when()+ how()how()%%@mul(62,191)'{%,mul(13,233)mul(780,237){from(817,212) when()mul(216,970)@what()}<: - ;mul(954,521)+mul(645,579)mul(695,53)%{},mul(927,488)$/$$what()&what()mul(815,350)](select(){;mul(650,656)&<:what(70,971)* mul(452,286)select()#&)when()+mul(438,390)>what()/mul(353,213) &from()~mul(920,652)~mul(971,287)don't()select()}/mul(4,595)where()-mul(332,353);>+mul(64,192)mul(33,846)}'where()(:mul(13,41)[@!^][(^$mul(728,587)what()>^&what()>who(73,62)why()where()mul(501,624)(%!mul(187,871),;>from()(, mul(563,884)]]/[who()mul(685,629){where()from()@@',who()why();mul(57,598)mul(799,387)why()?mul(963,99)*-!''when()mul(606,12)who()]how(), mul(615,921)/what()from(858,351){how()#who()@mul(379,934)~/{mul(871,792)<[+&mul(206,542)mul(154,161)-when():why()[mul(663,226)>from()from()?#mul(320,293)>select()!@;from()where()<^~mul(865,92)mul(834,118)select()#>mul(36,886) why()[>,,))select()mul(777,447)what()};<>how()from()*mul(942,312)how()]mul(810,261)select()@+>)'){mul(356,987){mul(33,198)[select()from()where()({mul(752,594)$why()who()>,?^where()->mul(478,705)why();select()from()when();]/]from()mul(878,617)@who()-who()[&&mul(554,90)#+:^do(), <{mul(978,459)/##[^ ]how(); mul(470,763)mul(342,6):&mul(192,104)from(220,224)[mul(309,253)$}mul(98,92)[mul(690,632)how()why()!>@mul(880,975)~/what()why()/*[mul(663,3)when()[@! )&,~^mul(965,150)#~},%^(]from()mul(503,640)::where()mul(146,66)&)~[mul(37,741)mul(714,547)/; diff --git a/3/main.go b/3/main.go new file mode 100644 index 0000000..c06007e --- /dev/null +++ b/3/main.go @@ -0,0 +1,63 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "regexp" + "strconv" + // "strings" +) + +func main() { + filePath := "input" + file, err := os.Open(filePath) + if err != nil { + panic(err) + } + result := 0 + defer file.Close() + scanner := bufio.NewScanner(file) + r := regexp.MustCompile(`mul\([0-9]{1,3},[0-9]{1,3}\)|do\(\)|don't\(\)`) + numbers := regexp.MustCompile(`[0-9]{1,3}`) + enabled := true + for scanner.Scan() { + line := scanner.Text() + matches := r.FindAllString(line, -1) + fmt.Println(matches) + for i := range matches { + if matches[i] == "do()" { + fmt.Println("Do") + enabled = true + } else if matches[i] == "don't()" { + fmt.Println("Don't") + enabled = false + } else { + if enabled { + fmt.Println(matches[i], " enabled") + multipliers := numbers.FindAllString(matches[i], -1) + firstNumber, _ := strconv.Atoi(multipliers[0]) + secondNumber, _ := strconv.Atoi(multipliers[1]) + result = result + firstNumber * secondNumber + } else { + fmt.Println(matches[i], " disabled") + } + } +// multipliers := numbers.FindAllString(matches[i], -1) +//// fmt.Println(multipliers) +//// fmt.Printf("%T\n", multipliers) +//// fmt.Println(len(multipliers)) +//// fmt.Println(multipliers[0]) +// firstNumber, _ := strconv.Atoi(multipliers[0]) +// secondNumber, _ := strconv.Atoi(multipliers[1]) +// result = result + firstNumber * secondNumber +//// for j := range multipliers { +//// multipliersSplit := strings.Fields(multipliers[j]) +//// multiplierInt1, _ := strconv.Atoi(multipliersSplit[0]) +//// multiplierInt2, _ := strconv.Atoi(multipliersSplit[1]) +//// result = result + multiplierInt1 * multiplierInt2 +//// } + } + } + fmt.Println(result) +} diff --git a/4/exampleinput b/4/exampleinput new file mode 100644 index 0000000..1f4eda2 --- /dev/null +++ b/4/exampleinput @@ -0,0 +1,10 @@ +MMMSXXMASM +MSAMXMSMSA +AMXSXMAAMM +MSAMASMSMX +XMASAMXAMM +XXAMMXXAMA +SMSMSASXSS +SAXAMASAAA +MAMMMXMMMM +MXMXAXMASX diff --git a/4/input b/4/input new file mode 100644 index 0000000..fa1f556 --- /dev/null +++ b/4/input @@ -0,0 +1,140 @@ +MASAMXSXSSXSASXSMMXSSMXSAMSAMXSXXAMSXSASXXMASAMXMSMMSSXSASMXXAXMAMXMAMXXMASXXSXMSSXAMMSMMMSSSMASAMXSAMAXMSMXMMMXMASAMXSXSSMMMSMSXXMAMMXAMAMX +SAMXSSMMMAAMAMAAXAASAMMXAXMMAMXSMAMMAAAXXMAMXMAXMAAMXMAMASXMASMMSMMSAMMSAMXMASAMAMSSXMAAAAXMASXMASXMAMMMMAMXSMSASAAMSAMAAAASASXMXXMAXMAXSAMX +MAMMXAXAMMMMAMSMMMXMAMSSSMSSMMAXXAMMMMMMMAXSSSSMSMSMSMSMAMAAXMAAMXASAXMSAMMSMMAMXXAMASXSMSMSMSMSAMASAMAAMASXAASAMXSXMASASMMMASAMMMSMSXXMAXXM +SSMMSSSSSMXSAMAMMXSSXMXAAMAAAMMMSMSAMAMAASXXMAAASXXASAAXMASMMXMMMMASMSMSAMAAMXSXMMASAMMMAXAMAMAMASASASMXSASMMMMXSMMMSXMAMMSMXMASAAAXXAAMAMSA +AMAMAAAAAXAMXXASAAXAXXMXMMSXMMAASASXXAMXXMMXMMMMMAMAMSMSXAAXSSSXMAXMXAXMXMSMSAXAAXMMXXMMAMAMAMSSMMMSAXAXMXMXMXMAMMMAMAMSMAMAXSAXMMXXMXMSAAAS +MSAMMSMMSMMMSMXMMASMXMAAXAXASMMXSASASMXSASXMMXSAMMMAXAMSMMSMMAAAXSASMXXMSXMAMASMMMAMSSSMSSXMXMAMXAAMXMMMSMMMSAMXXAMMSMAAMASMMMXSSSSXSAXSMSMM +XXASAMAAXMXASMMMXAAMXASMMASAMAXXMAMXMAAMAMSAMASASXMXSASXXAXAMMMMMXMMMSXMAAMXMAXAASAMMMAAAMAMSMSMXMXSXMAAAMAAMSXMXSMMAXSXSASXAXSAMAAAMMXXAMAM +SSXMASMMSSMASAMXXSXSXXXXSAMXSSMMMXSAMMMMMSXSAMXXMASASMMMMMXSMMAAXAXAAAASXMMXMMSSMSASMSMMMSAMMAMAXSAMXSMSSSMSSXXSAXAXMMAAMMXXSSMAMMMMMXMMASAM +MAMXAMXAXAMXSAMXMMAMMAMMSXXAAAMXAXMAXSXMMAMXMXMASXMASMMMSMAMASXMMASMMSMMAMXXMXAAMXAXAXSMXMASMAMAMMASAXXMXAMXAMAMAMXMSSMSXMSMXAMSMASXMAMMAMAM +MASMMSMMSMSXXAMXMMAMAAAAXXMASMMSSSSSMMAXSAMASAXMXAMMMAASAMXMAMAAXXAMXAXSXMXMXMSSMMMMMMMMASAMMAMSMSAMXSXMMSXMXMMMSMMSASXAAMAMSSMMSXXASAXXSSMM +XAMXXAAAMXMAMMMMXMSSSXSSSMMXMAAXAAAAAMAMSAMXXXSXMAXXMSMSMSSMAMMMMXAXSMMMXMAMSAMXAXXAXAASASAMSXSAAMXSMSAAAMAMXXSAAAXMASMSMSAMXXAMXSSMMSMSXAAX +MSMMSMSAMXMSAMXMXXAAAAXAMXAXSMMXMMMMMMMMSMSMMSMMAMASAMASMAASMMSXMSXMMMAMSMSMSASXMMSXSAXMXSAMAXSMSMAXASXMMSAMMMASMMMMMMMMAXMMXMXMAAMMAXMMMSMM +AAAXAMMASXAXAMMMMMMSMMMAMXMXSMSSMMXXAAXXMAAMXXAMAMAMAMAMMSMMXAMAMMASXMAMAAXASAMXMAMXMMXXASMMXXSAMMSMXMASASASXAMMSAXXMAAMMSSMXXMMMSXMAMXSAMXA +MMSMAMMAAMMMAMAAAAXAAXXAMMMAMXAAAMXSSMSSMSMSMSAMXMASAMMSAMAMMXXXSSMMASXXMMMMMXMAMAXASAMMXMMMXMMAMAMMMSMMASAMXSXAXMXMSMSSMAAXMMXSAMXMASAMASMS +XSMMXMSXMAASAMSSSSSSMMSXXAMAMMXSMMMAAXAMXXXAMSAMASXSASAMXMAMAXSMMAMSMMXASXSSMXSXMMMMSMMMSMMSAMSXMASAMASMAMXMAMMMXXMXAAXAMSSMAAAMXMASASASAMAM +MAMAMMMMXMXAMXAXMMXMAXMMSASMMSMAMXAXSMXSAMMMXXAMXMASXMXSASXMMMAASAMAAXSXMAXAMXSXASXAXXAAAAASAXMXSXXMXASMMSMMMMAXXSAMMXXAMMAMXSXMXSAMXSXMXSMS +SMMXSAAASMXAXMAXMXSMMXAAAMXMAMSAMXSXMAAMASAMSSMMAMAMASXMMMXAAXMXMMMMMMMMMSMAAAMSAAAAMMMSSMMSSMXAMMXSMXMXMAAMXSSSMMAXASXSMSAMXMASAMMSMMMSMMXS +AXXMMMSMXASXMXSMSASAASMMXSAMMMSMSAMXMXMMAMAXAAXSAMXSAMXSASMSMSXSMSMMSMMAAXMSMAMMSAMSSXAMXAXSMMMXXXAMAMMASMXMXAXXAXXMASAMXXXSASAMASAMAAAXAMAM +MMXAMXMMMXSASAASMASMMXAMAMASXASXMASXMAXMSXSMSSMMASAMASAMXSAAAMAMAAAXAAMMSMMASXXXMXXAAMMMMAMXAAMMSMAXXAMAMSMSMMMXMMSMMMXMXMSXMMASAMAXSMMSXMAX +XSMSAAXMAMMAMXSAMXMMSSMMASXMAXMAMXXASASXMAXAMXAMAMASAMXMAMXMAMSMSSSMSSMAXMSASMMXAXMASXAMSMSSSMSAMMSMXXMXSAMXAASXSAMAAAAMAMSAXSAMASMMXAMXMSSS +AXAXMMMMSMMAMMMMMXMAXAXSASMMAMSAMSSMMMSAMAMAMMSMMSAMXMMMMSAMXXXAAAAMAAMXMAMAXAMSMSAAXXXXAAAAXAMXSAMAMXXSAMMSSMMMMASXMSASAXMSMMMSAMXXSAMXMAAX +MMXMXMAAAAMXXAAXXMMSMXMMASASAXMASXAAAXMXMXSAMAAXAAMSAAXAAAXSSMMMMMMMSSMAMXMAMMASAAMXMAXSMMMSMXSXMMSAXSXAMXMAXAXXMXMXMXASXXSAMAAMASMMMAMAMMSM +MAASXSXSXXMMSSMSAXAXMAXXXSXMASMMMAMSMMXAXXXMSSXSXMASMXSMSXMMXAXASXSXMAXXSAMXSXAMMMSSMXMMSAMMMMAAXAMXMXMSXMMMSMMMSMSMXMXMAXXASXMMAMMMSASASMAM +MSMSAMMMMMAXAAMMMMMSSSSSMMAMXMASXAXAAMSMSXXXAMXAMXMXXAAAAMMXMXSAMXAMAXAMAAMAMMMMXAAAMXMASXSAAXSXMXMAMAMAXMAMSAMXAAAAXSAMXMMXMMAMXSAASXSMMMAM +MMXMXMAAAMMASMMSMSXAAAXMAXAMSAMXSMSMSMAMMMXMASMMMMAAMXSMMAAAAMMMMXMAMMAXSASASASAMMSSMMMASMSMSMXXAAMAMAMMMMAXXASMMSMSMSAXAAMMXMXMAAMMSMMMMSAX +MXMXMSSSXSXAAXXXAXMMSMSSSMAMSAMXAXXXXMXSAAXMXMMMASMXSAAAXSSSSSSMSAXAXSAMMASMSASXSXAAASMASAMAXAMXXMSSSSSXSXMSSSMAAMXMASXXMSMAAMMMXXMXXAAAASMS +MASAXXXXASMSMSMMSMXMAAXAASXMXMASMMSMMMXMASXMMXXSAXMAMXMMMXXAAAXASMMSXMASMAMMMAMAXMXSMMMXMAMSMSMMSAMAAAAAAASAXASMMMAXXMAXXAMXAMASXSMXSSMSMXAA +XAMMMMSMXMAXAMXAAMAXMXMSMMXXXXAXAASAAAAAMMMSASMMMXSASAMSMSMMMMMAMMAMASXMMSSXMAMAMSXMAMSASAMAAMAMMAMMMMMMMSMASMMXMSASXMMMSASXSSMSAASXXMMMMMSM +MSXSAAAXXMAMXXMXSSSSXSAMXSAMSMXSMMMSMSSSMMAMASMAXASMSAAXAXAAAXMAMMASXMAXAXMMSXSXAMASAMSAXMXMXMAXMAMXXSXSXAAAMXMAMMXSAAAAXAMXMAXMMMMXMASAAAMM +MMASMSMSXSASMAAXXAMAMMSMAMAXAAMXMAXAMXAMXMAMXMMXMMSXSMMMSMSSSXSASMXSASMMXSAASAMXXMAMAMMMMSASXXXSMSAMSAASMMMMSXMSMSSSMMMSSSMSSSMMAXAAAASXSMSM +XMAMXAAXXXAMMAMXMAMXMAAMSSSMMSASXMSAXSAMXSSSSMAMSASAXXXAMAXMAXSAXMASXAXAASMMSAMXSMASMMAAMSASAASAMAAMXMXMSXAAXXXAASASMSXXAAAXAXASASMMXXXMMASM +XMXMXMSMSMMMAMXASAMMMSSMMAMMAMMMAXSMMXAMXAXAAMAMSAMXMMMMSSMAXMMSMSMSSMXMMXMASAMAASAMASMSMMMMXXMASMXMMXSMMMMSSSMSSMAMXXMMXMMMMMXSAMXSMSSSMAMA +MXMMMXAAAAXSMMSASXSAMAXXMAMMAMAMMMSXXXASMSMSMMMXMSMAXAAXMXAXMMAXMAXMAMMSMMMASAMXMMSSMMXXAAXAMXSAMXSXMAXAAAXAAMAMXMXMMMXXAMXXXXAMXMXXAAAAMMMS +MXAAASMSMSMMAAMXMAMMSMMSMMSSSMMASXMAXSXMXXAXAASAMASXSXSSSSMSXMAXMXAXMMAAASMXSXSSMAXSXMASMMMAXMXMAXSAMSSMMSAMMMAMXAMAXAAXSSMSSSXMAXMMMMMMMAAX +SSSMXSAAAXMXMMAAMSMMAAMXSXAXAASAMAMSMMAMXMMMSMSASXSMMXAMXSXMAMASMSSSSSSSSMMXMMMAMSMMXMASAXSXXSAXMMSAMXAXAXMXAMMMXMAAMMSSXAAAAAMASAASMSXSXMSS +AXAXAMMMMMMXSMSXAAASMSXAXMMMSMMASXMMAMXSAMXAXXXAMMSAXSMSAXMAMMAMXAAAAMAMXAMXSASAMXSMAMASXMMSMSASMAXMMSXMMSXSMMSAMXAXMAXMXMMMSMAAXSXMASAAXSAM +MSAMXSASAAXMXAAMSSXMAMMMMSAMXAAXAMASAMASXSMMSSMAMAMSMAAMASMSSMXSMMMMMMSMXXMASASXMAMMAMAMAXAAXXMMMSSMXMASXAAXXAAAXXMSSMMSMSAMAXMAXMMMAMMMMMAS +XAAMXXASMXSMMMMMAXAMASXMASMMSSMMMMMMXMMSAMMMAMSMMAXASMXMSMAXAAXAXSAXMXXAMSMXSAMMMAMXAMXSMMXSSMMAXMAMSAMASMXMMMXMMXXAAAAAXXAMXSSMAMSMMSXXASAM +MMAMAMMMXMAXXMSMXSXMASAMASXMAAXMMASMMMXMXMAMAXAXMMSMMXAMXSMSAMXMXSASXAMXMAAMMMMASASXSSXAXAMAAMXAMMAMMASAMXMSASASXXMSSMMSMMAMXXMMSXMAXMASMASM +ASAMXSAAASMMSAAMXSXMMSAMAXAMSXMMSASASAAXAMXSMSXSXMAAMSAXAAXMAMAMAMMMMMMAXXMXAMXAMXSXMAXMXSAXMXMSSSSMXXMAMMXMASAXAXMAMXXXXSSSMAMSMASXMMMXXXXS +MSASASMSMMMAMSAMAMASAMXASMSMMAAAMXSXMASMSMAMXXAXMSSSMXMMSSMSASXMASXXMASMSSSMASMMSXSASXMSAMSMXSXAAAXSASMMMSASMMMMAMMASXMMAMAAMAMAMAMMAASXMMMS +XSAMAMXXMSMXMXXMASXMASXMMAAASXMMSMMMMMMAAMASAMMMMXMMMXMAMAASAXMSMSMMXMXAAAMSMXMAAAXAMAXMMMAXASMMMMMAMXAAMMAMMAAXAASXMMAAMMSMMMSMSSMSSMMAAAAM +XMXMAMXMASAMXXXMAXAMXSXMMSMMMMXXAMXAAAMXMASMXASAMAMMMAMXSMMMSMAMXMASAMMMMMMXSAAMMSMSMMMSASXMXMXAMXSAXSMMSMMMMSMSSXXMASMMXXAMXAAMAAAMAMSSMMSS +XMAMAMSMMMMAXXSMSSXMAMAXAAMXXASXSSSSMXMAMMMASMXASASASXSXXAXAMMXMAXSMXSASMXSAMXXXAMAAAXASASMMAMSMSMSXXAXAXAAMMAAAMAMSXMAXSMMMMSSXSMMMAAXMAXAA +XSSSXSAMMAXMMXMAXAXMASMMSMSXMASAMXAMASMXMAMAMMSAMASMSAMASMMMSMSSSSMXMXASAAMASMSSMMSMXMMSXMAMXMASAAXMXMXSSMMSSMMMSSMMMXMASASAMXXAASMSMMSSMMSS +AAAXMAMASXSXXMMAMXMMMMAXXASMAXMXMAXSXSASMMMSAMXXMXMASXMMAMXAAXMAMAMMMMMMMXSAMXMAAXXSAMMMASXMXSXSMSMAAMAXAMAAMAXMAXMAMMXASAMAMAMXMMMSAAAXXAMX +ASMXXXAAAMMXSASASXMXSSMMMXMASMSXMSAXAMAMMMAXMMMXMAMXMSXMMAMMMSMSMXMAMAMAMXSAMMSSMMXMXSASAMASAMXMAMMSSMASMMSSXSMMAXSXSAMXXASAMXSSMMAMMMXSMSSM +XMXSMMMMSAAASMMMSMAAMAXXMSSMMAXXAMMMSMMMSMMMSAMXSASAAMXSAMXSMSAXMSSSMXXMMASAMMAAMMSMAAMMXSAMMSAMAMMAXMASXAMMMMXXAAAAAXMSSMSASAXAAMSSMSXAXAAA +MMAMAAAAXMMXSAMXSAMMSSMMXAAAMSMMXSAAMAMAAAAAXAMXMAMMMMAXXMXAAMAMAAAAASASMXSSMMMSMAAMAMXXXMMSXXXXSMMAXMASMSSMAMASMMMMMMMXAASAMXSMMMMAAAMMMSSM +AMASMSMMSAMXSAMAMSXMAMASMSSMMMXMAXMASXMMSMMSSSMSSMMAXMAMAMAMXMSMMMXSASAXXMMMMSMXMMXSXXXSXMASMSMMXMMSMMXSAXAAMXAXXXAAAAXXMMMAMXMMXASMMMMSMXMX +SMAXAAAXSMMAMAMSSXSMASXMAXXXAXAMASMASXAAXMXMAAMAAASXMSSSMMASXSAMXMXXAMAMSMSAAAAASXMMXSMAXMAMMAMAXAAMASMMMMMSXMASMSSSSSMXAXMAXSAMSXSMMMXAAXSS +MMSMSMMAMMMSSSXMAMXSAMAMXMMSSXXSXMMMSXSMXXAMXMMMXMMAMXXAMSASXMAMXSAMXMAAMAAMSSSMXAAAAXAMMMMMMASMXMMSAMAAASXMMAXAAXMAMAMSXMXXXSAXAMXMAXSASAAA +XAAAXMASMXSAMXAXSMMXMSMMMSXAMSMSXMAMSXMSXMMSASMSSSSXMMSMMMASXMAMSMASMMASMXMMXAXASXMMSSSXSAAASASXASAMASXMSMMSMSSMMMMSMSMMASMMASXMXAAMMMAAMMXM +MXMMMXAMAXMASASMXASMXAAASAMXSAXXAXAXMXSASAXAMAAAAXAXAAAAXXAXXXAMXSAMXSSXMAXSMMMMMSAMAXMAXMMMAAMMXMAMXMMMMAAXAAAAMSAAXAAMAXAAMSAMXSSMSAMXMSMM +SSMSSMASMMSMMAXASMMASXSXSXAXMXSSXMSASMMASMSSSXMMMMXSMSSMSASAMXMSAMXSASXAMXMXAAXSAMXMMXMMMSMMMAMMXSMMSXMAXMSSMSSMMMSMSMSMMMMMXXAMAMMASAXXMXAA +AAAAXMXMXMAXMXMASXMXMXMAXMASMMXXXAMAASMAMXXAAMXAXSAMAAAMAMMASAMXASAMXSMMMMXSSMSMXSXAXXXSAAAAXSXMASAASAMMSMXAAAXAXXAMSAMASASXMSMMMSMAMXXMMSMM +SMMMSSXSASMSMAMXMAMAMXMXMMAAAAAMMSMMMXMASMMMMXMAMMAXAASXMXSAMASXMMXXXMAXAMXAAMXXAMMMMXAMMSMMMMAMASMMSMMMAMSMMMSXMMMSMASAMAAAAAXAAAMMSMAAAMAS +MAMXAASMMSAAXASXSMSASMMSAMSSSMMSAMASMMMXAAAAXSXMASAMXSXAXMMXSXMAMAAMMMSMMMSXMAMMXMASMXMXAMXAAMAMMSAMXAXMAMAXSAMAAAMSMAMXMXSMMMSMSSMXAAXMXSAM +MASMMMSXAMXMSMSMAXSAAAAASXAXAAAMMSMMASXXMSMSSXAMAMASXMMMMASAMASAMSMSXAAXMAXAXMXSSSXSAASMMSSXXAASXSMMMXMSXMXXMASMSMMXMAXAAMXAAXXXMAAMAXSAAMXS +SASASASMSMSMAASASMMAMMMMMMMXMMMSMAMMAMXMMAMXXMXMAXMMAMAXMAMASAMAXXASMSSSMMMMMAXMAMMXMXXAAXAAXSAMXSASMXMAMXMMSXMMAAXAXSSSSMMSMSSMMMXSAAAMMMAS +MXSAMASAAAASMSMAMMMAXXSAMASXAAAAXMSSMSSXSAMAXMSSMSSSSMSSMMMAMXSMMMAMAXXMMAASASASMSSMMXSMMMSMMMASAXSAAASMSAXXAAXSXSSMMMAMAXXAMAAAXAAMXMMXAXAS +SXMMMXMXMMMSXXMSMXXSSMMASAMMSMXSSXAAXAAXXMSMSMASAMXAXAMSXMASMMXAASAMMAMXMSXSAMAXAAAAMXAXAAXAXSAMAMXMSMMASASASXMMXMXMMMAMAMSAMSSMMMMSSXXSMSMS +MAAAXAMSSMMXAXAMMMAAAXSAMASMMSAAAMSSMMXMXXAAXMAMMMMSMSMSXXAXASMSMSXSAAXAMMMMMMMMMSSMMMMXMMMAMMXMMMAAXXMXMAMMXMMSAMAXAXXMSMXSMXAXSAXSMMAAAAAX +SSMMXXMAAAMMSMMMASXSAMXXSAMAAMMMMXXAXXASMSMSMMMSAXAXXAASXMMSMMAXXXAAMMSMSAMAMAXAAAMAMAXXSASMXSXSXMASMSXMMAMXXAAMASASXSAMXMXXXXMXMXMMASXMSMSM +AAASASMSSMMAAAXMXSAAAAXXMXSMMMSASMSSMSMSAXXMMMASMMSMSMSMMSAAXMSSMMMMXAAASMSASMMMMMXAASMXMXXSAMAMMMXMAXASMSSSSMMSXMXXXAAAXMASMSMMMMMSAMAXXAMX +SSMMASAMXMMSSSMSAMXMXSMMSMMMXXXASAAXAAAMMMMMXSASXXXXAMXAAMSMSMAMXASXSMMMMASMMXAMXSSSMXXAMAMMMMAMASAMXSXMAMAMXAAXXMMSSXMMXMASAAAAAXAMASXMMSMS +XAXMXMXMAXMMAXAMXSASMXMASAASXXMSMMMMSMMASMMMAMASASMSMSMMMMMXAMAMSXSXAXMAMXSASMSAAMAMXMASMASAASASASASASAMXMSMMMMXAXSAMMSXSAMXXXSMXMMSXMAMMXAA +SMMSSXSMSSMMMMXMXSASAXMASXMSAMXMAXXAXASAMAAMXSAMXXXAMXXMAASMXSAMSAXMMMXMSAMXMAAMMMAXXXMAMSSXMSASASAMASXMXAXMSSMSMXMASASXMXMASMMMXMMMMSAMSMXM +AAAXMMMAAAAAXAMMXMMMXMMAMMMMXMAXMMMSSMMSSSMMASAMMSSSMMAASMXMAXMSMSMAXAAMMXSAMXMXSMMMSSSSXXXMXSAMXMXMMMAMMMSMAMMAMMSAMMSAMXMASXSXMMAAMMSMXAMX +SMMSXAMAMMXMMMAMASAMMXMASASXMSMMMAAAXMAMMMMMMSAMAMAASMMMMAMXSSXMAMSXMSXSAMXMMMMXMASAMXAMMMAMASASXMASXAMXAAAMMMSASXMASXXAMXMASMMMSSMSMAXMASMA +AXXMASMSSSMSSSXXAMSSMASXSASMMASMSSSSMMMSXMAMXSMMMSMMAMMXMSAMXAAMSMSMMXAAAMAXXAMMXMMSSMMMXMAMAXSAMSMMAXXSMXMMAAMAAMSMMMSAMSMMSAXAAAMMMSMSXASX +XMSAMXSXAAAAXAAMSSMXMASAMAMAMASXAMMXAMAMASMSMMSMAAXXMMSMMXAXMMMMMXXAXMMASMXSSXSASXMXXXXAMSMMXMMMAAASXSMSMASMMXSSMAXAAAMXMSAASMMMSSMXAXAXXMAS +MXXMAMXMSMMMMMSMXAXAMXSMMASMMXSMMMSSMMAMMMMAAAXMSMXXXXAAXSXMAMSXMASXMASAAAXMAMXMAAMMMMMAXAXMMSSXMMXMAAAXMASAXMAMXSSMMMSAMMMMXAXMAMXMMMSMMMAS +AMASXSSMMXAMSMAMXMMMSMMXXAXAAXXAXAAAASMMSASXMMMXAASXSSSSMMMXXAMAMMMSAMMMSMXMASXMSSMAAASXSXXXAAXXMSXMSMMMMAXXMAMSSXXAAASAMSSMSSMMASAMAAXAXMAM +MSAMXXAAMXXMAMXSAMMAAAXMMSSMMXMSSMMSMMAXSAMXAASAMXMAAAAMAAMXSSSMMSASMXXMAASMMMAXMAMMSMSXSMSMMSSSMSAAAAAXMSSSSXMXMASMMXSSMAAAAMASASAXMMSAMMSM +MAMASAMXMASMMSASMSMMSSMAXAAAXMSAAAAXMXSMMAMXMASAXMMMMMMXSASAMMAMMMAMAMMSMAMXAXXMSAMXMASASAAAMMAAASMMMSSMMXAAMAMXSXSXXAXXMXXMSSMMAXXMSXMAMAAA +XXMAXMXAMMSAMMASAXXAMMMXMMXMAXMMSMMMSSMAXXXXSASXMXXAXXMMMAMAXSAMAMAMXXAAMXASXMXMMMMMMAMAMSMSSMSMMMXXAAAASMMMMAAMSASAASASMSMXAAMASMSXMAXAMSXS +MMMMSAMXSXSXMSSMASMXXASXSSSSXSAAMASASASXMMMMMXSASASMSSXSXSSXMMASMSMSMMSSSMXAMSASASAMMAMSMXMAMAMMXSXMMSSMMAAAMSXSMAMAMMAXAASMSMMAAAXASAMMMXAM +AMAXSAXXAXXAMXXMMMXXSAMXAAAAXSMXSAMMSAMXSAAAXASAMAMXXXAMAMAXMSAMXAAAAAAXXXXMASASASASXAMXSSMASMMSAMASAXXMAMSSXXSAMSMAMMMMSMMMXAMSSXMXMXMMAMXM +SMMMMMMMMXSXMAXAMXAMMSMMMMMMMMSAMXMXMMMAXSMSSMMXMXSSMMMMAMAXXAASMSSSSMXSXMXXMMAMASAMXXSAMXXAXXAMASAMMSMAMMMXASXXMASXMAAAXXMASAMMMMMAXAMSSSSS +AAMAAXXAXAXASMSSXMXXAAMAXXXXXMAXSAMMSXMAXAXMAMMXAXMASXASASXSASXMAXAAXMMSAMXMXMXMAMXMXXMASAMSSMMSXMAAXAAAMAMMXXSXXMMSSSSSSMMMMXMAAMSMMXXAAAAX +SASXSMSMSMSXSAAMAMAMSSXSSMSMMXMXXASASXXMAMXMAMXMMMSAMSXSASASMMMMXMAMXXAMAAASASMMMSSXMASMMAAAXXASXSSXSSSMSSSMSAMXXXSAMXAAMXAAXMSMXMAXAMMMMMMM +AMXAAAAAAAMAMMMXAMXXMAMMAAAAAAMXSAMAMMSSSSSSXMXAAMMAXMMMAMMSASXMXXAMXMSSMSMSASXMXAAXXAAMMMMMMMXSAAAMMAXXAAAAMASASXMMXAMXMSMMMXAMMSSSSMAXMAXM +SAMXMMMSMSMXMAXSAMSSMXMSASMXMASAAMMSMAAAMXMAMSSMXSSMXAAMASMSAMXMASMMXAMXXAXMMMASMSSSMMSSXMMXAXMMXMAMMAMMMSMSMAMASXAAAXXAMXXAXXXMMSXAXSMSXMSS +AXAMXSXMXAMXMAXXMMMAXXMXXMAXSASMSMAXMMMXMAAMAMAXXXAASMMSASXMMMMMMXAAASMMSMSSMSSMAAMXAAAMAMSSMSAASXXSMMSAAXAXMMMAMXMMSMASXAMSSMSSSSMSMMXMASAX +XSSXMASXSMSXMASXMASAMXMASMXMMAMXAMXSXMSASASXSSSMMMMMMAAMXSMSASMAMMMMXXAAXXAAMMAMMMMSMMMSAMAAMAMMSAXXAXAXXMAMXXMAXAMAAASAMXSAAMSXAMAASMXSXMAS +AAMAMXMMAAAXSASXSASAMASAXMAMMXMXMMASAMSAMAMAXAAAXAXXSAMXSMXSAXSAMAASMSMMSMSXMSSMMAMXXAMSXSMSMMSMXMMMMMMXMASMMMMXSASXSSXMAXXXMMMMSMSMXSAMMMMM +MSSSMMMSMMMMMMXAMXSASXMASMXXSASMXMXMXMMAMAMAMSXSASXXSAMXMXAMMMSMSMMMMAMXMMAMXMMASXSMSMMXASXXAXXASXMASAXXAMMXAAAAXXMAMMMXSSMMXSAAXMXAXMMMAAAA +MAAAXXAAAMXSAMSXSASMMASAMMMMMASAXSMSMSMSSXSXMMAAAXMXSAMAMMMXSAMAAXAASAMAAMMSAAMXMAAAXSAAXMASMMSSMASASMMAXXASXMSSSMMMMMSAMXASASMSSSMSAMXSSXSA +MMSMMMXXSMXSAMAAMASXMASAMXAAMXMXMMAAAAAXXXMAMMMMMMXAMASXSAMAMASMMSSXSAXSSMASXSMMMSMMMMXMMMMMAXSASXMMSAMASXMXAAMAXAAXAMMMSMSMXSAMAXAXMAXAMXMM +SMAXXMXSAMXSAMMMMAMAMXXMMSSXSXMAMMSMSMSMAXSSMSXAAXMXSAXASASMSAMAAAXMMMMMAMXSAXMAAAAMXMASXXASMMSAMMSAMAMAXAMXMXMASMMMSXMAXXAMXMAMXMMMXSMMMAAA +XAMASAMAAMASMMMAMXSXMMMXMAMSSXMAXXXXXMMMSMAMASMMXAAMMMSMSAMAMXSMMMSMAXXSAMAMMMSMSMMSAXAXMAMXSAMXMAMMSSMMSAMXXXMASAMSMXMAMXSMSMSMSAXAXXAASXSS +XSMAAXAMXMAXAASXSASAAXMAMMSAMASXXXXASXAAAMMMAMAXMXSAXXMXMAMMMAXXXAMMSSMSAMAMAAMXXAAXXXSMMMXMMSSXMAXXAMAASMXMXXMASASAMXMASAAMSAAAASMSASXMSAMX +MXMXSXSASMAMSXSAMASMMASXMXMASXMMSSMAMSMSSSSMSMXMMAAXMAMASAMXMMSSMASAAMASMSAXMXSAMMMMSMMASAAMSASASXXMASMXSAAMSMMMSXMASMXMAMXAMSMMMMXMXAAMXMSA +AAMAXAMAMXXMXAMXMXMASAMAXSMMMAAAAXMAMMMMAAAAAMXSMASASASASASXXMAXSMMMMMMMAXAMAAMAMMSASASAMSSMMASXMSMXXMMXMMXXAAAAMAMXXXAXXMMSAMXXXXASMSMMAMXA +XAXXMAMMMMXSXMSXSMXAMAMXAXAAMMMMXMMAXAAMMSMMMSAAXMMASASMXMMXAMXXMXMXXXMMSMXAMSMSMXMASXMAXAMAMXMASAMSAMXSXAMSSSMXSAMSXSXMAXSMXSASMMMSAAXSASAM +SXMSMSMXAXMAMXMAMXAMSXMXMSSMSSSSMSXSMSXSAXXMAMXSMXMXMAMAMSSSSMMSMSMSMAAAXAASMXAMXMMAMAXSMMSMASXXMASAAMAMAAMAAXAAMXMXAMASXXMXXMAAXMXMXMXSAXAS +AMAAAAMMXMMSASMSMSMAAXSXAMXAXAAAAMAXXAASMMSMASAMMXMXSAMXMAAMXAMXAAAAXXMAMSMXAMAMMSMAMXMXAMXAAMMMAXSMSMASASMSXMMXSXMSAMMMMASXXMSMSAXMMXMMXXAM +SASMSMSSSMAMMSAAXAAXMAMMXMMMMMSMMMAMMMMMAAXXSMMMAMSASAMXMMSMSXMMSMSMSXMXMXMMMMAMASXSSMASXMMMMSAAXXXAXMXMXMAXXXXAXAAMXMXASAMXAXMAXAMMASXXSAMX +XAXXMASAXMAMXMXMSSSMXSMSXSAAXMAXAMASMMSSMMSMMASAMXMAXAMSXMAMMMMMMMXXMXMASASMSXXMASMXAMMMSMAAAXAMMAMMMASXMMAMAMSXXMMSSSSXMXSXSMMSXMASASMAMAXS +MXMMSSMMMMAXAMXXMAAXXXMAASMMSMSSMSASAAAAAMXMSAMMXMXSMMMMASAXAAAASXMSMASXSASAMXXMMSMSMMXAAXMMXSMSAMAXAXSAMMAMAAMAXSMXMAMMSMSAAXAXAMMMAMXAXAXX +MXMASAMXASMSSSXSASMMMSMMXMXSAMAAMMMSMMMSSMAMMAMXXAAAXMASAMXMXSSMSAAXSAMAMAMXMMXMMSASAMMSSSSSMAAAXXMSMMMAMSSSXSMMMMAAMAMAAAMSMMXSAXMMSSSSSMSX +XAMXSMMMMSAAAAAAAMXSAAXSMSMSSSSSMMASXAXXXMAXXMMMMMXSXSAMXMSSMAMMSMMMMMMXMSMXAXSAAMMSAMAMMAAMMMMMXMMAAAMMMAAXMMAMSSSSSMSSMSMMMAASXMASAAXAAXSX +SSSMSXSAXMMMMMMMMMXMSSSMASASAMXMAMASXMXSMXSXXXXXMMAMXMMXXAAXMAMMXMAXMAXAMXASASMMXSASXMASMMMMXXAXASMSSMSMMSSMASAMMAAXXMAMAAAAMMMSAAMMMMMMMMSA +AAAAXAXXSMXASASAXXAXXMAMAMMMXMASMMMSASAMAAMAMSMAMMAXMSMSMMASMAMMASXSSSSMSXMMMMASAMXMASASAAMAXSXSMSAMAMXMAMAAASASMMMMMMAMMSSMXSXMAXAAAXXXMAXM +MSMMMSMMMMMASAMXXXXSASMMSSXXSMXXSAXMAMMSSSMAMAAASMMSAAAXMMMAMMMSASXXAAMASMXAASXMXMASXMMMXMSMASXMMSMSAMAMXXAMXMAXXXAAMSMSMAXXAXMASMSMSXMAMMSS +MAMXAMAAAAMMMAMXSMASAMXMXMMMAMSXSMSMAMXAAMAASXSMSXAAMMSMXASAMSAMAXMMMMMASAXMMSAMASMSAASXMMAMMMXSAMXSAMMXSAMXASXMSASMXAAAMXMMMXSAMXMXAASXMMAA +MXXMAXSMSMSSSMSAAMMMMMMMAMAXMASAXAAXMMMMSMXMSXXAXMMMSXMMSXSAXMXMASXAAXMASMSSXSASXSMMMXMAXSXAAXAMASASXMXAMXXMXSAAXXMXSMSMSMMSAMXAMAMXSAMASMAS +SAMXSXMAXASAMAMMXAMXAAASASAMXMMMMSMSXSMMAXAMXMMXMXAXXAMMSMMMMMMXMAXSSSMXSAXMASAMXXMXMXSMMMXSMMMSAMASMSMASXMMASMMMSMMXAXXSAAAXSSXMAMAMAMAXMAM +XXSAMAMAMXMMMAMAMSXSXSXSXSASAXAAMAAAXAMMAMSMSAAMMSMSSXMASXMAXAASXMAXAXXAMAMMAMAMXMSASXASAMXXSSXMXMXMASAMMMSAAMAAAAASMSMAMMSMSMXMSSSXSMMSSMXS +XMMXXAMSMSSXSASAMXASAMAMXMASAMSMSXXSAMXMSMXAMXSAAAXMASMASMSXSSMSAMXMMMMXSSXMXMSAMXSASXSAMXSMAMAXASMMMMSXMAXMSMMMSSMMAXMXMXMMMXAXAAMASMAXMXMA +SAXASXSMXAAXMASAMMAMXMAMAXMXMMMAXAMAMXAMXAMAMSMMSSXXMAXAMXSAAAAXAMSMXXAMMAMMSMXAXMMMMMMXMMAMXMSMMSAAMAMMMXSAMXMXAMXMAMMSMXAAMSSMMSMAMMSMMSAM +XMXMAMAXMMXSAASMMSMSASMSSSMAMXMXMMMAASMSMMMXSAMXMMXAMXSSMASMXMMMAMAMSMSMSAAAAASXMASAXAXASXSXSMXAXSXMMAMMAMXMSXMAASMMXSXMASXMXAASAMMXSXXAAXMX +SSSXSMAMXAAXMXSXXXASXSAAAAMXMAMASMMMMMXAAAAMAMXMXAAMMAAMMAMXSSXMASMSAMMASXSSMMMXMSMAMXSAMMMAAMSAMXAXSAXMASXXSAMAMXAXAMAMASMMMSSMMSMMMASMMMSX +AAAAXMXSMMXSMAXMMMXMAMMMSMMSMASAXMASASMSSMSSMAAMMMSXSMSMMSSMMAASXSXSASMAMXMAMSAMXAXAAXMASAMSMMSSMSMMMASXXMXAXXMASMMMMXMMAMAAAXAXAAMAMMMXMSAM +MAMMMSMMMMMAMASAASAMXMAXAXXAMAXMMSASAMXAAAXMXSAMAAMASXAXAMXAMSMMASMSAMMAMXXAMXXSSSXSSXAAMAXXAAMAMXXMASAMMMMSMXSMXASAMASMSSSMSSSMSMSAMXXXMAMA +AAXAXAAXAASAMMAMSSMSAMXSMMSMXMSMAMXMXMMXMMSSMMASMSMAMMSMMSSMMXAMXMAMXMXXMAXSMSMMAMAXXMASXXMSMMSMSAMXXMMMAXAXAASMXMAMSMSAAMXAAAAAXASXSXMAMMXS +MXSMSSSMSXSAAXAXMXMXXXAMXAAMAXAMSSSMMSMMXMAMAMXAMXMXMAXAXMAAAXAMSMSMSSMASMXXAMXMAMXXMMAAMMMAAMAAAMXSXSXSSMMXSSMAASXMXAMMMXSMSSSMMMMXAXSAMAAM +XAXMAAXXXASXMMMSXASMMMMSMSSSMMASAAASAAXXAMMSXMXSAAAAMXSSMSSMMSAMXAAAAMXAMAAMAMXMXSAMMMSSMAXMSMMMMXAMXMAXAASMMMMXMMAMMMXAXXSAMAAASXSMSASASMSS +MXSMXXMXSMXSXAXMMMSAAMXSAAMAMSMMMSMMSSMMXSXXAMXMMMSXSAAAAAAXMAMXMSMMMAMSSMSSMMXMAXAMAAXAXSSXXMSMSMXXAMMMSMMAAMAASMSMAMSXSMMAMMMMAXXAMASAMAAA +SMMMAXSXMMAMMMAAAXSMMMAXMSMAMMAMXMXMAMAMSMMSMMSSXMMAMMSMMMSMMAXXXAXMMXXXAMXAAAMMSSMMMMSAMXXXMAAAAMSSSSXAMAMSXMMMSAMSSXMAAASXMASXMSMMMAMXMMMS +AXAAXMMAAMASAMXXSMSXSMMXXMMAXSAMASMMAMAMMAAAAAAXAAMAMXXXAXXMMMSMMMMSMSSSMMSMMMXXMAXXXAMXMASXMSMSMMAAXSMXSXMMSMXAMAMAXAMXSAMXSAMAXMAAMXSASXAX +SMMMSASMMSASMXSAXAMASXSXASXAMSAMASASXSSSSMMSMMSSSMSMSMXSSSMAAAXAAAXAAAXAAAMAAMXMSMMMAMSSMXASAMXAAMMXMXMAMAAAAXMXMMMXXXMMXAAAMASXMMSMSASASMMS +XAAAMMMXAMXSAAMMMAMSMAXMMMMXMSMMXSMMAMXAASAAXSAMXXAAAAXXMAXMMXSSSXSMMMXSMMSSMSAAAMMMSMAAXXMSMXMSMMXSAMXSSSMSSSMSMMXSXAXAMXMMMAMAAXAAXMMXSAAX +MXMMSXXMXMXMMXSXSAMXMSMSAAMAAMASAMAMSMMSMMSASMMSMSMSMMMASMMMSMMAXAXMASMAXXXXMSXSMSAAAMSSMSXSMAMXSAMASXAMMXAAMMAMXSAMSSMMXASAMASXMSXSSXSAMMMS +AAMXMXMXAAXMMMXASXSAAAAMSAXXMSAMMSAMAXMXAAMXSAASAAMAXXAXMXAAMAMAMSMSASASMSXAXSXMASMSMMAAXXAXXMXAMXSAMMMSAMMSXMAMMMAXAMAMSASXSASMAMXMMAMASMXX +MMSAMMASMSMSSMMMMMMMMMXMMMSSMMMXMXXSXMXMMMSSXMMSXXMASXSMMSMMXMMSSMAMMMXAASXMMSAMMMXXMMXXMMSMASMMMAMAMMAMAXAMASXSASXMASXMAXXXMASMAMSMMAMXXXAS +SMSASAMMMAAAMSASASXSSSSMSAMXAAAMSAMMXSAAXASMMSXMMSMAMXAAXXASXSAMAMMMASMMMMAMAMAMMMASMSSMMAXMAMAXSXSMSMMMSMXSAMASASASAMAAMSXMSAXXAMSXSXSMXMMM +AMMAMXXXXMMMSSMMASMMMAAAMXMXMMXSMASAAMXSMMSAAMAAAMMSMSXMXMASAMXSAMAAMAXAASAMXSMMXMASXAAMMASMAXXMMASAAAAAXXMMAMXMAMMMASAMXMAMSASMSSMAMAAAXMAS +MSXSAMMSASXXXMAMSMXAMSMMMAMSMSXAXSMMSSMXASMMMSMMMSAXXSASMSAMXMMXAMAMXMMSXSMSMAASMMASMSMMMMMXAMAXMAMXMSMASASMSMSMSMMMAMAXMSAMSAMMXAMAMSMMXSAX +XAMMAAAMAMMMMMAMAAMMXAXXSXMAAXMXMMAMAAXSSMXMMAAMXMASAXAMMAMMMSSSSXSAAXAXAMAAMSMMAMASMXASAXMAXASAMMSAXAMXSXMAXSXMASXMASXMASMMMAMXSMMXXAAMXMMS +AMAMSMSMAMXAASMSMSMSAMXXMAMMSMSSSMAMSSMMXMASMXSMXMXMAMSMMASAAMAAAAMSXSAMAMSMXXXSSMMSASAXMSMASXMASAAXMMSMSAMXMMMSAMXSMXAAMMXAXAMXSAAMSMSMAAAA +SXSMXAXMAMMMMSAMAAAXXSXMMMAXAMAXAXXXXAASMMMAAXMMMSAMXMXASASMXSMMMMMAMMASXMXSAMXMAAXSXMAMSAMAAASXMXSMSXAAMSAMXXAMASXMSSXSASXXMAMXXMAMSAMMSMMX +AAAXMXMSMMMSMMAMSMSMMMXSAAXSSSMSSMSASXMMAMSMSMSAAXXXSASMMMSMXSAMAXMAXSAMAAMSXMASMSMSAMMMSASMMXMMMSAAXSMSMAMASMSSMMAAAXXMAMAAMSSMMXSXSASAXMAM +MXMXSAMMAAAAXSSMMAAAAXAMMXMAMXXXMAXASXMXAMAAAAXMMSSMSXSAAAMMAMASMMSAXMSSMMMMASXXAAASXMAAXXMXMMMSXSMSMXMMMXMAMSXAXSXMMSMMAMXMMAAAAXMAMAMXMMSA +XAMAXASMMMSXMAAAXSSSSSXMASMSMMSMMSMASASXXSMXMMMMXXXASMSXMSSMASAMAAMAMMAMAMXSAMXMSMMMSSMSSXMASAAAASXXXAAAXAMXMXXAMXMXXXXMASAAMXSMMSMAMAMMXAAA +SASASXMXAXXMMSSMMAAAAXMASXXMAMMAAXMXMAMAMXMASMMMSAMXMASMMXAXXSASMMSSMSASAMAMAMXAXAMXMMXXAASASMSMMMMXMSSXSSXMASXMXAMSSMMSAXMXSAMAXXMAMAMAMMSM +SXMXSAAMMMSXMAMXMMMMMMMMMXASMMMMMMSXMAMAMASASAAAMAMMMMMAMSMMMMMMMMAAASASMMMSMSMSSMXMASMMSMMAXAXXSASAAMAMAAAMASAMSASAAXMASMXXMASXMSSMSSSXMMAM +MXSASMMMXAASMMSXSAMXXASAMXXXXSXASXXASXSASXMASMMMSAMAAASAMXXAAMAAXMSSMMAMMAAAAAMAAXASAAAAMAMSMSMMSASMSMAXSSXMASAMSSMXSXMAMMXMSXMAAMMMAXXMASAS +MSMMSAMAMMSSMXMXSXXMASMMSAMXAMSAMXSXMASXSAMXMMAMXXSSSMSASXSSSSMSSXMAXMXMSXSMSMMSSMMMSSMMSSMAXXMAMXXMAXXMMMMMASAMXMMMMXMASAMXMASXSSSMMSMMMMMS diff --git a/4/main.go b/4/main.go new file mode 100644 index 0000000..7ce845a --- /dev/null +++ b/4/main.go @@ -0,0 +1,73 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "strings" +) + +func main() { + file, err := os.Open("input") + if err != nil { + panic(err) + } + defer file.Close() + scanner := bufio.NewScanner(file) + resultXMAS := 0 + resultMASX := 0 +// word := []string{"X","M","A","S"} + table := [][]string{} + for scanner.Scan() { + line := scanner.Text() +// fmt.Println(line) + table = append(table, strings.Split(line, "")) + } + for i := range table { + for j := range table[i] { + //XMAS + if table[i][j] == "X" { + //HORIZONTAL DOWN + if i < len(table)-3 && table[i+1][j]+table[i+2][j]+table[i+3][j] == "MAS" { + resultXMAS++ + } + //HORIZONTAL UP + if i >= 3 && table[i-1][j]+table[i-2][j]+table[i-3][j] == "MAS" { + resultXMAS++ + } + //HORIZONTAL RIGHT + if j < len(table[i])-3 && table[i][j+1]+table[i][j+2]+table[i][j+3] == "MAS" { + resultXMAS++ + } + //HORIZONTAL LEFT + if j >= 3 && table[i][j-1]+table[i][j-2]+table[i][j-3] == "MAS" { + resultXMAS++ + } + //DIAGONAL DOWNRIGHT + if i < len(table)-3 && j < len(table[i])-3 && table[i+1][j+1]+table[i+2][j+2]+table[i+3][j+3] == "MAS" { + resultXMAS++ + } + //DIAGONAL DOWNLEFT + if i < len(table)-3 && j >= 3 && table[i+1][j-1]+table[i+2][j-2]+table[i+3][j-3] == "MAS" { + resultXMAS++ + } + //DIAGONAL UPLEFT + if i >= 3 && j >= 3 && table[i-1][j-1]+table[i-2][j-2]+table[i-3][j-3] == "MAS" { + resultXMAS++ + } + //DIAGONAL UPRIGHT + if i >= 3 && j < len(table[i])-3 && table[i-1][j+1]+table[i-2][j+2]+table[i-3][j+3] == "MAS" { + resultXMAS++ + } + } + //MASX + if table[i][j] == "A" { + if i < len(table)-1 && i >=1 && j < len(table[i])-1 && j>=1 && (table[i-1][j-1]+table[i+1][j+1] == "MS" || table[i-1][j-1]+table[i+1][j+1] == "SM") && (table[i-1][j+1]+table[i+1][j-1] == "MS" || table[i-1][j+1]+table[i+1][j-1] == "SM") { + resultMASX++ + } + } + } + } + fmt.Println("XMAS contained :",resultXMAS) + fmt.Println("MAS in X contained :",resultMASX) +} diff --git a/5/input b/5/input new file mode 100644 index 0000000..4790cb4 --- /dev/null +++ b/5/input @@ -0,0 +1,1374 @@ +95|51 +92|45 +92|39 +55|51 +55|91 +55|43 +46|93 +46|69 +46|84 +46|99 +11|43 +11|99 +11|63 +11|39 +11|88 +66|86 +66|96 +66|68 +66|24 +66|76 +66|81 +19|95 +19|45 +19|66 +19|44 +19|64 +19|55 +19|86 +45|88 +45|69 +45|57 +45|44 +45|86 +45|54 +45|51 +45|58 +84|37 +84|55 +84|18 +84|28 +84|76 +84|66 +84|86 +84|68 +84|71 +67|69 +67|66 +67|71 +67|37 +67|61 +67|26 +67|55 +67|52 +67|45 +67|19 +63|88 +63|73 +63|97 +63|37 +63|84 +63|42 +63|52 +63|95 +63|19 +63|64 +63|45 +91|38 +91|84 +91|26 +91|43 +91|77 +91|82 +91|39 +91|97 +91|99 +91|35 +91|92 +91|73 +69|88 +69|86 +69|61 +69|51 +69|57 +69|18 +69|58 +69|24 +69|68 +69|38 +69|81 +69|62 +69|32 +97|44 +97|19 +97|55 +97|81 +97|24 +97|68 +97|69 +97|58 +97|96 +97|71 +97|64 +97|14 +97|76 +97|18 +28|54 +28|62 +28|86 +28|91 +28|81 +28|23 +28|61 +28|52 +28|76 +28|64 +28|57 +28|95 +28|18 +28|88 +28|96 +42|96 +42|95 +42|26 +42|35 +42|68 +42|84 +42|69 +42|55 +42|97 +42|88 +42|28 +42|81 +42|67 +42|86 +42|71 +42|66 +35|37 +35|95 +35|76 +35|96 +35|52 +35|97 +35|69 +35|24 +35|88 +35|61 +35|81 +35|68 +35|86 +35|18 +35|19 +35|44 +35|14 +73|86 +73|77 +73|26 +73|96 +73|67 +73|66 +73|52 +73|35 +73|45 +73|84 +73|69 +73|24 +73|18 +73|19 +73|37 +73|55 +73|64 +73|97 +61|93 +61|91 +61|57 +61|92 +61|44 +61|63 +61|42 +61|51 +61|65 +61|54 +61|38 +61|62 +61|73 +61|58 +61|46 +61|39 +61|77 +61|23 +61|43 +93|67 +93|95 +93|97 +93|18 +93|52 +93|81 +93|35 +93|96 +93|45 +93|71 +93|19 +93|73 +93|77 +93|69 +93|86 +93|64 +93|28 +93|37 +93|66 +93|88 +65|35 +65|28 +65|39 +65|99 +65|84 +65|67 +65|19 +65|45 +65|37 +65|71 +65|93 +65|97 +65|63 +65|42 +65|77 +65|32 +65|73 +65|43 +65|92 +65|26 +65|46 +23|84 +23|77 +23|38 +23|65 +23|93 +23|26 +23|73 +23|11 +23|43 +23|46 +23|62 +23|39 +23|67 +23|92 +23|63 +23|99 +23|82 +23|35 +23|54 +23|42 +23|51 +23|91 +58|62 +58|92 +58|82 +58|43 +58|93 +58|99 +58|77 +58|23 +58|65 +58|39 +58|54 +58|51 +58|63 +58|46 +58|73 +58|26 +58|38 +58|91 +58|11 +58|84 +58|35 +58|32 +58|42 +52|32 +52|57 +52|11 +52|14 +52|23 +52|68 +52|44 +52|55 +52|43 +52|91 +52|76 +52|54 +52|18 +52|51 +52|61 +52|65 +52|82 +52|58 +52|46 +52|62 +52|39 +52|38 +52|92 +52|86 +76|99 +76|62 +76|82 +76|73 +76|46 +76|42 +76|61 +76|32 +76|54 +76|44 +76|93 +76|63 +76|38 +76|57 +76|51 +76|43 +76|91 +76|14 +76|65 +76|58 +76|39 +76|23 +76|92 +76|11 +38|77 +38|99 +38|84 +38|35 +38|66 +38|65 +38|43 +38|28 +38|46 +38|92 +38|67 +38|97 +38|82 +38|32 +38|42 +38|39 +38|19 +38|26 +38|63 +38|37 +38|93 +38|11 +38|71 +38|73 +44|57 +44|32 +44|63 +44|77 +44|51 +44|67 +44|65 +44|58 +44|23 +44|84 +44|93 +44|73 +44|82 +44|11 +44|92 +44|42 +44|39 +44|62 +44|99 +44|43 +44|54 +44|46 +44|38 +44|91 +62|77 +62|42 +62|73 +62|84 +62|43 +62|11 +62|32 +62|35 +62|67 +62|26 +62|92 +62|54 +62|63 +62|65 +62|38 +62|91 +62|99 +62|97 +62|19 +62|46 +62|39 +62|51 +62|93 +62|82 +54|11 +54|71 +54|99 +54|51 +54|42 +54|35 +54|39 +54|67 +54|65 +54|43 +54|93 +54|46 +54|77 +54|73 +54|26 +54|84 +54|38 +54|82 +54|92 +54|19 +54|32 +54|63 +54|97 +54|66 +43|66 +43|45 +43|37 +43|99 +43|69 +43|67 +43|93 +43|26 +43|28 +43|19 +43|97 +43|71 +43|24 +43|35 +43|63 +43|42 +43|88 +43|95 +43|64 +43|96 +43|77 +43|81 +43|73 +43|84 +24|39 +24|38 +24|11 +24|14 +24|55 +24|91 +24|51 +24|58 +24|86 +24|62 +24|61 +24|65 +24|76 +24|82 +24|44 +24|32 +24|23 +24|46 +24|68 +24|54 +24|57 +24|52 +24|18 +24|92 +37|44 +37|86 +37|64 +37|69 +37|96 +37|24 +37|14 +37|91 +37|57 +37|76 +37|52 +37|88 +37|68 +37|55 +37|54 +37|45 +37|62 +37|58 +37|95 +37|61 +37|81 +37|51 +37|18 +37|23 +39|69 +39|97 +39|88 +39|26 +39|45 +39|96 +39|35 +39|71 +39|19 +39|77 +39|64 +39|67 +39|28 +39|63 +39|73 +39|99 +39|84 +39|93 +39|37 +39|66 +39|42 +39|95 +39|81 +39|43 +82|77 +82|73 +82|67 +82|96 +82|93 +82|26 +82|37 +82|43 +82|19 +82|99 +82|39 +82|11 +82|95 +82|28 +82|97 +82|42 +82|69 +82|71 +82|64 +82|84 +82|35 +82|66 +82|63 +82|45 +81|38 +81|51 +81|18 +81|55 +81|52 +81|76 +81|44 +81|92 +81|68 +81|14 +81|86 +81|32 +81|24 +81|61 +81|62 +81|57 +81|91 +81|23 +81|46 +81|58 +81|54 +81|82 +81|65 +81|11 +71|86 +71|55 +71|62 +71|66 +71|57 +71|45 +71|76 +71|69 +71|96 +71|23 +71|64 +71|44 +71|28 +71|95 +71|24 +71|37 +71|18 +71|61 +71|68 +71|88 +71|58 +71|52 +71|14 +71|81 +99|19 +99|52 +99|66 +99|84 +99|88 +99|42 +99|95 +99|28 +99|69 +99|64 +99|35 +99|45 +99|24 +99|93 +99|97 +99|96 +99|81 +99|73 +99|71 +99|26 +99|67 +99|77 +99|37 +99|86 +32|37 +32|71 +32|46 +32|11 +32|39 +32|96 +32|45 +32|66 +32|28 +32|43 +32|63 +32|35 +32|19 +32|92 +32|73 +32|93 +32|26 +32|84 +32|67 +32|99 +32|77 +32|82 +32|42 +32|97 +26|64 +26|37 +26|69 +26|55 +26|44 +26|86 +26|61 +26|76 +26|24 +26|81 +26|45 +26|19 +26|14 +26|95 +26|97 +26|88 +26|71 +26|66 +26|35 +26|28 +26|96 +26|52 +26|68 +26|18 +14|99 +14|43 +14|44 +14|46 +14|54 +14|32 +14|65 +14|84 +14|82 +14|93 +14|23 +14|57 +14|39 +14|42 +14|63 +14|73 +14|62 +14|38 +14|11 +14|92 +14|77 +14|58 +14|91 +14|51 +57|91 +57|93 +57|54 +57|99 +57|58 +57|42 +57|23 +57|67 +57|26 +57|77 +57|82 +57|11 +57|92 +57|38 +57|65 +57|39 +57|63 +57|73 +57|43 +57|32 +57|51 +57|84 +57|46 +57|62 +18|23 +18|99 +18|91 +18|44 +18|61 +18|62 +18|82 +18|58 +18|63 +18|43 +18|55 +18|38 +18|51 +18|46 +18|76 +18|57 +18|32 +18|68 +18|39 +18|11 +18|65 +18|54 +18|14 +18|92 +96|65 +96|23 +96|51 +96|52 +96|38 +96|88 +96|44 +96|76 +96|61 +96|86 +96|64 +96|62 +96|55 +96|18 +96|14 +96|95 +96|57 +96|24 +96|54 +96|91 +96|69 +96|58 +96|68 +96|81 +68|44 +68|61 +68|82 +68|63 +68|46 +68|92 +68|62 +68|23 +68|91 +68|32 +68|76 +68|43 +68|38 +68|65 +68|99 +68|73 +68|11 +68|14 +68|39 +68|57 +68|93 +68|51 +68|54 +68|58 +77|66 +77|28 +77|86 +77|64 +77|19 +77|45 +77|84 +77|71 +77|68 +77|67 +77|35 +77|69 +77|52 +77|96 +77|55 +77|18 +77|76 +77|24 +77|26 +77|37 +77|95 +77|81 +77|88 +77|97 +88|18 +88|86 +88|52 +88|65 +88|32 +88|61 +88|92 +88|81 +88|76 +88|38 +88|23 +88|24 +88|58 +88|68 +88|44 +88|62 +88|82 +88|14 +88|51 +88|46 +88|55 +88|54 +88|91 +88|57 +51|39 +51|42 +51|93 +51|99 +51|71 +51|97 +51|38 +51|84 +51|67 +51|28 +51|65 +51|73 +51|82 +51|11 +51|32 +51|26 +51|77 +51|66 +51|19 +51|43 +51|63 +51|35 +51|46 +51|92 +86|58 +86|62 +86|46 +86|32 +86|55 +86|92 +86|38 +86|39 +86|43 +86|44 +86|23 +86|91 +86|76 +86|54 +86|18 +86|63 +86|57 +86|68 +86|65 +86|61 +86|14 +86|11 +86|51 +86|82 +64|95 +64|81 +64|23 +64|54 +64|18 +64|51 +64|55 +64|61 +64|86 +64|88 +64|62 +64|52 +64|91 +64|14 +64|57 +64|32 +64|92 +64|58 +64|44 +64|65 +64|68 +64|38 +64|76 +64|24 +95|57 +95|68 +95|76 +95|23 +95|92 +95|81 +95|24 +95|55 +95|54 +95|58 +95|46 +95|86 +95|14 +95|32 +95|62 +95|38 +95|18 +95|91 +95|65 +95|44 +95|52 +95|88 +95|61 +92|77 +92|67 +92|42 +92|97 +92|96 +92|73 +92|71 +92|37 +92|82 +92|84 +92|63 +92|26 +92|35 +92|28 +92|46 +92|99 +92|69 +92|43 +92|19 +92|93 +92|66 +92|11 +55|44 +55|11 +55|23 +55|92 +55|57 +55|65 +55|54 +55|68 +55|76 +55|32 +55|61 +55|58 +55|38 +55|82 +55|63 +55|93 +55|46 +55|14 +55|99 +55|39 +55|62 +46|19 +46|42 +46|39 +46|97 +46|63 +46|77 +46|67 +46|28 +46|73 +46|66 +46|37 +46|43 +46|82 +46|11 +46|26 +46|71 +46|45 +46|96 +46|35 +46|64 +11|73 +11|93 +11|69 +11|19 +11|95 +11|84 +11|71 +11|96 +11|77 +11|64 +11|45 +11|67 +11|26 +11|66 +11|37 +11|42 +11|35 +11|97 +11|28 +66|88 +66|55 +66|44 +66|91 +66|95 +66|52 +66|23 +66|61 +66|18 +66|45 +66|37 +66|62 +66|69 +66|58 +66|64 +66|14 +66|57 +66|28 +19|69 +19|52 +19|96 +19|28 +19|24 +19|37 +19|68 +19|14 +19|76 +19|57 +19|61 +19|71 +19|58 +19|81 +19|23 +19|18 +19|88 +45|62 +45|55 +45|64 +45|52 +45|24 +45|14 +45|18 +45|81 +45|38 +45|95 +45|96 +45|76 +45|61 +45|23 +45|91 +45|68 +84|69 +84|61 +84|81 +84|88 +84|97 +84|35 +84|95 +84|64 +84|19 +84|24 +84|52 +84|45 +84|26 +84|96 +84|67 +67|64 +67|14 +67|96 +67|18 +67|24 +67|81 +67|35 +67|28 +67|68 +67|86 +67|76 +67|88 +67|97 +67|95 +63|66 +63|77 +63|67 +63|81 +63|71 +63|24 +63|96 +63|93 +63|69 +63|35 +63|99 +63|28 +63|26 +91|63 +91|54 +91|46 +91|67 +91|19 +91|71 +91|65 +91|51 +91|42 +91|93 +91|32 +91|11 +69|55 +69|14 +69|52 +69|54 +69|95 +69|23 +69|91 +69|44 +69|76 +69|65 +69|64 +97|57 +97|61 +97|86 +97|52 +97|28 +97|66 +97|45 +97|37 +97|88 +97|95 +28|58 +28|24 +28|69 +28|45 +28|14 +28|55 +28|68 +28|37 +28|44 +42|19 +42|77 +42|64 +42|24 +42|45 +42|18 +42|52 +42|37 +35|64 +35|55 +35|66 +35|71 +35|57 +35|45 +35|28 +73|95 +73|42 +73|81 +73|88 +73|28 +73|71 +61|32 +61|14 +61|11 +61|99 +61|82 +93|84 +93|24 +93|42 +93|26 +65|82 +65|11 +65|66 +23|97 +23|32 +58|67 + +37,45,96,69,95,88,81,24,52,86,18,55,68,76,61,57,58,23,62,91,54 +97,71,66,28,95,86,18,76,61,14,57 +11,58,62,65,82,76,43 +35,93,66,42,86,45,88,67,96,26,73,71,95,81,24 +64,95,88,81,24,52,86,18,55,68,76,61,14,44,57,58,23,62,91,51,38,65,32 +69,88,81,24,86,18,55,68,76,61,14,44,57,58,23,62,91,54,51,38,65 +54,65,32,92,82,39,43,99,93,73,42,84,26,97,19 +92,46,82,39,43,73,84,67,19,71,96 +65,32,67,99,77,57,39,93,11,51,42,63,91,58,62,38,73 +92,26,93,66,51,39,42 +73,63,35,77,37,19,43,93,26,95,28,66,71,45,67,42,84 +99,93,73,42,84,26,97,71,66,28,37,45,64,24,52 +97,71,66,28,45,96,69,64,95,88,81,24,52,86,18,55,68,14,57 +39,54,92,91,51,11,46,84,77,43,23,73,63,58,62,99,32 +37,95,55,76,58,91,54 +11,44,54,46,62 +26,99,11,97,39,62,32,46,92 +14,44,58,23,54,38,92,39,43,63,77 +99,93,42,84,26,35,97,71,66,37,69,64,95 +61,44,57,23,62,91,51,38,32,92,82,11,39,43,63,93,42 +51,63,93,73,42,84,67,26,97,71,66 +88,81,86,14,23 +18,55,68,76,61,44,57,58,62,91,54,38,65,92,46,82,11,43,63 +93,63,11,23,51,68,76 +38,43,82,77,91,23,14 +42,84,37,45,88,52,55 +44,61,54,62,76,82,92,23,63,57,99,38,32,14,65,93,11 +97,64,96,66,88,86,68,76,28,61,24,37,18,19,69,14,44,71,45,52,35,55,81 +91,38,65,32,92,46,11,39,43,63,99,93,73,77,84,67,19 +91,38,65,46,63,99,84,97,19 +73,63,43,51,99,92,38,82,26,65,84,46,97,93,11,77,42,54,35,19,71 +84,26,64,95,24,86,18 +28,37,44,19,58,76,52,14,96 +55,68,76,61,14,44,57,58,23,91,54,51,65,32,92,82,11,39,43,63,99 +46,82,11,39,43,63,99,93,73,42,77,84,67,26,35,97,71,66,28,37,45,96,69 +35,37,96,64,52,55,44 +37,63,66,84,64,45,26,67,35,88,69,71,28,81,77,42,93,95,99,97,24,96,19 +24,81,19,88,18,37,26,95,45,84,67,28,97,52,66,73,69,86,35 +14,76,95,57,68,86,92,55,51,91,52,61,81,54,65,24,18,58,44,32,23 +65,73,19,43,99,26,92,71,11,67,39,66,84,28,46,93,97,35,32 +45,96,86,76,61,44,58,54,51 +32,92,46,82,11,39,63,99,93,73,42,77,84,67,26,35,97,19,71,66,28,37,45 +69,61,44,62,91,54,65 +91,54,32,99,57,92,65,14,39,46,63,42,43,58,44,82,61,51,93 +92,82,11,63,93,73,42,77,97,19,71,66,37,45,96 +42,26,71,37,45,64,24,52,86,18,55 +82,18,61,62,57,14,46,58,54,24,91,11,86,68,52,92,65,76,23 +39,43,38,71,46,84,99,73,67,77,51,19,35,92,11,97,66,63,65,82,93,32,26 +37,82,42,43,39,64,28 +68,69,71,64,14,96,86,52,28,44,57,95,19,55,18,76,61,88,37,97,66 +54,58,18,52,44,11,39,82,92,76,51,86,14,55,57 +37,45,96,69,95,81,24,52,86,18,68,61,14,44,58,62,91 +84,67,26,35,19,71,66,28,37,45,96,69,64,95,88,81,24,52,86,18,55,68,76 +71,66,28,37,45,69,64,88,81,24,52,86,18,68,76,61,14,44,57,58,23 +77,73,35,28,96,71,43,39,66,95,69,37,84,26,93,19,99 +71,96,66,11,73,37,35,28,97,84,69,39,93,77,43,45,99,63,46 +91,54,51,38,65,32,92,46,82,39,43,99,93,73,42,77,84,67,26,97,19 +68,38,86,32,61,54,44 +92,46,82,11,43,63,99,93,73,42,77,84,67,26,35,97,19,71,66,28,37,45,96 +86,95,96,28,52,26,88,97,69,19,35,55,66,24,45,67,37,76,71 +65,46,82,39,63,42,67,26,35,19,71,66,37 +68,76,14,44,57,58,62,91,54,51,32,92,46,82,43,99,93 +45,64,95,81,52,86,18,55,68,61,23 +69,64,86,55,68,61,44,58,62,38,65 +14,62,91,51,65,46,82,11,77 +39,91,63,46,11,84,82,65,35 +69,64,95,88,81,24,52,86,18,55,68,76,61,14,44,57,58,23,62,54,51,38,65 +92,82,39,93,73,42,77,84,67,97,19,71,66,28,37,45,96 +19,71,66,28,37,45,96,69,64,88,81,24,52,86,18,55,68,76,61,14,44,57,58 +67,19,42,96,18,24,55 +84,67,26,35,97,19,71,66,45,69,24 +32,92,46,82,11,43,99,93,42,84,67,35,19,71,66,28,37 +39,43,99,73,42,77,84,26,97,19,66,28,37,96,64,95,88 +84,91,32,97,73,93,46,19,11,99,39 +93,67,91,39,54 +24,65,86,32,57,55,44 +38,65,46,11,39,42,77,84,28 +11,43,63,99,93,73,77,84,67,35,97,19,71,28,45,96,95 +91,57,39,65,76,46,38,55,58,54,18,44,62,51,86,68,92,14,52,32,82 +81,24,52,68,76,61,14,57,58,23,62,54,38,92,82 +66,63,82,99,97,42,64,11,45,67,37,69,35,71,84,26,93,43,73,96,28 +67,38,46,19,11,99,82,54,63,92,32,91,65,51,73 +96,28,24,26,45,84,88,99,97,67,77,93,69,42,19,64,95 +32,45,39,26,73,37,35 +14,57,58,62,91,54,92,39,43,99,93 +67,26,35,97,19,71,28,45,95,88,81,24,18,55,68 +11,97,66,26,63,93,77,42,39,96,82,69,46 +55,76,61,14,57,58,23,62,54,51,38,65,32,92,46,82,11,39,43,63,99 +35,37,45,19,73,93,63,24,77,88,67,42,66,28,71 +62,32,57,43,63,11,51,82,42,38,61 +73,42,77,84,67,26,35,97,19,71,66,28,37,45,96,64,95,88,81,24,52,86,18 +45,96,77,37,66,84,73,63,99,97,67,39,95 +23,62,82,11,93,67,35 +93,42,51,11,58,54,82 +51,24,14,65,55,44,86,88,57,58,46 +18,55,68,61,14,44,57,23,62,91,54,51,38,65,32,46,82,11,39,43,63 +43,99,93,73,42,35,19,71,66,28,96,64,95,88,81 +43,73,58,65,99,63,38,51,32,67,39,26,42 +61,14,23,46,11,43,99,93,42 +46,82,39,63,99,73,42,77,84,67,26,35,19,71,66,28,45,96,69 +81,24,52,86,55,68,76,61,14,44,57,58,23,62,54,51,38,32,92,46,82 +97,19,71,66,45,88,52,68,57 +69,14,88,24,97,52,96,86,76,45,26,81,35,66,37 +91,69,57,14,88,38,96,23,76,68,64,61,95,58,81,54,55,18,52,86,51 +65,42,39,46,43,77,91,57,58,67,23,38,51 +68,77,19,67,69,37,66 +38,51,76,44,46,68,65,92,32,91,14,61,39,43,55,54,63,82,18,62,57,23,11 +26,35,97,71,28,37,45,69,64,95,88,81,52,86,18,55,68,76,14 +95,81,24,52,86,18,68,76,14,44,57,58,23,62,91,54,51,38,65,32,92 +14,44,51,32,92,46,77 +82,77,84,67,35,28,64 +77,84,45,81,24,18,68 +62,54,51,38,65,32,46,39,43,63,93,84,67,35,97 +95,81,52,55,44,38,92 +88,71,55,28,37,95,97,18,64,35,44 +91,58,61,38,11,32,92,39,65,23,68,76,14,43,82 +91,54,51,38,32,92,46,82,11,63,99,77,84,67,26,35,19 +18,68,14,44,57,23,62,51,65,32,46,82,43 +91,55,69,96,86,62,81,58,44,28,88 +57,81,24,66,96,76,68,97,45,37,55 +96,69,95,24,86,68,76,61,44,57,23,62,91,54,51 +18,86,95,69,52,97,96,28,19,67,81,76,35,45,64 +81,54,46,65,24,76,52,51,55,91,86,68,44,57,18,23,82,38,58,62,92,32,14 +61,14,95,55,37,69,96,81,71,68,18,26,76,88,66,97,52 +84,67,71,66,28,37,45,64,88,68,76 +38,32,19,46,54,63,67,65,26,51,97,39,77,84,42,99,43,82,71,11,35,93,73 +92,46,82,11,39,63,99,73,77,67,35,66,28 +66,28,61,37,58,44,14,71,52,88,68,64,55,18,23,45,95,86,96,57,81 +67,97,91,65,46,54,26,35,62 +32,92,46,99,73,77,26,35,97,19,71,28,45 +86,95,19,77,71,24,66,18,55,68,88,45,67,64,28,37,97 +69,64,95,88,81,24,52,86,18,55,68,76,61,14,44,57,58,23,62,91,54,38,65 +55,61,86,92,46,14,76,39,51,32,44 +88,24,55,52,28,68,45,71,35,64,97,14,26,18,37,76,61 +26,73,63,84,58,32,39,92,54,93,38,42,82,77,67 +37,45,69,64,95,81,24,52,86,18,68,76,61,14,58,23,62,91,54 +44,73,51,93,62,57,38,63,99,54,92,76,58,23,14,32,91 +88,81,18,68,61,44,58,23,62,91,54,51,32,92,46 +76,73,57,99,63,61,91,14,32,93,23,58,65 +84,66,28,64,81,55,76 +44,82,39,93,42 +92,82,39,63,93,42,66 +38,32,82,11,73,77,66 +73,42,84,67,97,64,95,24,18 +73,92,84,91,57,42,39,77,99,58,54,46,23,65,67 +96,64,95,88,81,24,52,86,18,55,68,76,61,14,44,57,58,23,62,91,54,51,38 +99,73,35,71,66,28,37,69,52 +65,92,46,82,39,63,99,93,42,84,19,71,37 +76,71,26,64,86,66,18,95,69,35,28,96,24,37,88,55,81 +11,39,43,63,93,73,42,77,84,26,97,19,71,66,37,45,96,69,95 +55,62,95,96,66,86,61,28,45,58,81 +64,88,18,44,54,65,32 +38,43,77,26,97,71,28 +46,43,93,73,42,19,28,45,69 +18,61,58,54,51,38,65,32,46,82,11 +14,92,82,68,51,76,44,18,32,86,46,55,65,62,52,54,57,39,23,91,58,61,38 +99,93,73,42,77,84,67,26,97,66,28,37,45,69,64,95,24 +26,92,42,67,19,99,43,46,28,66,84,73,71,93,82,35,97,11,63,45,39,77,96 +81,55,44,92,62,52,88,91,24,54,18,58,46,65,61 +84,43,51,39,91,42,99,32,38,23,82,65,11,77,62,73,46 +39,43,63,99,93,73,42,77,67,35,97,19,71,66,28,37,45,96,69,95,88 +42,97,67,52,96,84,35,45,55,77,81,66,86,71,95,37,24,64,69 +38,92,46,82,11,39,63,99,42,97,19 +26,35,71,19,77,92,11,65,42,99,51,43,67,63,73,66,93 +67,26,35,19,66,37,88,81,52,86,55,68,61 +86,68,76,65,92,39,43 +81,24,52,61,18,44,76,96,28,64,37,58,14,57,88,68,45,95,86,91,62,69,23 +52,18,55,68,57,23,65,82,39 +52,91,69,62,51,88,14,24,68,38,55,86,65,64,61,54,18,95,57,81,58 +18,14,64,24,68 +97,37,96,69,76 +26,95,35,77,67,84,71,42,55 +58,43,54,65,18,62,38,39,44,14,68,32,86,76,46,91,11,92,51 +55,14,91,54,11,39,99 +81,45,18,52,37,61,64,95,19,66,58 +82,73,54,92,58,44,43,46,61,57,42 +35,69,88,24,76,14,44 +62,91,54,51,38,65,32,92,46,82,11,39,43,63,93,73,42,77,84,67,26,35,97 +88,76,45,96,28,24,95,18,68,55,61,52,19,67,71,86,37,26,69 +62,54,51,46,82,11,43,63,99,93,73,77,84,67,26 +42,77,84,67,26,35,45,96,52 +23,51,38,65,46,82,11,43,99,93,84,26,35 +64,44,81,58,66,55,61 +84,19,97,26,64,81,28,35,63,99,73,67,93,69,43,88,37,71,95,77,45,66,42 +81,24,52,86,55,68,76,61,14,44,57,58,23,62,91,51,38,32,92,46,82 +24,18,68,44,57,23,62,91,54,51,38,65,92,82,11 +66,28,45,96,69,64,95,88,81,52,86,18,76,14,62 +95,86,88,57,71,61,37,18,66,96,24,81,97 +65,23,42,91,11,82,43,39,62,57,63 +26,24,19,35,81,86,55 +46,28,84,73,11,32,82,63,26,99,43,67,66,38,39,97,42,65,35 +37,96,88,61,14,44,62 +77,84,26,35,97,19,71,66,28,37,45,96,69,64,95,88,81,24,52,86,18,55,68 +81,68,57,23,91,54,82 +18,55,68,44,57,23,62,91,54,51,38,65,32,43,63 +99,93,73,77,26,97,19,71,66,28,37,45,96,64,95,88,81,24,52 +95,73,93,99,19,43,64 diff --git a/5/main.go b/5/main.go new file mode 100644 index 0000000..bbc0631 --- /dev/null +++ b/5/main.go @@ -0,0 +1,109 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "regexp" + "strconv" +) + +func calcScore(s [][]string) int { + result := 0 + for i := range s { + if len(s[i]) % 2 == 0 { + fmt.Println("The following valid update has an even length, so cannot calculate the middle page: ", s[i]) + } else { + middle := (len(s[i]) + 1) / 2 + middlePage, _ := strconv.Atoi(s[i][middle - 1]) + result = result + middlePage + } + } + return result +} + +func isValid(update []string, rules [][]string) bool { + valid := true + for i:=1; i 0 { + rules = append(rules, rule) + } + if len(update) > 0 { + updates = append(updates, update) + } + } + validUpdates := [][]string{} + invalidUpdates := [][]string{} + for i := range updates { + if isValid(updates[i], rules) { + validUpdates = append(validUpdates, updates[i]) + } else { + valid:=makeValid(updates[i], rules) + invalidUpdates = append(invalidUpdates, valid) + } + } + validScore := calcScore(validUpdates) + fmt.Println("Score of valid updates: ", validScore) + invalidScore := calcScore(invalidUpdates) + fmt.Println(invalidScore) +} diff --git a/5/main.go.BAK b/5/main.go.BAK new file mode 100644 index 0000000..742069f --- /dev/null +++ b/5/main.go.BAK @@ -0,0 +1,80 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "regexp" + "strconv" +) + +func calcScore(s [][]string) int { + result := 0 + for i := range s { + if len(s[i]) % 2 == 0 { + fmt.Println("The following valid update has an even length, so cannot calculate the middle page: ", s[i]) + } else { + middle := (len(s[i]) + 1) / 2 + middlePage, _ := strconv.Atoi(s[i][middle - 1]) + result = result + middlePage + } + } + return result +} + +func main() { + file, _ := os.Open("test") + defer file.Close() + scanner := bufio.NewScanner(file) + rule := regexp.MustCompile(`[0-9]+\|[0-9]+`) + update := regexp.MustCompile(`^(\d+(,\d+)*)$`) + rules := []string{} + updates := []string{} + for scanner.Scan() { + line := scanner.Text() + ruleMatches := rule.FindAllString(line, -1) + updateMatches := update.FindAllString(line, -1) + rules = append(rules, ruleMatches...) + updates = append(updates, updateMatches...) + } +// fmt.Println("Rules: ", rules[0]) +// fmt.Println("Updates: ", updates[0]) + number := regexp.MustCompile(`[0-9]+`) + validUpdates := [][]string{} + invalidUpdates := [][]string{} + for i := range updates { //FOR EACH UPDATE + validUpdate := true + updateNumbers := number.FindAllString(updates[i], -1) + for j:=1; j0 { + for j:=1;j<=prepend;j++ { + combinationSSlice = append([]string{"0"}, combinationSSlice...) + } + } + combinationISlice := []int{} + for j:=range combinationSSlice { + combinationInt, _ := strconv.Atoi(combinationSSlice[j]) + combinationISlice = append(combinationISlice, combinationInt) + } + combinations = append(combinations, combinationISlice) + } + return combinations +} + +func calcResult(tillnow, next, operator int) int { + if operator == 0 { + return tillnow + next + } else if operator == 1 { + return tillnow * next + } else { + // find number of digits + digits := 0 + helper := next + for helper > 0 { + helper = helper/10 + digits++ + } + return tillnow*int(math.Pow(10,float64(digits)))+next + } +} + +func main() { + file, _ := os.Open("test") + defer file.Close() + scanner := bufio.NewScanner(file) + regexNumber := regexp.MustCompile(`[0-9]+`) + equations := [][]int{} + randomOperators := [][][]int{} // []equation []operators []operator + for scanner.Scan() { + line := scanner.Text() + equationStrings := regexNumber.FindAllString(line, -1) + equationInts := []int{} + for i := range equationStrings { + equationInt, _ := strconv.Atoi(equationStrings[i]) + equationInts = append(equationInts, equationInt) + } + equations = append(equations, equationInts) + randomOperators = append(randomOperators,randomOperator(equationInts)) + } + result := 0 + for i := range equations { // for each equation + for j := range randomOperators[i] { // for each random operator corresponding to the equation + calculations := equations[i][1] + for k:=2;k= 0 && antinode1[1] >= 0 && antinode1[0] < len(layout) && antinode1[1] < len(layout)) { + antinode1 = []int{} + } + if ! (antinode2[0] >= 0 && antinode2[1] >= 0 && antinode2[0] < len(layout) && antinode2[1] < len(layout)) { + antinode2 = []int{} + } + if len(antinode1) > 0 { + antinodes = append(antinodes, antinode1) + } + if len(antinode2) >0 { + antinodes = append(antinodes, antinode2) + } + } + return antinodes +} + +func main() { +// file, _ := os.Open("test") + file, _ := os.Open("input") + defer file.Close() + scanner := bufio.NewScanner(file) + regexAntenna := regexp.MustCompile(`[^.]`) + antennas := []string{} + layout := [][]string{} + for scanner.Scan() { + line := scanner.Text() + layout = append(layout, strings.Split(line, "")) +// //fmt.Println(line) + foundAntennas := regexAntenna.FindAllString(line, -1) + if len(foundAntennas) > 0 { + antennas = append(antennas, foundAntennas...) + } + } + antennaMap := make(map[string][][]int) + for _, antenna := range antennas { +// //fmt.Println(antenna) + key := antenna + antennaMap[key] = findAntennas(layout,antenna) + } + //fmt.Println(antennaMap) + antinodelist := [][]int{} + for _,v := range antennaMap { + //fmt.Println("key: ", k, "value: ", v) + for i:=0;ii { + //fmt.Println(v[i],v[j]) + antinodes := calcAntiNodes(layout, v[i], v[j]) + antinodelist = append(antinodelist, antinodes...) + } + } + } + } + //fmt.Println(antinodelist) + antinodeMap := make(map[[2]int]int) + for i := range antinodelist { + if len(antinodelist[i]) > 0 { + key := [2]int{antinodelist[i][0], antinodelist[i][1]} + antinodeMap[key]++ + } + } + fmt.Println(len(antinodeMap)) +} + diff --git a/8/temp b/8/temp new file mode 100644 index 0000000..e69de29 diff --git a/8/test b/8/test new file mode 100644 index 0000000..78a1e91 --- /dev/null +++ b/8/test @@ -0,0 +1,12 @@ +............ +........0... +.....0...... +.......0.... +....0....... +......A..... +............ +............ +........A... +.........A.. +............ +............ diff --git a/test/main.go b/test/main.go new file mode 100644 index 0000000..883b0b7 --- /dev/null +++ b/test/main.go @@ -0,0 +1,17 @@ +package main + +import "fmt" + +func main() { + // Initialize the variable before the loop + value := 0 + + for i := 0; i < 5; i++ { + // Change its value within the loop + value += i + fmt.Println("Current Value:", value) // Use the variable here + } + + fmt.Println("Final Value:", value) // Still accessible after the loop +} +