diff --git a/2020/04.py b/2020/04.py index ba7eb70..851ff5f 100644 --- a/2020/04.py +++ b/2020/04.py @@ -51,10 +51,10 @@ for one_item in working_list: if one_item['ecl'] in ['amb', 'blu', 'brn', 'gry', 'grn','hzl', 'oth']: test_check += 1 test_str = test_str + "eye|" - if set('0123456789').issubset(one_item['pid']) and len(one_item['pid']) == 9: + if len(one_item['pid']) == 9: test_check += 1 test_str = test_str + "passport|" - if test_check == 8: + if test_check == 7: valid_count += 1 print(test_check) print(test_str) diff --git a/2021/03.input b/2021/03.input index 2995822..278fd9c 100644 --- a/2021/03.input +++ b/2021/03.input @@ -1,1000 +1,601 @@ -010101110000 -010011000110 -010101000011 -111100100001 -011100110101 -110001010101 -001111110101 -101100011100 -010111111011 -101010111101 -101000001110 -001000100001 -000100011110 -100011000100 -101100100001 -101010111010 -111000001011 -101101001011 -000010010110 -110111100111 -111101011110 -100100010010 -110001011110 -010011101000 -111110000110 -110001011111 -001001010110 -110111100100 -100111000101 -110011110000 -000110000010 -010001100001 -111110111011 -100010101011 -000000010101 -100010101110 -100110100111 -100111101111 -110011110001 -001000111100 -001101010010 -111101011101 -011000110001 -111111011010 -011000000000 -100000111001 -011110101100 -011101010111 -011001111110 -011100101101 -101100010011 -001100110000 -110101101100 -110110001100 -000101101110 -001010110010 -111110110110 -111010010011 -100010111111 -001001001000 -110111001011 -010110000010 -100000000100 -100001010010 -110010011101 -000001011011 -000100010100 -101011000001 -011101110111 -001100010100 -101000010110 -111111001100 -110011001011 -110000000000 -010100110101 -001111100011 -100011010010 -100111100011 -110101001010 -011111011000 -001010100110 -010101010100 -110111011111 -001001010000 -001011010101 -101111011011 -101001101000 -000011101110 -000101110010 -100011001010 -011001010010 -100100110011 -010010011100 -001100100110 -100111110111 -000111111000 -100000001101 -001111010101 -000001001111 -000101100000 -000101001111 -101010001001 -111011110001 -000111100011 -110011000010 -110011111101 -101001010110 -101111111000 -000110100010 -101111010001 -010011110001 -111110010010 -101111011101 -101110111101 -010001011111 -101110011010 -001110001100 -000110011001 -000101000101 -101010111011 -110010101100 -000100101101 -010111011111 -111001010110 -000010100100 -100000111100 -101101110001 -100001111010 -000111010010 -111100000110 -010010000000 -010001001011 -111101010000 -010011111110 -111011101011 -110110100110 -100001000011 -010010000110 -010000000001 -000001000101 -011010100000 -001011011000 -110101010001 -011000111110 -010011101101 -010011000011 -011010011101 -001101110100 -010001100101 -111011100011 -010111101000 -111100000010 -010000110000 -000100111001 -010010110100 -000101110110 -000011001110 -111010111100 -100101010001 -111011000101 -011111101100 -000110010001 -100011101111 -100101001110 -101101110010 -000000011010 -000001101000 -010110011000 -110100001001 -111111101100 -011010110001 -011100111101 -001101010110 -100111000111 -000000001111 -001110101010 -101000011001 -000111010111 -100110110001 -100011000011 -110111101011 -000110111001 -000010010011 -010111011001 -000111001000 -100011011010 -011101000100 -101010010100 -010111110000 -011011100111 -000001110001 -000100111000 -111100001011 -100101010000 -000110110100 -110011110111 -111000010111 -101110011000 -110011010000 -001111000100 -111010001001 -110001111000 -011101011111 -000001001100 -110100111011 -110001011011 -001010000100 -110011101110 -101100100100 -100101100001 -001010001010 -101010001000 -000110101001 -001100010000 -110001000101 -000100111110 -000110100111 -100010001010 -100100010110 -010001110011 -101111010010 -100000001001 -000110110000 -100010011011 -111101000001 -101111111011 -111111100110 -101001101010 -000011111011 -110000000011 -000001111010 -001001000100 -101110001101 -100111011111 -110101101110 -100011011011 -101000010001 -101001111000 -111101110010 -000101000011 -100100010100 -010101111101 -100110001011 -010011010111 -110111100101 -110010010101 -100010101101 -100110000110 -001101000001 -111001001000 -010111010011 -000110001111 -010101011010 -000000001000 -001001100100 -101111111001 -001110101000 -000110100100 -001111101111 -010100011000 -010000110110 -011101101110 -010100100100 -111110010101 -101100000110 -011010110000 -001001011101 -000000000101 -100101111001 -110101110110 -100111101010 -010010101101 -010100001111 -111111111110 -011111000000 -000001101111 -011001011001 -001101101000 -011010110110 -100101000110 -110001101110 -110100101011 -010001110100 -011110110101 -010001010001 -110110101000 -010000100011 -010101011001 -101111111010 -000011110010 -001000011101 -110001100010 -110110000011 -010000111011 -111010010000 -011001001000 -000111011010 -011111111100 -111001111100 -001101000100 -101110001011 -101110000111 -011010111111 -110011100111 -001101110010 -011111101111 -001110000110 -010111100001 -110100101001 -101010110010 -111011010100 -101001110010 -101101000100 -100111010001 -000011010110 -100110000100 -101000101010 -000000001010 -110100111010 -110010011010 -100110010100 -011101110010 -000111111010 -001000101001 -110100110010 -100100111011 -011001010111 -111000101010 -011001011011 -011010000000 -001101101110 -101010111000 -101010011000 -011000010101 -111001011010 -100111111111 -001101001100 -111011011010 -110110100011 -111010010100 -000110011101 -011100010011 -011111100111 -010110100000 -001100001000 -000110000110 -000101011011 -101011101011 -111101111110 -111111110000 -101101001100 -011000110110 -100111001000 -011011111100 -001111011110 -111011100100 -000101010010 -100011011000 -100000100110 -100000110011 -011000010110 -001010110100 -100111100010 -011110101011 -110111111010 -011100110110 -100100000000 -011010101101 -001101000010 -010110010111 -100010011100 -111101010101 -011011010111 -000000000110 -101001100000 -010100110011 -010101111111 -101110111001 -101101111000 -101110101000 -011011111110 -010001101010 -001000101010 -111100111111 -001011011110 -101010101001 -011111001010 -001001001111 -101000101101 -001111011000 -000100001101 -101101011000 -001100000100 -001000111101 -000001110100 -111101011111 -111010000010 -101111011111 -001100110101 -101010110001 -001110111010 -010010111110 -101101010011 -100001100110 -110010010001 -111100111001 -000100010001 -110010101010 -111010110101 -000001010110 -000111110110 -111010101100 -011110001100 -010110001001 -010111100011 -001010111000 -100111100111 -110110011001 -010100000000 -001011001111 -110010110000 -100011001111 -100111111011 -110001001001 -000100101111 -011010011011 -001001111101 -111110001100 -101111110010 -101100101110 -100110111001 -111010110011 -110010011110 -001111001101 -010011100111 -000111000011 -101101000000 -000001100101 -011101111001 -110100100110 -000110000001 -110111011101 -011100000110 -001011110100 -010001011011 -110000011110 -110001001011 -110100000001 -011010010100 -010010000101 -001010110111 -110001001111 -101100000001 -010000000000 -101110010001 -001100101110 -010000011010 -010100101011 -011010101100 -111101011011 -110111010000 -111111101111 -111011111011 -110001110111 -011100100011 -100001110101 -100111011001 -100110010000 -100110101110 -110101100001 -001010001101 -011101101000 -110001001110 -110010111011 -111100110100 -101011100011 -010100100101 -010001101111 -111000110101 -001000101011 -101101000101 -011000100111 -001111000011 -011000000011 -000011001111 -001010011111 -101001100010 -101010100001 -001001110010 -101010000111 -010111011010 -110101110111 -000110101111 -000110010011 -010110110010 -100111001011 -001100111111 -111110000001 -110110111000 -101010000100 -011100101010 -001000010101 -010010011001 -011111000110 -010011010011 -001011101101 -001001110100 -110101011100 -011000110100 -010101101000 -100000100000 -011011111010 -011010011111 -111011011101 -001111101110 -001000110101 -010001011100 -110101100010 -001100100100 -001100101011 -100110111000 -001100101101 -101000001011 -001100010101 -001100011010 -101011010101 -110101011111 -101111001011 -000010001111 -011110001111 -110000000100 -000110100001 -010010101111 -110000000110 -010011000000 -011001000101 -001101011010 -000011001101 -110100101010 -111001010111 -010011010101 -111010100101 -111110110101 -111110011100 -110010000110 -000110100011 -001000111000 -000101101100 -101110001010 -010010010110 -100001110111 -111010100010 -110110010111 -101000011000 -100100111010 -001000011011 -111101101011 -101001010111 -100110000011 -100001010001 -011011000001 -010110010101 -110001010000 -001110000000 -111001001110 -011011101100 -000100001111 -111000110011 -111101101101 -100110000000 -100011110110 -001000000010 -110011011000 -111000100110 -100110110000 -010011101010 -111011001010 -001101111000 -001100000111 -001110011110 -100001000100 -000010000111 -011010101001 -111110001001 -110110000010 -011011101101 -110001111010 -011001101110 -010011000010 -100101110100 -101000100001 -000111011101 -101100001011 -100000011010 -111001001001 -100000000001 -000101111001 -100101101101 -111001101111 -001011011011 -000010101000 -001010111010 -000100100011 -001110101101 -100000111000 -110110001110 -000111101101 -001010001111 -011000111011 -100000100100 -100011010110 -000010000000 -001000001101 -010001001110 -000111111011 -100110000001 -110010111000 -111100111100 -001000001100 -000010110100 -011010001110 -110001110101 -001100000101 -100010110100 -111000000010 -110100100101 -010010111011 -010110011001 -001001101100 -001010101010 -100001011100 -010001101001 -000000010010 -000101111010 -011000101011 -111111010101 -011110101111 -011110011001 -001101101101 -111110101110 -101111110100 -010101001111 -010010011101 -000110101100 -011100000011 -100011101001 -101101100111 -110011101100 -000110111010 -000011001000 -111101010011 -011011101110 -111101001100 -100100101111 -111010110111 -000001100110 -110100110101 -110100001011 -111010000001 -001011110011 -001010110101 -100001100000 -101000101100 -011011100001 -000011011011 -100101110001 -101100111100 -010000111110 -010100101101 -001111011111 -110101010000 -000110010100 -001001011011 -110111111011 -111100010110 -110000101011 -111001000100 -000100000111 -001011001110 -011110100010 -011011110101 -001100011001 -111010011111 -011011110110 -111101000000 -101111110000 -011100111000 -010010011011 -101000110010 -001101101111 -010001000011 -001010010110 -101000010010 -110111001111 -011111010101 -111111011001 -100011110011 -110001100100 -100000010100 -001111011010 -111001111000 -110101001011 -101000110001 -111001111111 -110000010111 -000000100100 -101011101110 -111001110111 -001110011010 -110011101000 -001011100100 -011001011111 -010100010101 -011111111010 -010010110000 -100011101110 -000011000110 -001001010111 -010111110100 -010110110101 -010000101000 -101010101010 -000100100010 -000110011000 -101010110101 -100000100001 -101100010010 -010110000110 -011011010011 -000001010010 -011101111110 -100010000100 -000100101110 -010110010001 -101100011011 -010111010000 -101100011111 -010011001010 -100010100000 -001001101001 -110010011001 -111000110100 -111111010000 -111100101110 -101010001010 -111111100100 -011110001110 -101100001111 -001010001100 -110100100011 -011100010101 -110001011000 -000010100001 -011000011110 -000000101101 -000011101101 -111010011000 -000101110100 -111100011010 -101100010110 -100001101011 -110100110100 -101100111010 -010000011110 -101001100011 -000101110001 -001101111111 -111101000101 -100101111101 -001101011110 -011111101011 -100000010101 -011010000001 -011000011101 -110101011110 -111010101000 -110111111100 -101111110011 -101101001001 -000111101001 -010110000011 -110011000000 -000001111101 -001011101000 -001001111011 -110110000111 -101100010101 -101100100111 -000010110001 -110000111011 -110111001000 -010010111111 -100010110000 -010000111100 -101001000111 -010100001100 -001111001010 -010100101010 -100001000010 -010011101111 -100011000001 -110000001101 -011001011110 -100111111001 -001100111101 -010110100110 -001000011001 -101000111110 -000100001011 -111110100111 -011100111001 -100011111001 -100001100001 -110110001011 -110011101111 -011010111011 -110101010110 -010111101001 -111110000011 -111100000111 -011111100100 -101001000001 -110111010100 -000011000000 -000100111101 -001100010011 -100000010011 -010010001001 -010111000100 -110110010100 -011100101110 -110110100010 -100111010111 -001111010011 -000110110110 -000010000110 -110100010001 -010100111101 -011001000110 -101011010100 -001110001101 -101111110101 -110011001010 -110100011100 -001101011000 -100101101110 -000001000111 -111001101011 -101011000010 -001001011111 -111000111010 -111011100110 -001001011100 -000010011000 -000101001001 -100110001111 -010100100010 -001101000101 -010111111100 -100010000001 -110101101111 -100010101010 -110110010001 -011101000111 -011110001010 -100110011110 -010011100100 -110101110100 -000000110010 -001111101100 -010011010010 -010000100000 -110001000100 -110110111111 -011100001111 -110110001101 -111110000010 -010001110010 -001101110101 -111111101101 -010101101101 -001011011100 -001011000001 -001011011101 -010001100010 -011110110011 -000101101011 -000110111000 -101101110000 -101011011001 -001001001110 -000001000000 -101011010010 -101110010111 -110011100001 -001011101001 -000000100001 -010000100110 -101111010000 -011000011100 -100011100110 -110111110011 -110010000100 -101110000000 -110010101101 -011101111000 -001111000110 -101001011100 -011111001111 -111011101010 -001110101110 -101001000011 -111101101111 -111001110101 -000110100110 -111111011011 -101011011011 -111100101101 -111111010100 -101010010000 -101000110011 -011110100000 -010100101001 -010011100011 -101000111001 -101100000111 -101010100010 -101110011111 -111011011110 -110011011001 -101001101101 -110010001011 -010100101000 -001010011010 -001100000000 -110000010000 -000110111011 -011101111111 -011001001001 -011011001001 -000100101001 -110010010010 -000110001001 -001000100011 -101011101111 -100111110010 -110010101011 -000000110110 -010111001101 -100100001111 -100010001011 -011101100100 -000011111000 -010100111011 -010101101100 -100110100110 -110100101110 -010111111001 -010010011110 -111110000100 -000110001101 -100100100001 -111011010111 -101001010101 -111011010010 -101001000000 -100111101100 -101010110000 -000111001101 -000100100110 -100100101000 -111000011001 -000110110101 -111010000011 -101100110001 -000001011000 -001110110011 -101000100110 -100110100101 -010001000111 -100011010001 -010100011101 -110100110110 -100010100110 -101100010001 -010011000100 -100100010101 -110000101101 -010101001100 -100011100100 -001111010100 -100111001001 -110000100000 -100100010111 -010101000010 -101101001010 -110101111101 -010100000110 -011101100110 -011011010010 \ No newline at end of file +6,69,28,50,36,84,49,13,48,90,1,33,71,0,94,59,53,58,60,96,30,34,29,91,11,41,77,95,17,80,85,93,7,9,74,89,18,25,26,8,87,38,68,5,12,43,27,46,62,73,16,55,22,4,65,76,54,52,83,10,21,67,15,47,45,40,35,66,79,51,75,39,64,24,37,72,3,44,82,32,78,63,57,2,86,31,19,92,14,97,20,56,88,81,70,61,42,99,23,98 + +22 59 7 10 6 +33 36 96 55 23 +13 85 18 29 28 +75 46 83 73 58 +34 40 87 56 98 + +73 96 47 14 10 +28 11 79 84 20 +74 30 0 59 71 +80 93 42 22 17 +44 2 81 29 15 + +73 32 37 93 39 + 2 87 38 99 97 +15 12 42 49 33 + 9 23 25 94 19 +57 4 18 70 79 + +43 79 59 71 78 +51 97 37 28 26 +46 21 84 8 86 +96 30 17 34 49 +55 90 99 75 61 + +43 86 35 51 24 +16 25 29 21 3 + 2 13 4 36 54 +89 27 8 85 34 +96 59 65 14 56 + + 5 57 43 4 1 +86 80 67 30 20 +22 16 99 0 14 +40 25 59 91 54 +82 95 96 37 24 + +97 20 87 66 21 +25 40 9 78 89 +52 75 95 63 62 +32 43 13 47 69 +53 48 56 29 4 + +24 4 65 12 8 +76 3 81 99 49 +45 33 31 66 34 +17 94 75 35 88 +64 10 7 93 95 + +88 20 99 15 83 +81 40 5 6 98 +49 74 18 27 9 +43 69 28 37 71 +87 82 90 14 47 + +21 97 92 42 60 +11 65 98 95 29 + 2 49 75 20 74 +56 40 78 66 81 +68 4 46 77 61 + +26 14 39 76 11 +41 74 34 91 4 +51 9 97 29 75 +83 86 23 35 77 +90 2 49 30 89 + +34 97 0 22 15 +65 60 82 66 47 +30 9 49 95 48 +54 73 67 17 78 +33 96 44 1 32 + +90 29 10 49 63 + 8 26 95 61 0 +54 13 51 12 44 +32 48 16 47 84 +55 46 93 14 3 + +68 55 46 16 54 +97 59 49 6 21 +52 32 15 96 70 +57 56 61 51 0 +40 31 62 24 48 + +75 56 70 42 14 +77 9 23 62 25 +29 27 54 17 2 +55 72 43 15 96 +45 30 88 86 1 + +65 12 22 6 51 +77 81 15 91 19 +80 71 27 89 52 +75 92 41 83 57 +40 44 66 84 98 + +89 80 73 59 18 +74 55 67 71 10 +78 27 37 57 3 +92 26 17 5 72 +52 83 28 76 51 + +64 0 87 4 13 +14 43 42 62 31 +17 84 72 91 83 +53 80 59 61 74 +47 22 38 28 77 + +65 49 91 94 19 +25 81 64 57 9 +50 95 82 12 66 +53 54 85 36 11 +31 56 83 18 60 + + 6 12 76 37 33 +14 96 16 31 40 +17 82 27 94 83 + 1 50 49 9 54 +29 70 59 91 77 + +85 0 33 41 16 + 7 86 80 53 65 +94 19 28 35 32 + 4 55 93 97 63 +83 22 67 56 36 + +28 70 65 17 19 +88 51 15 73 12 +11 49 80 23 42 +26 54 90 75 29 +74 77 91 86 66 + +88 22 83 10 43 +57 34 15 23 8 +94 42 68 67 37 +84 3 6 71 62 +89 45 72 55 38 + +68 27 93 7 15 +85 96 1 56 6 +32 2 30 55 17 +99 90 37 80 50 +77 78 58 98 57 + + 5 95 22 13 97 +19 2 52 92 20 +75 49 86 31 41 +51 63 56 33 10 +82 27 79 94 57 + +15 44 91 26 4 +41 78 53 95 86 +90 92 46 56 33 +80 93 68 66 70 +36 10 38 0 6 + +11 47 52 64 17 +16 60 39 55 78 +46 18 33 83 35 +13 92 4 23 50 +40 5 29 6 90 + +20 60 2 23 74 +43 39 91 75 12 +58 67 50 29 79 +10 40 92 95 25 +13 24 53 72 36 + +69 64 15 53 86 +61 11 48 71 27 +26 93 38 70 73 +96 29 30 98 45 +13 7 31 59 84 + +13 55 50 54 57 +32 24 45 5 77 +82 86 0 4 99 +75 72 14 40 56 +76 94 89 17 30 + +66 71 86 41 0 +80 64 3 29 78 +23 21 42 99 87 +96 60 75 61 49 + 2 83 85 12 1 + +78 96 4 82 6 +73 36 57 99 8 +11 83 15 35 30 +85 87 25 22 66 +32 64 16 50 43 + + 6 39 55 2 4 + 1 61 99 71 80 +46 88 22 31 60 +62 66 37 97 76 +74 34 10 52 24 + +42 38 13 65 12 + 4 39 60 62 21 +81 99 1 69 40 +59 15 11 95 53 +91 78 72 30 73 + +43 68 82 72 2 +34 92 33 97 89 +63 70 9 0 45 +69 10 12 65 21 +40 20 55 57 49 + +41 22 8 16 49 +71 64 19 65 92 +17 10 26 36 29 +30 88 7 54 11 +77 55 70 72 47 + +15 94 90 6 39 +99 55 16 54 91 +18 7 82 44 51 +25 34 83 14 12 +30 2 77 27 66 + +44 50 74 97 58 +87 42 56 92 28 +49 82 52 17 78 +54 89 63 77 27 +83 14 24 16 84 + +47 32 8 55 22 +19 14 24 82 4 +76 73 9 10 64 +40 6 92 67 17 +68 44 43 3 54 + +26 10 9 92 81 +46 98 13 0 14 +68 99 35 18 72 +74 33 22 61 93 +80 38 71 6 75 + +17 23 54 55 22 +10 8 60 76 24 +71 28 16 62 82 +13 12 21 78 39 +26 66 89 64 79 + +72 12 91 79 99 +84 18 37 98 41 +10 71 88 23 24 +11 34 26 83 74 +58 27 77 5 8 + + 9 90 13 0 46 + 6 58 74 92 8 +75 77 56 76 80 +55 60 44 68 91 +67 28 96 66 18 + +14 26 54 21 35 +69 67 16 76 62 +78 45 87 44 94 +27 89 39 85 28 + 3 81 93 64 74 + +10 28 35 84 76 +40 11 95 59 57 +53 4 24 50 45 + 7 43 78 17 81 + 1 74 82 16 27 + + 6 26 72 53 52 +51 91 80 11 18 +20 63 74 25 33 +79 4 8 59 67 + 3 13 55 81 83 + +98 85 27 84 42 +90 15 17 61 34 +40 64 86 96 45 +59 47 53 5 35 +11 7 41 80 13 + +47 48 54 31 76 +99 32 98 20 15 +61 41 30 94 37 +34 59 86 55 45 + 9 83 92 53 3 + + 3 80 24 94 25 +17 23 64 76 71 +20 97 0 56 72 +95 73 28 59 21 +14 81 46 67 88 + + 2 95 5 38 90 +63 62 11 24 34 +19 31 57 84 80 +47 86 36 85 74 +13 39 73 94 42 + +28 6 60 34 15 +63 36 51 30 92 +43 10 7 88 49 +78 76 31 19 66 +22 20 35 45 79 + +19 42 49 57 73 +99 50 97 93 43 +67 52 40 16 33 + 2 55 0 71 46 +21 75 59 66 83 + +19 86 30 25 3 +32 39 65 54 29 +38 6 85 52 13 +43 95 18 44 15 +53 70 16 31 71 + +68 73 74 83 70 +56 15 12 78 4 +43 87 63 90 86 +41 16 23 17 77 +80 14 61 30 50 + +88 28 45 80 65 +64 11 68 33 27 +29 70 44 82 37 +42 66 9 32 87 +10 24 15 3 46 + +99 81 5 62 97 + 4 36 23 38 35 +42 16 37 98 54 +34 41 25 30 48 + 8 60 63 89 72 + +25 33 94 23 14 +45 10 79 30 3 +22 28 95 27 11 +74 13 39 84 83 +72 88 56 53 97 + +31 92 91 84 71 +54 90 89 80 0 +98 96 65 66 68 +35 39 70 11 82 +15 34 42 52 2 + +68 71 86 82 37 +28 48 12 34 54 +62 55 10 25 89 +60 4 50 21 22 + 3 2 18 40 84 + +18 96 95 47 45 +14 51 2 88 43 +94 56 19 15 8 +48 65 62 6 75 +35 28 25 72 30 + +43 85 69 92 26 +61 75 5 73 66 +16 87 4 99 48 +18 19 79 23 83 +37 88 31 38 40 + +23 10 89 84 76 +45 39 62 55 66 +25 73 79 43 60 +12 69 36 93 71 + 9 77 14 58 49 + + 9 24 26 53 79 +99 15 30 50 16 +14 95 12 25 33 +54 40 58 46 66 + 5 23 39 29 48 + +64 67 11 10 92 +59 99 80 97 66 +45 51 88 47 82 +35 27 72 85 16 +54 58 2 1 52 + +10 97 27 54 66 +89 85 39 99 98 + 8 68 95 51 19 + 4 17 79 87 3 +72 43 76 58 33 + +95 72 0 18 17 + 3 42 24 86 34 +52 79 46 58 98 +76 77 78 19 10 +81 61 88 85 54 + +74 70 15 80 72 +77 89 11 19 22 +34 59 56 65 91 +58 6 50 40 16 +93 30 95 26 85 + +47 62 57 6 25 +40 79 22 95 29 +42 11 70 10 92 +60 53 84 96 17 +75 86 74 89 18 + +30 42 4 19 92 +40 58 72 7 70 +17 98 45 76 50 +93 57 65 79 2 +56 94 73 84 62 + +51 0 14 7 53 +63 36 48 81 84 +50 22 11 88 6 +83 99 21 31 91 +86 17 72 42 94 + +83 0 20 26 7 +42 24 37 86 65 +73 82 63 21 27 +30 35 9 47 80 +79 53 3 14 84 + +50 99 83 86 42 +81 36 24 4 76 + 0 71 66 41 57 + 7 54 94 78 97 +12 8 82 45 31 + + 4 91 57 50 37 +22 46 86 24 26 +39 54 48 7 42 + 2 45 95 29 12 +38 25 52 0 72 + +51 94 46 44 62 +95 60 0 48 61 +38 13 85 32 8 +22 56 53 30 80 +43 65 58 68 88 + +49 76 41 43 51 +57 46 45 82 90 +48 33 36 5 23 +81 30 3 61 75 +56 70 29 91 59 + +58 74 50 47 84 + 2 1 62 36 60 +32 16 95 43 27 +79 12 39 56 11 + 9 33 4 25 61 + +23 84 16 51 39 +72 19 53 64 43 + 9 44 10 52 26 +45 68 29 56 74 +62 42 46 95 0 + +16 83 27 85 56 +13 41 49 79 53 +18 63 7 60 3 +45 15 48 69 29 +46 86 35 34 32 + +85 2 96 15 43 +33 30 29 53 98 +21 55 61 73 40 +31 4 66 75 59 +26 32 91 38 80 + +69 81 65 30 77 +82 22 83 0 38 + 2 3 29 47 94 +42 55 9 18 97 +53 45 90 31 44 + +23 86 0 35 84 +27 80 3 64 12 + 1 96 48 93 85 +69 24 61 15 22 +91 72 62 13 76 + +81 51 67 60 16 +65 48 86 39 97 +92 93 49 77 59 +15 94 88 52 19 +80 83 23 61 4 + +47 84 46 79 55 +92 38 65 42 76 + 9 58 26 95 86 +30 49 56 69 59 +94 4 25 89 44 + +73 10 29 0 48 +56 40 19 84 61 +52 31 25 86 21 +79 55 53 51 5 +81 9 35 72 15 + +41 95 30 58 73 +26 80 4 21 96 +61 92 76 93 74 + 2 69 60 8 20 +46 98 70 72 83 + + 1 99 31 4 86 +93 64 8 43 61 +33 36 75 90 50 +52 13 3 42 34 +22 65 60 18 76 + +17 63 6 66 92 +51 67 86 88 18 +82 83 32 74 30 + 5 33 9 28 61 +72 75 25 23 60 + +43 28 40 53 52 +54 12 77 10 83 +21 44 63 0 1 +15 22 33 49 2 +80 41 3 46 55 + + 1 97 75 37 4 +47 33 13 21 40 +27 62 15 90 30 +11 83 63 36 35 + 0 12 60 91 42 + + 0 45 17 88 18 +66 10 63 62 8 +36 5 47 39 67 +21 3 61 29 19 +82 58 33 6 59 + +37 92 69 56 52 +46 66 20 78 13 +83 99 16 31 0 +36 35 2 68 9 +70 82 94 96 29 + +62 65 85 37 3 +74 95 34 96 58 +15 33 49 21 93 +19 83 66 6 25 +81 84 23 0 76 + +95 84 71 92 52 +54 36 66 59 82 + 0 76 32 45 83 +69 27 25 88 38 +81 96 63 4 61 + +73 51 28 48 40 + 3 38 11 14 35 +66 91 86 20 81 +53 39 46 71 1 +97 60 21 93 23 + +92 70 4 60 95 +58 49 20 15 25 +55 68 21 84 80 +56 41 82 23 19 +30 74 65 27 29 + +81 97 68 46 75 +62 73 63 36 41 + 1 5 91 84 37 +45 92 20 49 7 +25 26 3 88 56 + +25 9 94 37 26 +44 58 84 91 38 +39 46 57 98 50 +96 42 73 24 70 +71 32 53 48 13 + +98 72 25 96 77 +80 64 88 53 23 +21 37 45 24 18 +41 86 59 68 5 +76 50 36 26 12 + +77 79 88 74 12 +21 9 85 26 68 +11 62 64 4 5 +47 33 76 63 87 +55 19 2 60 95 + +74 79 30 14 35 +90 52 17 29 63 +18 69 78 34 26 +92 42 85 71 56 +12 2 5 0 98 \ No newline at end of file diff --git a/2021/04-1.py b/2021/04-1.py new file mode 100644 index 0000000..c404dfb --- /dev/null +++ b/2021/04-1.py @@ -0,0 +1,49 @@ +class Board: + def __init__(self, board): + self.board = board + self.width = len(self.board[0]) + self.height = len(self.board) + self.matches = [[False] * self.width for _ in range(self.height)] + self.last_number = 0 + + def check_number(self, number): + self.last_number = number + for i in range(self.width): + for j in range(self.height): + if self.board[i][j] == number: + self.matches[i][j] = True + + def check_win(self): + return (any(all(row) for row in self.matches) or + any(all(col) for col in zip(*self.matches))) + + def sum_score(self): + match_sum = 0 + for i in range(self.width): + for j in range(self.height): + if not self.matches[i][j]: + match_sum += int(self.board[i][j]) + return match_sum + + +with open('2021/04.input') as f: + numbers, *boards = f.read().rstrip().split('\n\n') + +numbers = [int(num) for num in numbers.split(',')] + +boards = [[line.split() for line in board.split('\n')] for board in boards] +boards = [[[int(elt) for elt in line] for line in board] for board in boards] +boards = [Board(board) for board in boards] + +winners = [] +for number in numbers: + for i in range(len(boards) - 1, -1, -1): + boards[i].check_number(number) + if boards[i].check_win(): + winners.append(boards[i]) + boards.pop(i) + +first = winners[0] +last = winners[-1] +print(first.sum_score() * first.last_number) +print(last.sum_score() * last.last_number) \ No newline at end of file diff --git a/2021/04.input b/2021/04.input new file mode 100644 index 0000000..278fd9c --- /dev/null +++ b/2021/04.input @@ -0,0 +1,601 @@ +6,69,28,50,36,84,49,13,48,90,1,33,71,0,94,59,53,58,60,96,30,34,29,91,11,41,77,95,17,80,85,93,7,9,74,89,18,25,26,8,87,38,68,5,12,43,27,46,62,73,16,55,22,4,65,76,54,52,83,10,21,67,15,47,45,40,35,66,79,51,75,39,64,24,37,72,3,44,82,32,78,63,57,2,86,31,19,92,14,97,20,56,88,81,70,61,42,99,23,98 + +22 59 7 10 6 +33 36 96 55 23 +13 85 18 29 28 +75 46 83 73 58 +34 40 87 56 98 + +73 96 47 14 10 +28 11 79 84 20 +74 30 0 59 71 +80 93 42 22 17 +44 2 81 29 15 + +73 32 37 93 39 + 2 87 38 99 97 +15 12 42 49 33 + 9 23 25 94 19 +57 4 18 70 79 + +43 79 59 71 78 +51 97 37 28 26 +46 21 84 8 86 +96 30 17 34 49 +55 90 99 75 61 + +43 86 35 51 24 +16 25 29 21 3 + 2 13 4 36 54 +89 27 8 85 34 +96 59 65 14 56 + + 5 57 43 4 1 +86 80 67 30 20 +22 16 99 0 14 +40 25 59 91 54 +82 95 96 37 24 + +97 20 87 66 21 +25 40 9 78 89 +52 75 95 63 62 +32 43 13 47 69 +53 48 56 29 4 + +24 4 65 12 8 +76 3 81 99 49 +45 33 31 66 34 +17 94 75 35 88 +64 10 7 93 95 + +88 20 99 15 83 +81 40 5 6 98 +49 74 18 27 9 +43 69 28 37 71 +87 82 90 14 47 + +21 97 92 42 60 +11 65 98 95 29 + 2 49 75 20 74 +56 40 78 66 81 +68 4 46 77 61 + +26 14 39 76 11 +41 74 34 91 4 +51 9 97 29 75 +83 86 23 35 77 +90 2 49 30 89 + +34 97 0 22 15 +65 60 82 66 47 +30 9 49 95 48 +54 73 67 17 78 +33 96 44 1 32 + +90 29 10 49 63 + 8 26 95 61 0 +54 13 51 12 44 +32 48 16 47 84 +55 46 93 14 3 + +68 55 46 16 54 +97 59 49 6 21 +52 32 15 96 70 +57 56 61 51 0 +40 31 62 24 48 + +75 56 70 42 14 +77 9 23 62 25 +29 27 54 17 2 +55 72 43 15 96 +45 30 88 86 1 + +65 12 22 6 51 +77 81 15 91 19 +80 71 27 89 52 +75 92 41 83 57 +40 44 66 84 98 + +89 80 73 59 18 +74 55 67 71 10 +78 27 37 57 3 +92 26 17 5 72 +52 83 28 76 51 + +64 0 87 4 13 +14 43 42 62 31 +17 84 72 91 83 +53 80 59 61 74 +47 22 38 28 77 + +65 49 91 94 19 +25 81 64 57 9 +50 95 82 12 66 +53 54 85 36 11 +31 56 83 18 60 + + 6 12 76 37 33 +14 96 16 31 40 +17 82 27 94 83 + 1 50 49 9 54 +29 70 59 91 77 + +85 0 33 41 16 + 7 86 80 53 65 +94 19 28 35 32 + 4 55 93 97 63 +83 22 67 56 36 + +28 70 65 17 19 +88 51 15 73 12 +11 49 80 23 42 +26 54 90 75 29 +74 77 91 86 66 + +88 22 83 10 43 +57 34 15 23 8 +94 42 68 67 37 +84 3 6 71 62 +89 45 72 55 38 + +68 27 93 7 15 +85 96 1 56 6 +32 2 30 55 17 +99 90 37 80 50 +77 78 58 98 57 + + 5 95 22 13 97 +19 2 52 92 20 +75 49 86 31 41 +51 63 56 33 10 +82 27 79 94 57 + +15 44 91 26 4 +41 78 53 95 86 +90 92 46 56 33 +80 93 68 66 70 +36 10 38 0 6 + +11 47 52 64 17 +16 60 39 55 78 +46 18 33 83 35 +13 92 4 23 50 +40 5 29 6 90 + +20 60 2 23 74 +43 39 91 75 12 +58 67 50 29 79 +10 40 92 95 25 +13 24 53 72 36 + +69 64 15 53 86 +61 11 48 71 27 +26 93 38 70 73 +96 29 30 98 45 +13 7 31 59 84 + +13 55 50 54 57 +32 24 45 5 77 +82 86 0 4 99 +75 72 14 40 56 +76 94 89 17 30 + +66 71 86 41 0 +80 64 3 29 78 +23 21 42 99 87 +96 60 75 61 49 + 2 83 85 12 1 + +78 96 4 82 6 +73 36 57 99 8 +11 83 15 35 30 +85 87 25 22 66 +32 64 16 50 43 + + 6 39 55 2 4 + 1 61 99 71 80 +46 88 22 31 60 +62 66 37 97 76 +74 34 10 52 24 + +42 38 13 65 12 + 4 39 60 62 21 +81 99 1 69 40 +59 15 11 95 53 +91 78 72 30 73 + +43 68 82 72 2 +34 92 33 97 89 +63 70 9 0 45 +69 10 12 65 21 +40 20 55 57 49 + +41 22 8 16 49 +71 64 19 65 92 +17 10 26 36 29 +30 88 7 54 11 +77 55 70 72 47 + +15 94 90 6 39 +99 55 16 54 91 +18 7 82 44 51 +25 34 83 14 12 +30 2 77 27 66 + +44 50 74 97 58 +87 42 56 92 28 +49 82 52 17 78 +54 89 63 77 27 +83 14 24 16 84 + +47 32 8 55 22 +19 14 24 82 4 +76 73 9 10 64 +40 6 92 67 17 +68 44 43 3 54 + +26 10 9 92 81 +46 98 13 0 14 +68 99 35 18 72 +74 33 22 61 93 +80 38 71 6 75 + +17 23 54 55 22 +10 8 60 76 24 +71 28 16 62 82 +13 12 21 78 39 +26 66 89 64 79 + +72 12 91 79 99 +84 18 37 98 41 +10 71 88 23 24 +11 34 26 83 74 +58 27 77 5 8 + + 9 90 13 0 46 + 6 58 74 92 8 +75 77 56 76 80 +55 60 44 68 91 +67 28 96 66 18 + +14 26 54 21 35 +69 67 16 76 62 +78 45 87 44 94 +27 89 39 85 28 + 3 81 93 64 74 + +10 28 35 84 76 +40 11 95 59 57 +53 4 24 50 45 + 7 43 78 17 81 + 1 74 82 16 27 + + 6 26 72 53 52 +51 91 80 11 18 +20 63 74 25 33 +79 4 8 59 67 + 3 13 55 81 83 + +98 85 27 84 42 +90 15 17 61 34 +40 64 86 96 45 +59 47 53 5 35 +11 7 41 80 13 + +47 48 54 31 76 +99 32 98 20 15 +61 41 30 94 37 +34 59 86 55 45 + 9 83 92 53 3 + + 3 80 24 94 25 +17 23 64 76 71 +20 97 0 56 72 +95 73 28 59 21 +14 81 46 67 88 + + 2 95 5 38 90 +63 62 11 24 34 +19 31 57 84 80 +47 86 36 85 74 +13 39 73 94 42 + +28 6 60 34 15 +63 36 51 30 92 +43 10 7 88 49 +78 76 31 19 66 +22 20 35 45 79 + +19 42 49 57 73 +99 50 97 93 43 +67 52 40 16 33 + 2 55 0 71 46 +21 75 59 66 83 + +19 86 30 25 3 +32 39 65 54 29 +38 6 85 52 13 +43 95 18 44 15 +53 70 16 31 71 + +68 73 74 83 70 +56 15 12 78 4 +43 87 63 90 86 +41 16 23 17 77 +80 14 61 30 50 + +88 28 45 80 65 +64 11 68 33 27 +29 70 44 82 37 +42 66 9 32 87 +10 24 15 3 46 + +99 81 5 62 97 + 4 36 23 38 35 +42 16 37 98 54 +34 41 25 30 48 + 8 60 63 89 72 + +25 33 94 23 14 +45 10 79 30 3 +22 28 95 27 11 +74 13 39 84 83 +72 88 56 53 97 + +31 92 91 84 71 +54 90 89 80 0 +98 96 65 66 68 +35 39 70 11 82 +15 34 42 52 2 + +68 71 86 82 37 +28 48 12 34 54 +62 55 10 25 89 +60 4 50 21 22 + 3 2 18 40 84 + +18 96 95 47 45 +14 51 2 88 43 +94 56 19 15 8 +48 65 62 6 75 +35 28 25 72 30 + +43 85 69 92 26 +61 75 5 73 66 +16 87 4 99 48 +18 19 79 23 83 +37 88 31 38 40 + +23 10 89 84 76 +45 39 62 55 66 +25 73 79 43 60 +12 69 36 93 71 + 9 77 14 58 49 + + 9 24 26 53 79 +99 15 30 50 16 +14 95 12 25 33 +54 40 58 46 66 + 5 23 39 29 48 + +64 67 11 10 92 +59 99 80 97 66 +45 51 88 47 82 +35 27 72 85 16 +54 58 2 1 52 + +10 97 27 54 66 +89 85 39 99 98 + 8 68 95 51 19 + 4 17 79 87 3 +72 43 76 58 33 + +95 72 0 18 17 + 3 42 24 86 34 +52 79 46 58 98 +76 77 78 19 10 +81 61 88 85 54 + +74 70 15 80 72 +77 89 11 19 22 +34 59 56 65 91 +58 6 50 40 16 +93 30 95 26 85 + +47 62 57 6 25 +40 79 22 95 29 +42 11 70 10 92 +60 53 84 96 17 +75 86 74 89 18 + +30 42 4 19 92 +40 58 72 7 70 +17 98 45 76 50 +93 57 65 79 2 +56 94 73 84 62 + +51 0 14 7 53 +63 36 48 81 84 +50 22 11 88 6 +83 99 21 31 91 +86 17 72 42 94 + +83 0 20 26 7 +42 24 37 86 65 +73 82 63 21 27 +30 35 9 47 80 +79 53 3 14 84 + +50 99 83 86 42 +81 36 24 4 76 + 0 71 66 41 57 + 7 54 94 78 97 +12 8 82 45 31 + + 4 91 57 50 37 +22 46 86 24 26 +39 54 48 7 42 + 2 45 95 29 12 +38 25 52 0 72 + +51 94 46 44 62 +95 60 0 48 61 +38 13 85 32 8 +22 56 53 30 80 +43 65 58 68 88 + +49 76 41 43 51 +57 46 45 82 90 +48 33 36 5 23 +81 30 3 61 75 +56 70 29 91 59 + +58 74 50 47 84 + 2 1 62 36 60 +32 16 95 43 27 +79 12 39 56 11 + 9 33 4 25 61 + +23 84 16 51 39 +72 19 53 64 43 + 9 44 10 52 26 +45 68 29 56 74 +62 42 46 95 0 + +16 83 27 85 56 +13 41 49 79 53 +18 63 7 60 3 +45 15 48 69 29 +46 86 35 34 32 + +85 2 96 15 43 +33 30 29 53 98 +21 55 61 73 40 +31 4 66 75 59 +26 32 91 38 80 + +69 81 65 30 77 +82 22 83 0 38 + 2 3 29 47 94 +42 55 9 18 97 +53 45 90 31 44 + +23 86 0 35 84 +27 80 3 64 12 + 1 96 48 93 85 +69 24 61 15 22 +91 72 62 13 76 + +81 51 67 60 16 +65 48 86 39 97 +92 93 49 77 59 +15 94 88 52 19 +80 83 23 61 4 + +47 84 46 79 55 +92 38 65 42 76 + 9 58 26 95 86 +30 49 56 69 59 +94 4 25 89 44 + +73 10 29 0 48 +56 40 19 84 61 +52 31 25 86 21 +79 55 53 51 5 +81 9 35 72 15 + +41 95 30 58 73 +26 80 4 21 96 +61 92 76 93 74 + 2 69 60 8 20 +46 98 70 72 83 + + 1 99 31 4 86 +93 64 8 43 61 +33 36 75 90 50 +52 13 3 42 34 +22 65 60 18 76 + +17 63 6 66 92 +51 67 86 88 18 +82 83 32 74 30 + 5 33 9 28 61 +72 75 25 23 60 + +43 28 40 53 52 +54 12 77 10 83 +21 44 63 0 1 +15 22 33 49 2 +80 41 3 46 55 + + 1 97 75 37 4 +47 33 13 21 40 +27 62 15 90 30 +11 83 63 36 35 + 0 12 60 91 42 + + 0 45 17 88 18 +66 10 63 62 8 +36 5 47 39 67 +21 3 61 29 19 +82 58 33 6 59 + +37 92 69 56 52 +46 66 20 78 13 +83 99 16 31 0 +36 35 2 68 9 +70 82 94 96 29 + +62 65 85 37 3 +74 95 34 96 58 +15 33 49 21 93 +19 83 66 6 25 +81 84 23 0 76 + +95 84 71 92 52 +54 36 66 59 82 + 0 76 32 45 83 +69 27 25 88 38 +81 96 63 4 61 + +73 51 28 48 40 + 3 38 11 14 35 +66 91 86 20 81 +53 39 46 71 1 +97 60 21 93 23 + +92 70 4 60 95 +58 49 20 15 25 +55 68 21 84 80 +56 41 82 23 19 +30 74 65 27 29 + +81 97 68 46 75 +62 73 63 36 41 + 1 5 91 84 37 +45 92 20 49 7 +25 26 3 88 56 + +25 9 94 37 26 +44 58 84 91 38 +39 46 57 98 50 +96 42 73 24 70 +71 32 53 48 13 + +98 72 25 96 77 +80 64 88 53 23 +21 37 45 24 18 +41 86 59 68 5 +76 50 36 26 12 + +77 79 88 74 12 +21 9 85 26 68 +11 62 64 4 5 +47 33 76 63 87 +55 19 2 60 95 + +74 79 30 14 35 +90 52 17 29 63 +18 69 78 34 26 +92 42 85 71 56 +12 2 5 0 98 \ No newline at end of file diff --git a/2021/04.py b/2021/04.py new file mode 100644 index 0000000..7f73ada --- /dev/null +++ b/2021/04.py @@ -0,0 +1,100 @@ +import json + +def test_winner(board, drawn_numbers): + for one_combination in board['winning_combinations']: + total = 0 + if set(one_combination).issubset(set(drawn_numbers)): + for one_number in one_bingo['numbers']: + if one_number not in drawn_numbers: + total += int(one_number) + return int(total) * int(drawn_numbers[-1]) + return -1 + +with open('./2021/04.input', 'r') as input_file: +# with open('./2021/04.test', 'r') as input_file: + input_data = input_file.read() + +number_list = input_data.split('\n\n')[0].split(',') + +print(number_list) + +bingo_boards = input_data.split('\n\n')[1:] + +bingo_dicts = [] +for one_board in bingo_boards: + one_bingo = {} + one_bingo['numbers'] = [] + one_bingo['winning_combinations'] = [] + rows = one_board.split('\n') + + for row in range(len(rows)): + columns = rows[row].split(' ') + columns = list(filter("".__ne__, columns)) + one_bingo['numbers'].extend(columns) + + one_bingo['winning_combinations'].append(columns) + for column in range(len(columns)): + winning_column = [] + for row in range(len(rows)): + print(row, column, row * column) + winning_column.append(one_bingo['numbers'][row * len(columns) + column]) + print(winning_column) + one_bingo['winning_combinations'].append(winning_column) + bingo_dicts.append(one_bingo) + +# Find a winning board. +winner_found = False +for i in range(4, len(number_list)): + drawn_numbers = number_list[:i] + print("Drawn numbers", drawn_numbers) + + for one_bingo in bingo_dicts: + for one_combination in one_bingo['winning_combinations']: + total = 0 + if set(one_combination).issubset(set(drawn_numbers)): + # Get the board + print("Winning Combination", one_combination) + print("Winning Board", one_bingo['numbers']) + one_bingo['numbers'].sort() + print("Winning Sorted", one_bingo['numbers']) + + for one_number in one_bingo['numbers']: + if one_number not in drawn_numbers: + total += int(one_number) + print(total) + winner_found = True + print(total, drawn_numbers[-1], int(total) * int(drawn_numbers[-1])) + if winner_found: + break + if winner_found: + break + if winner_found: + break + +boards_left = bingo_dicts.copy() + + +for i in range(4, len(number_list)): + drawn_numbers = number_list[:i] + + # Test for winner. If winner, eliminate. + for one_board in range(len(boards_left) - 1, 0, -1): + total = 0 + for one_combination in boards_left[one_board]: + if set(one_combination).issubset(set(drawn_numbers)) and len(boards_left) > 1: + # Remove the board + del boards_left[one_board] + +for one_number in one_bingo['numbers']: + if one_number not in drawn_numbers: + total += int(one_number) +print(len(boards_left)) +print(total) +winner_found = True +print(total, drawn_numbers[-1], int(total) * int(drawn_numbers[-1])) + + + + + + \ No newline at end of file diff --git a/2021/04.test b/2021/04.test new file mode 100644 index 0000000..49d17bc --- /dev/null +++ b/2021/04.test @@ -0,0 +1,19 @@ +7,4,9,5,11,17,23,2,0,14,21,24,10,16,13,6,15,25,12,22,18,20,8,19,3,26,1 + +22 13 17 11 0 + 8 2 23 4 24 +21 9 14 16 7 + 6 10 3 18 5 + 1 12 20 15 19 + + 3 15 0 2 22 + 9 18 13 17 5 +19 8 7 25 23 +20 11 10 24 4 +14 21 16 12 6 + +14 21 17 24 4 +10 16 15 9 19 +18 8 23 26 20 +22 11 13 6 5 + 2 0 12 3 7 \ No newline at end of file diff --git a/2021/05.input b/2021/05.input new file mode 100644 index 0000000..af3cd28 --- /dev/null +++ b/2021/05.input @@ -0,0 +1,500 @@ +445,187 -> 912,654 +820,46 -> 25,841 +216,621 -> 458,379 +955,898 -> 67,10 +549,572 -> 549,520 +796,107 -> 109,794 +729,698 -> 338,698 +11,987 -> 968,30 +381,840 -> 381,409 +80,467 -> 80,48 +132,197 -> 132,92 +343,96 -> 343,710 +42,854 -> 346,550 +503,56 -> 804,56 +599,206 -> 60,206 +702,920 -> 474,920 +496,790 -> 223,517 +969,579 -> 583,579 +897,66 -> 604,66 +484,754 -> 640,910 +330,49 -> 949,49 +908,132 -> 714,132 +517,153 -> 97,573 +317,865 -> 678,504 +800,61 -> 800,51 +179,242 -> 179,202 +529,757 -> 529,838 +288,953 -> 393,953 +372,15 -> 925,568 +100,85 -> 654,639 +663,562 -> 737,636 +576,981 -> 245,981 +347,240 -> 347,928 +91,119 -> 413,441 +637,397 -> 330,90 +534,257 -> 950,257 +155,636 -> 694,97 +539,274 -> 539,327 +329,795 -> 824,300 +103,51 -> 961,909 +87,868 -> 168,787 +21,250 -> 157,386 +591,316 -> 670,395 +722,670 -> 630,670 +28,167 -> 28,489 +480,210 -> 68,622 +573,700 -> 354,919 +186,59 -> 700,59 +121,186 -> 670,186 +797,985 -> 671,985 +836,804 -> 335,804 +701,835 -> 104,238 +456,718 -> 456,964 +694,891 -> 694,839 +205,637 -> 205,318 +40,958 -> 773,225 +151,391 -> 151,779 +693,894 -> 417,894 +418,700 -> 656,700 +196,985 -> 896,985 +357,509 -> 608,258 +552,558 -> 552,482 +184,412 -> 170,412 +122,746 -> 643,225 +268,930 -> 247,930 +979,820 -> 407,248 +755,893 -> 845,893 +706,843 -> 706,225 +162,726 -> 895,726 +140,888 -> 289,888 +614,432 -> 903,721 +272,725 -> 272,598 +529,672 -> 967,234 +903,989 -> 785,871 +422,355 -> 422,360 +313,722 -> 713,322 +460,121 -> 460,151 +55,944 -> 946,944 +795,744 -> 221,744 +816,953 -> 471,953 +865,186 -> 557,186 +94,976 -> 747,323 +302,961 -> 811,452 +361,966 -> 921,406 +197,988 -> 571,988 +310,905 -> 722,493 +699,91 -> 272,518 +295,306 -> 84,95 +220,116 -> 395,291 +183,364 -> 523,364 +16,986 -> 16,319 +54,980 -> 635,399 +340,110 -> 651,421 +788,76 -> 788,635 +933,375 -> 458,375 +12,434 -> 494,916 +253,892 -> 962,183 +240,508 -> 240,234 +763,934 -> 506,677 +308,135 -> 239,66 +117,649 -> 751,15 +95,535 -> 428,868 +16,937 -> 902,51 +547,404 -> 547,830 +128,581 -> 970,581 +959,810 -> 564,415 +971,738 -> 378,145 +919,210 -> 295,210 +737,43 -> 231,43 +82,577 -> 455,204 +821,337 -> 570,337 +688,753 -> 538,753 +891,844 -> 124,844 +74,957 -> 946,85 +43,942 -> 43,210 +100,391 -> 100,142 +975,527 -> 175,527 +510,844 -> 395,959 +558,231 -> 558,858 +839,915 -> 262,338 +784,290 -> 875,199 +644,824 -> 812,824 +899,657 -> 500,657 +263,668 -> 263,964 +157,374 -> 820,374 +530,301 -> 530,67 +15,688 -> 15,572 +216,844 -> 479,581 +973,59 -> 68,964 +104,92 -> 104,547 +421,472 -> 421,176 +887,805 -> 231,149 +140,980 -> 852,980 +248,602 -> 346,602 +334,961 -> 334,471 +892,892 -> 958,958 +270,83 -> 270,135 +950,105 -> 404,651 +979,476 -> 930,427 +416,430 -> 879,430 +796,937 -> 796,415 +670,679 -> 72,679 +733,884 -> 733,302 +745,196 -> 306,196 +174,353 -> 667,846 +285,978 -> 254,978 +10,63 -> 936,989 +242,107 -> 242,725 +238,341 -> 238,800 +975,102 -> 174,903 +530,474 -> 530,853 +931,47 -> 467,47 +86,141 -> 821,141 +263,15 -> 654,15 +688,542 -> 378,232 +826,793 -> 989,793 +729,285 -> 729,192 +587,915 -> 587,79 +548,667 -> 877,667 +15,836 -> 783,68 +662,673 -> 71,82 +312,681 -> 910,83 +760,418 -> 491,418 +175,502 -> 443,502 +817,878 -> 29,90 +798,569 -> 811,582 +703,141 -> 743,181 +941,849 -> 941,778 +63,24 -> 500,461 +697,183 -> 119,761 +705,672 -> 152,672 +150,567 -> 656,567 +158,411 -> 965,411 +702,872 -> 276,446 +141,179 -> 741,779 +533,886 -> 817,886 +569,949 -> 285,949 +699,764 -> 699,780 +333,863 -> 805,391 +861,804 -> 524,467 +791,501 -> 718,501 +976,265 -> 976,713 +129,342 -> 339,132 +322,738 -> 212,738 +700,534 -> 622,456 +68,314 -> 14,314 +146,112 -> 215,181 +170,211 -> 482,211 +159,412 -> 159,32 +312,939 -> 312,95 +232,18 -> 912,698 +950,114 -> 950,826 +620,848 -> 620,11 +624,288 -> 544,208 +752,479 -> 752,577 +784,796 -> 784,872 +130,55 -> 974,899 +434,82 -> 434,481 +988,230 -> 892,134 +159,252 -> 159,291 +462,14 -> 462,977 +553,981 -> 553,390 +231,936 -> 51,936 +58,759 -> 60,759 +572,891 -> 584,891 +705,303 -> 124,303 +144,894 -> 970,68 +865,275 -> 865,956 +492,491 -> 470,491 +971,15 -> 977,15 +750,521 -> 33,521 +913,947 -> 387,421 +368,677 -> 570,677 +795,186 -> 882,186 +404,840 -> 678,840 +187,488 -> 403,488 +824,706 -> 642,706 +330,541 -> 330,195 +564,531 -> 774,531 +271,857 -> 20,606 +976,975 -> 976,843 +323,341 -> 21,39 +575,643 -> 267,643 +827,295 -> 827,854 +749,486 -> 749,780 +656,716 -> 656,470 +635,187 -> 417,187 +503,488 -> 503,393 +592,688 -> 592,567 +515,408 -> 128,795 +608,158 -> 780,158 +677,96 -> 11,762 +127,452 -> 339,452 +117,985 -> 291,811 +157,371 -> 157,916 +640,758 -> 983,758 +906,413 -> 906,776 +224,842 -> 627,439 +903,728 -> 903,459 +358,138 -> 822,602 +30,16 -> 929,915 +440,900 -> 294,900 +809,73 -> 987,73 +55,410 -> 304,161 +441,672 -> 315,672 +939,40 -> 234,40 +334,698 -> 309,698 +572,738 -> 572,226 +445,71 -> 445,468 +225,660 -> 427,458 +390,320 -> 449,320 +507,635 -> 507,169 +47,116 -> 738,807 +127,14 -> 689,14 +316,760 -> 316,432 +831,101 -> 250,682 +370,807 -> 370,898 +678,186 -> 491,186 +866,83 -> 539,83 +518,848 -> 518,962 +188,135 -> 81,28 +378,226 -> 597,226 +646,534 -> 141,534 +275,672 -> 275,854 +67,421 -> 676,421 +386,323 -> 988,323 +903,984 -> 10,91 +37,348 -> 529,840 +872,134 -> 358,648 +42,826 -> 42,822 +688,922 -> 21,922 +47,539 -> 942,539 +739,483 -> 375,847 +23,217 -> 800,217 +589,512 -> 589,953 +292,229 -> 107,229 +873,678 -> 873,770 +794,295 -> 739,240 +464,559 -> 936,559 +685,736 -> 368,736 +114,941 -> 114,307 +571,643 -> 74,643 +281,185 -> 273,177 +497,937 -> 497,469 +152,815 -> 702,815 +76,43 -> 980,947 +272,149 -> 101,149 +934,945 -> 107,118 +532,476 -> 759,476 +955,942 -> 397,942 +31,918 -> 931,18 +790,420 -> 389,420 +36,496 -> 215,317 +252,209 -> 139,209 +704,148 -> 719,133 +413,571 -> 165,571 +690,433 -> 864,607 +976,417 -> 517,876 +803,568 -> 443,568 +335,558 -> 335,334 +405,807 -> 691,521 +194,482 -> 486,190 +377,856 -> 377,802 +313,842 -> 313,254 +449,961 -> 198,710 +197,916 -> 197,797 +82,965 -> 959,88 +371,239 -> 829,697 +471,70 -> 596,70 +835,144 -> 835,950 +283,486 -> 506,486 +147,29 -> 147,747 +187,485 -> 187,195 +781,144 -> 480,144 +801,839 -> 925,715 +415,960 -> 415,442 +877,939 -> 29,91 +22,118 -> 22,439 +460,315 -> 450,315 +982,960 -> 71,49 +105,231 -> 105,331 +98,174 -> 551,174 +721,978 -> 38,295 +167,290 -> 167,133 +218,158 -> 218,908 +819,812 -> 758,812 +123,92 -> 123,132 +66,721 -> 66,906 +478,441 -> 967,930 +284,58 -> 464,58 +958,15 -> 37,936 +310,337 -> 359,288 +212,763 -> 212,373 +101,279 -> 101,267 +622,409 -> 106,925 +318,657 -> 318,432 +938,631 -> 938,650 +142,881 -> 254,881 +848,987 -> 848,451 +686,223 -> 481,223 +124,248 -> 812,248 +246,267 -> 246,148 +96,670 -> 324,442 +645,888 -> 385,628 +417,555 -> 417,858 +543,495 -> 543,150 +73,350 -> 440,717 +459,704 -> 459,179 +871,493 -> 871,764 +911,34 -> 64,881 +544,791 -> 703,791 +447,218 -> 62,218 +202,649 -> 396,649 +935,916 -> 55,36 +124,408 -> 477,761 +608,850 -> 484,850 +935,876 -> 582,876 +377,612 -> 269,612 +413,727 -> 365,679 +64,451 -> 850,451 +684,807 -> 357,807 +323,364 -> 372,364 +887,300 -> 419,300 +837,831 -> 837,927 +294,255 -> 768,729 +878,23 -> 141,760 +36,627 -> 157,627 +824,703 -> 824,968 +356,109 -> 657,109 +799,266 -> 313,752 +71,600 -> 650,21 +564,863 -> 564,54 +36,720 -> 109,720 +318,488 -> 682,488 +249,350 -> 979,350 +560,502 -> 255,502 +132,327 -> 132,246 +287,906 -> 791,906 +818,110 -> 818,882 +937,17 -> 113,841 +50,710 -> 673,87 +702,952 -> 702,533 +666,552 -> 611,552 +612,962 -> 112,462 +260,529 -> 351,529 +440,313 -> 440,663 +605,341 -> 405,141 +277,287 -> 461,287 +268,890 -> 268,92 +764,526 -> 877,639 +165,697 -> 832,697 +240,716 -> 801,155 +872,429 -> 578,429 +88,816 -> 338,816 +981,881 -> 981,138 +457,351 -> 457,679 +850,526 -> 850,447 +139,449 -> 165,449 +127,544 -> 127,934 +160,890 -> 745,305 +526,113 -> 303,336 +17,500 -> 17,621 +796,311 -> 181,926 +260,218 -> 787,218 +536,989 -> 536,261 +257,826 -> 257,180 +531,37 -> 531,493 +961,942 -> 206,187 +536,668 -> 536,868 +154,967 -> 154,931 +808,317 -> 808,873 +487,258 -> 599,258 +59,962 -> 802,219 +322,945 -> 322,837 +378,973 -> 33,628 +668,556 -> 691,556 +819,728 -> 787,728 +484,261 -> 484,874 +333,271 -> 278,271 +733,515 -> 741,523 +775,854 -> 523,602 +67,215 -> 616,215 +951,685 -> 951,433 +372,105 -> 372,494 +917,788 -> 917,23 +890,584 -> 245,584 +748,276 -> 893,276 +733,721 -> 733,747 +225,908 -> 897,908 +437,140 -> 423,140 +456,513 -> 136,833 +413,135 -> 413,596 +143,245 -> 879,981 +870,639 -> 942,639 +28,175 -> 696,843 +393,303 -> 393,197 +169,986 -> 458,986 +43,44 -> 952,953 +236,405 -> 60,229 +266,845 -> 292,845 +529,98 -> 95,532 +95,658 -> 695,658 +368,454 -> 112,710 +506,776 -> 662,776 +928,494 -> 604,170 +179,138 -> 900,859 +45,560 -> 408,197 +655,654 -> 37,36 +56,432 -> 56,456 +844,614 -> 844,898 +240,191 -> 240,112 +639,911 -> 213,911 +47,887 -> 830,104 +57,50 -> 977,970 +899,928 -> 111,928 +962,676 -> 962,518 +129,585 -> 469,245 +988,775 -> 988,553 +417,344 -> 842,769 +468,110 -> 506,72 +687,204 -> 687,345 +828,553 -> 765,490 +75,894 -> 75,93 +26,798 -> 11,783 +967,44 -> 967,478 +240,481 -> 947,481 +794,254 -> 162,254 +502,944 -> 812,944 +331,417 -> 410,417 +850,275 -> 850,980 +671,130 -> 671,941 +240,99 -> 240,381 +771,399 -> 318,399 +946,11 -> 28,929 +731,939 -> 824,846 +268,71 -> 832,635 +968,37 -> 968,642 +935,365 -> 515,365 +199,792 -> 932,792 +32,116 -> 371,116 +324,67 -> 941,67 +453,181 -> 453,128 +958,982 -> 115,139 +962,168 -> 154,976 +474,215 -> 333,215 +458,675 -> 458,315 +577,302 -> 300,302 +704,493 -> 704,876 +887,549 -> 887,439 +81,328 -> 724,328 +575,490 -> 670,490 +576,17 -> 576,218 +21,46 -> 963,988 +532,235 -> 532,615 +796,213 -> 796,407 +55,948 -> 980,23 +775,471 -> 272,471 +26,138 -> 344,138 +635,518 -> 915,518 +727,365 -> 727,216 \ No newline at end of file diff --git a/2021/05.py b/2021/05.py new file mode 100644 index 0000000..f714fc7 --- /dev/null +++ b/2021/05.py @@ -0,0 +1,8 @@ +import sys +from collections import Counter +with open('./2021/05.input', 'r') as f: +# with open('./2021/05.test', 'r') as f: + f = [[list(map(int, y.split(','))) for y in x.split("->")] for x in f.read().splitlines()] + +print(sum([1 for k, v in Counter([item for sublist in [[(x, y) for x in range(min(x0, x1), max(x0, x1) + 1) for y in range(min(y0, y1), max(y0, y1) + 1) if ((x - x0) * (y1 - y0) - (y - y0) * (x1 - x0)) == 0] for (x0, y0), (x1, y1) in f if x0 == x1 or y0 == y1] for item in sublist]).items() if v >= 2])) +print(sum([1 for k, v in Counter([item for sublist in [[(x, y) for x in range(min(x0, x1), max(x0, x1) + 1) for y in range(min(y0, y1), max(y0, y1) + 1) if ((x - x0) * (y1 - y0) - (y - y0) * (x1 - x0)) == 0] for (x0, y0), (x1, y1) in f] for item in sublist]).items() if v >= 2])) \ No newline at end of file diff --git a/2021/05.test b/2021/05.test new file mode 100644 index 0000000..1d4e36d --- /dev/null +++ b/2021/05.test @@ -0,0 +1,10 @@ +0,9 -> 5,9 +8,0 -> 0,8 +9,4 -> 3,4 +2,2 -> 2,1 +7,0 -> 7,4 +6,4 -> 2,0 +0,9 -> 2,9 +3,4 -> 1,4 +0,0 -> 8,8 +5,5 -> 8,2 \ No newline at end of file