Last active
December 5, 2024 23:53
-
-
Save slaght/61c942dce3549880396423946f9f691a to your computer and use it in GitHub Desktop.
2024 Advent of Code Day 2 in Zig
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const std = @import("std"); | |
const ArrayList = std.ArrayList; | |
const reports = [_][]const u8{ "6 8 11 12 14 16 18 16", "73 76 79 80 81 84 86 86", "32 33 34 37 40 44", "9 11 13 14 17 24", "59 61 64 62 65", "33 36 37 39 36 35", "60 62 64 61 62 64 64", "12 15 16 15 17 18 22", "72 73 75 77 79 82 79 85", "60 61 64 64 67 69", "44 45 45 46 48 50 52 51", "9 11 11 13 14 14", "3 5 8 11 11 15", "48 51 52 52 53 54 59", "76 77 80 84 86 87", "30 32 33 35 38 42 41", "91 92 93 97 97", "59 61 63 67 69 73", "59 60 64 67 68 73", "28 30 31 36 39 42", "26 29 32 34 40 39", "64 65 67 74 75 78 79 79", "49 52 59 61 65", "34 35 42 43 44 51", "12 10 11 14 17 18 20 21", "68 67 70 73 71", "80 79 80 81 84 86 88 88", "60 58 60 61 62 66", "14 12 13 14 17 18 21 28", "24 21 24 26 25 26", "30 29 32 35 37 34 33", "45 42 41 44 44", "55 52 49 52 55 58 59 63", "10 9 11 14 16 14 17 24", "44 42 43 44 45 45 48 51", "53 52 52 55 53", "42 39 42 43 45 45 48 48", "86 83 83 86 90", "7 4 7 8 8 11 18", "58 55 56 59 63 66 68 70", "77 75 79 81 78", "93 90 93 97 97", "13 12 16 18 22", "42 40 42 45 46 47 51 58", "18 15 16 22 24 25", "22 20 26 27 30 33 35 33", "40 39 44 45 45", "36 34 39 42 45 46 50", "39 37 44 46 49 54", "31 31 32 33 36 39 40 42", "6 6 7 10 11 14 16 14", "20 20 22 23 26 28 30 30", "50 50 52 55 57 61", "11 11 14 15 20", "89 89 91 89 90", "38 38 41 43 44 47 44 41", "35 35 36 33 33", "76 76 79 82 85 82 85 89", "31 31 32 30 33 40", "38 38 40 40 41", "85 85 85 87 86", "44 44 45 48 51 51 52 52", "57 57 58 58 59 60 61 65", "22 22 24 24 27 32", "59 59 62 66 68", "17 17 20 24 27 30 28", "49 49 50 51 53 57 59 59", "48 48 49 53 57", "46 46 47 48 51 55 61", "51 51 57 59 61 64 67 70", "42 42 44 50 52 49", "75 75 80 81 81", "8 8 13 15 17 21", "22 22 23 24 27 34 37 44", "75 79 80 82 85 88", "67 71 73 75 77 76", "8 12 14 15 15", "17 21 24 25 27 31", "47 51 54 55 58 65", "66 70 72 71 72", "30 34 37 35 38 36", "60 64 65 64 65 67 67", "72 76 77 76 79 83", "20 24 25 28 29 31 29 36", "36 40 43 44 47 49 49 52", "15 19 21 24 24 22", "77 81 83 84 84 86 89 89", "46 50 52 52 56", "17 21 22 22 27", "75 79 81 85 87 90", "7 11 13 17 15", "27 31 33 37 37", "34 38 41 45 49", "69 73 74 78 85", "14 18 25 27 28 30 31 33", "24 28 29 34 37 36", "56 60 67 70 70", "35 39 42 48 51 52 56", "74 78 80 85 92", "47 54 55 58 60 63 65 67", "83 89 92 95 94", "32 38 41 43 43", "38 45 48 50 54", "54 61 62 65 67 69 76", "76 83 84 85 82 84", "69 75 78 81 78 75", "7 13 16 18 15 15", "46 52 55 57 56 60", "74 80 83 84 81 82 89", "43 49 49 51 53", "82 87 87 90 91 88", "42 49 49 51 51", "24 30 33 36 37 37 41", "37 42 43 43 45 46 51", "67 73 77 80 83 86", "29 34 37 41 42 44 46 45", "55 62 66 68 69 70 73 73", "20 26 28 32 36", "33 40 42 46 47 54", "58 65 68 69 76 78", "60 65 66 72 70", "46 52 59 62 63 65 65", "61 67 68 70 75 78 82", "52 58 60 67 73", "81 78 76 74 73 71 73", "78 75 72 71 70 67 67", "17 16 15 12 11 9 5", "53 50 48 45 44 41 38 31", "99 96 98 97 96 94", "39 37 35 33 32 31 34 36", "27 25 22 24 24", "48 47 45 42 43 42 38", "95 93 90 93 87", "92 89 88 85 85 82 80 78", "64 62 61 60 60 58 55 57", "79 77 75 74 71 71 71", "91 89 88 88 87 83", "36 34 34 32 27", "47 45 42 38 36", "68 67 63 62 59 57 56 57", "61 60 56 54 52 50 47 47", "40 39 35 33 29", "75 72 71 67 65 63 58", "93 90 84 82 79 76 74 71", "78 77 75 72 71 69 62 64", "44 41 36 33 30 28 28", "35 32 29 24 23 22 18", "60 57 52 51 45", "24 25 24 22 21 18 15 13", "43 45 42 39 36 33 34", "71 73 72 69 67 64 63 63", "19 22 20 19 16 12", "43 45 43 40 38 31", "38 39 38 36 37 36 34 33", "53 54 56 55 58", "76 78 75 78 76 73 73", "70 71 70 72 70 69 66 62", "73 74 72 70 68 69 64", "97 98 96 95 93 90 90 87", "42 44 41 40 39 39 37 40", "52 54 51 50 47 46 46 46", "85 88 86 86 83 82 79 75", "85 88 86 84 81 79 79 72", "75 78 76 72 71 68 66", "29 31 30 27 25 21 19 22", "47 48 47 44 40 40", "58 61 57 55 51", "68 70 68 64 61 56", "81 82 77 75 73 70", "53 56 53 50 43 41 38 39", "20 23 21 18 15 9 8 8", "66 69 66 60 56", "48 50 47 44 38 36 34 29", "67 67 66 64 63 60", "83 83 82 81 84", "63 63 61 59 59", "64 64 62 61 57", "75 75 74 73 72 70 69 62", "76 76 75 74 72 70 71 68", "70 70 68 69 67 65 62 64", "6 6 5 4 5 2 2", "16 16 19 16 14 13 9", "34 34 33 31 28 25 27 21", "28 28 28 26 23 21 20", "20 20 20 18 17 14 12 15", "63 63 60 60 60", "28 28 28 26 22", "36 36 36 35 33 28", "82 82 78 77 74 71", "62 62 59 57 55 51 52", "41 41 39 35 35", "34 34 30 27 24 20", "97 97 95 91 86", "79 79 72 69 68 65 64", "52 52 49 47 44 38 40", "56 56 50 49 48 45 45", "97 97 94 87 86 85 82 78", "97 97 95 89 86 83 82 76", "24 20 17 16 15 13 11", "52 48 47 46 48", "21 17 15 12 10 10", "27 23 20 18 17 13", "57 53 52 51 50 48 46 40", "87 83 82 83 80", "99 95 97 96 97", "97 93 91 88 90 90", "90 86 83 85 81", "49 45 42 44 41 38 31", "15 11 10 10 8", "96 92 92 90 89 87 86 88", "18 14 14 13 12 11 11", "21 17 15 14 13 12 12 8", "86 82 80 78 78 77 72", "74 70 67 64 60 57 54 53", "46 42 39 38 34 33 36", "52 48 46 44 40 40", "40 36 33 32 29 25 24 20", "92 88 84 82 77", "28 24 22 15 12 11", "71 67 66 65 58 55 58", "89 85 84 81 78 72 71 71", "42 38 32 31 28 26 24 20", "87 83 81 74 68", "69 62 59 58 55 52", "95 90 88 86 84 81 78 81", "45 39 38 36 34 33 33", "84 78 75 74 71 67", "61 55 54 52 51 48 46 40", "58 51 49 47 44 42 45 42", "37 32 29 30 28 29", "64 58 59 56 56", "76 70 68 67 65 66 62", "55 49 46 48 47 44 43 38", "88 82 81 81 78", "98 91 90 87 84 84 83 85", "95 88 85 85 85", "79 73 70 67 67 63", "50 43 41 38 38 36 29", "17 12 11 7 4", "31 25 21 18 15 13 16", "98 92 91 88 86 82 82", "61 54 51 47 43", "96 89 88 84 78", "44 38 36 34 29 26", "98 93 92 85 83 82 85", "73 67 66 65 59 58 58", "30 25 23 21 14 12 8", "68 62 59 53 48", "3 6 8 10 13 16 19 16", "48 51 53 54 57 60 60", "34 36 39 40 41 45", "2 3 5 7 8 11 16", "28 29 30 29 30 33", "43 44 47 50 49 47", "77 80 82 83 86 83 85 85", "50 52 54 56 58 57 59 63", "32 33 35 33 38", "67 68 69 69 70", "77 80 80 83 82", "69 71 74 76 76 78 79 79", "15 16 17 17 19 22 24 28", "50 52 53 56 58 58 64", "80 81 85 87 88 90 93", "42 44 45 48 52 50", "9 10 13 15 19 22 22", "34 36 40 41 44 47 50 54", "74 75 78 80 83 87 89 96", "78 81 87 89 91", "2 4 11 12 14 15 18 17", "57 58 59 60 62 63 70 70", "49 51 54 57 64 65 67 71", "8 9 15 16 21", "50 48 49 50 53 56", "97 94 97 98 95", "5 2 3 6 9 9", "12 9 11 13 14 18", "84 82 83 86 88 89 90 95", "83 80 81 84 87 86 88", "24 21 22 25 24 25 22", "99 97 96 97 97", "13 12 15 14 15 17 21", "87 85 88 86 93", "9 8 11 12 15 17 17 19", "31 28 30 32 32 29", "49 48 51 51 51", "62 60 60 63 66 70", "78 75 76 79 80 81 81 88", "39 36 38 41 43 45 49 51", "94 92 96 98 99 97", "75 74 78 81 84 84", "16 14 16 19 23 24 27 31", "51 48 49 53 55 60", "38 36 39 41 42 45 51 53", "68 65 66 73 74 72", "34 31 38 39 41 41", "25 24 29 31 33 36 40", "12 9 15 16 23", "21 21 22 23 25", "83 83 84 87 86", "76 76 78 80 83 85 86 86", "66 66 68 71 74 78", "86 86 88 91 97", "65 65 66 63 66 67 68 70", "76 76 74 77 80 79", "47 47 48 45 48 48", "37 37 38 41 40 44", "62 62 60 61 67", "57 57 57 60 61 64 66 68", "34 34 36 38 38 35", "31 31 32 34 37 37 38 38", "22 22 22 24 28", "71 71 71 73 74 80", "52 52 53 57 58 60 63", "42 42 45 46 50 48", "47 47 48 49 50 51 55 55", "46 46 49 51 55 57 60 64", "45 45 46 50 56", "60 60 66 68 70 73", "84 84 85 91 93 95 94", "11 11 12 17 18 18", "25 25 26 33 37", "29 29 36 38 45", "41 45 46 49 52", "13 17 19 21 23 26 28 26", "16 20 22 24 24", "82 86 88 89 90 94", "28 32 33 36 37 39 44", "33 37 38 37 39", "24 28 27 29 26", "11 15 18 19 17 19 21 21", "65 69 70 73 72 74 78", "64 68 66 67 70 73 80", "63 67 70 70 71 73 76", "74 78 80 80 82 79", "46 50 52 52 55 56 56", "14 18 21 21 22 26", "15 19 20 23 23 28", "45 49 50 52 56 59 62 65", "12 16 19 23 21", "38 42 43 47 50 50", "60 64 67 70 74 75 79", "49 53 56 57 59 62 66 73", "54 58 64 65 68 69 70", "47 51 57 59 58", "17 21 28 29 31 34 34", "9 13 19 22 25 27 30 34", "22 26 27 29 31 36 37 43", "71 76 78 80 83 84 86 87", "43 49 52 54 55 56 53", "27 32 33 36 38 41 43 43", "7 13 16 17 21", "41 47 50 51 57", "45 51 52 53 54 55 53 56", "78 83 85 87 86 89 86", "15 22 23 25 24 24", "56 62 65 63 64 68", "3 10 12 14 11 18", "52 58 58 59 60 63 65", "80 85 88 89 89 91 92 91", "35 41 41 43 46 46", "2 8 10 13 13 16 17 21", "52 59 59 61 64 66 67 72", "42 47 50 51 52 56 59 62", "3 10 13 15 16 20 18", "59 66 70 72 75 78 78", "27 33 35 38 40 44 48", "35 40 43 47 53", "49 54 57 63 65 68 71", "40 47 50 56 57 60 57", "9 16 17 20 23 29 29", "9 14 17 18 24 25 26 30", "49 56 58 59 61 68 70 75", "31 28 25 23 20 18 20", "44 42 39 36 33 31 29 29", "16 15 14 12 9 7 3", "35 34 32 30 28 27 22", "98 96 94 97 94 93", "82 80 79 82 80 79 82", "80 78 81 80 80", "39 36 37 36 32", "24 22 20 19 18 19 16 10", "71 69 66 63 61 61 58 56", "72 71 68 67 66 66 68", "99 97 94 91 90 90 88 88", "90 87 84 83 83 80 79 75", "73 70 67 66 64 61 61 56", "20 18 17 15 12 8 6", "66 63 60 59 55 58", "30 27 24 21 17 17", "90 88 87 86 82 80 76", "76 74 72 68 67 64 57", "90 89 88 83 82", "64 61 59 56 54 47 48", "23 20 19 17 16 10 7 7", "44 42 36 35 31", "52 51 50 44 37", "56 58 57 55 54 52", "5 8 7 6 5 7", "26 28 27 25 23 21 19 19", "30 32 29 26 24 22 21 17", "29 30 29 26 23 22 17", "80 81 80 81 80 78 76 75", "85 87 85 83 85 86", "70 72 70 68 69 68 68", "45 48 51 48 44", "43 46 44 45 44 41 39 34", "40 42 39 36 34 34 33 32", "73 75 75 74 71 70 71", "29 31 29 28 28 28", "18 19 16 16 12", "11 14 13 11 11 8 1", "91 92 88 86 85 82 81", "59 62 58 56 57", "8 10 9 5 5", "96 99 97 95 93 91 87 83", "22 23 19 18 16 15 8", "65 66 64 59 58 56 54 52", "18 21 18 15 9 8 5 8", "53 54 49 48 47 46 46", "53 54 47 45 41", "73 75 74 73 72 66 65 60", "16 16 14 11 8 5", "43 43 40 38 37 36 38", "19 19 17 14 14", "85 85 82 81 79 75", "83 83 81 78 75 72 66", "45 45 43 46 43 40", "9 9 6 7 10", "93 93 92 91 90 93 93", "16 16 17 14 13 12 10 6", "12 12 9 8 7 9 7 2", "88 88 87 87 85 83 80 77", "9 9 6 5 4 2 2 3", "99 99 99 97 95 95", "56 56 54 52 49 49 48 44", "56 56 56 53 46", "52 52 49 45 43 40 39", "99 99 97 95 91 90 87 89", "46 46 45 43 42 40 36 36", "87 87 84 80 76", "72 72 69 65 59", "44 44 42 37 34 31 30", "90 90 87 85 79 82", "56 56 55 49 46 43 42 42", "16 16 13 7 3", "52 52 51 49 46 43 36 30", "73 69 67 65 63 62 61 60", "36 32 30 28 31", "68 64 62 61 58 55 54 54", "14 10 8 7 5 1", "58 54 51 48 45 43 42 35", "34 30 27 30 29 26 24", "81 77 76 73 74 77", "32 28 25 23 24 24", "47 43 42 40 39 40 36", "18 14 15 14 9", "44 40 38 38 37", "84 80 77 77 79", "84 80 79 79 77 77", "18 14 14 13 10 6", "86 82 80 80 73", "80 76 72 70 67 66", "35 31 30 27 23 20 23", "79 75 72 68 66 66", "57 53 52 49 48 47 43 39", "65 61 59 56 52 47", "66 62 55 52 51 48 45", "35 31 30 28 21 20 18 21", "88 84 82 76 74 74", "88 84 82 79 72 70 69 65", "85 81 75 72 65", "18 13 10 9 7 6", "52 45 44 41 40 38 41", "76 71 69 67 65 65", "40 33 31 28 24", "99 92 89 86 83 81 74", "77 71 68 69 68 67", "72 65 62 65 63 61 62", "52 45 48 46 43 43", "97 91 92 91 87", "32 25 24 21 22 17", "89 84 81 79 76 74 74 73", "91 84 84 82 83", "90 84 84 82 82", "71 66 64 64 61 57", "35 28 25 23 21 21 20 15", "95 90 88 84 83", "34 27 24 22 19 15 17", "61 54 53 51 47 46 43 43", "36 29 27 25 22 21 17 13", "53 46 43 39 33", "33 27 25 18 16 13 10 8", "43 38 31 29 28 30", "81 74 68 66 63 63", "82 75 70 67 64 60", "34 27 26 21 14", "71 73 76 79 80 83 87", "39 43 43 46 48 47", "45 46 45 48 46 44 42 42", "78 73 72 70 66 64 63 64", "15 15 14 13 15 13 9", "86 86 90 92 93 94 97 97", "83 76 75 71 66", "77 81 82 85 87 84", "44 45 42 39 36 35 35", "34 31 29 26 23 24", "10 7 9 11 9 10 14", "21 16 9 8 6 9", "28 28 29 31 32 36", "81 77 76 71 70 69 68 61", "33 37 41 42 39", "68 62 59 55 52", "63 67 69 71 77 80 80", "54 54 51 48 47 45 42", "23 26 23 17 16 14 16", "87 90 89 87 87 80", "67 60 59 57 53", "80 81 78 74 71", "16 16 18 21 22 24 24", "1 1 4 10 14", "59 59 62 63 69 76", "63 67 69 70 72 78 82", "34 28 25 22 23 22 15", "31 25 24 24 23 21 24", "55 56 54 51 48 42 40", "82 80 84 86 93", "71 71 69 67 66 62", "81 85 88 91 93 96 93 96", "37 33 32 29 29 23", "79 86 88 91 98", "61 67 67 70 72 73 78", "55 51 48 43 45", "65 66 65 62 64 62 55", "57 53 51 50 53 55", "75 69 66 69 68 66 62", "45 47 48 48 49 51 53 53", "52 52 55 60 60", "69 65 62 62 61 58 55 51", "30 36 39 42 44 44 46", "16 16 14 13 11 12", "20 24 28 31 31", "92 88 82 81 79 75", "32 38 40 43 45 46 46", "55 54 53 56 55 51", "44 44 47 47 49", "83 83 79 78 77 73", "83 78 76 74 73 66 66", "61 62 63 64 69 76", "85 90 93 97 98", "19 22 20 19 18", "72 71 73 75 75 78 83", "25 28 26 25 24 19", "35 38 34 32 28", "74 77 79 82 81 82", "55 54 59 61 63", "72 73 70 67 65 64 67", "66 62 59 56 55 53 47", "71 71 74 74 76 77 82", "8 10 11 14 15 17 20 22", "41 43 44 47 49 51 53 56", "48 50 51 54 56", "77 74 71 69 68", "5 6 8 11 12 13", "41 40 37 36 34 31 28", "22 19 18 16 14", "60 58 57 56 54 52 51 50", "29 31 32 34 35 36 37", "15 18 21 22 25", "84 82 80 79 76 73 70", "40 37 34 31 29 27 26 24", "27 29 31 32 34 37 40 41", "98 97 95 92 89 86 85", "14 17 20 21 23 24", "15 16 19 20 21 23 25 28", "8 10 13 16 17 19 21 24", "58 59 62 63 66 69 72", "15 14 13 10 9", "36 37 40 42 44 46 49 52", "40 38 37 34 32 31 29 27", "1 2 4 5 8", "16 19 21 22 23 25 28", "6 9 11 14 15 17 19 21", "71 73 74 75 76 79 82", "74 72 70 67 64", "14 12 10 8 7 6", "85 86 88 90 92 94 95", "23 21 20 18 17 15 12 11", "30 33 35 37 39 42", "54 57 59 62 65 66", "83 85 87 89 92 94 96 98", "23 24 26 28 30 33", "87 88 91 94 96 99", "85 83 81 79 78 75", "99 97 96 95 93 90 89 88", "4 5 7 10 11 12 13 14", "67 69 71 74 77", "29 26 24 22 20 19 16", "15 14 13 11 9 7", "49 48 45 42 40 38 36 33", "98 96 93 90 87 85 84 83", "2 3 6 8 11 12 15 17", "73 72 70 68 67 66 65", "14 11 8 6 4 2", "18 19 20 23 24 25 26 28", "75 72 71 69 66 64 62", "17 18 21 22 25", "69 71 74 76 78", "51 49 48 45 43 41 39 37", "66 63 60 58 55 54 51", "91 93 95 97 98", "35 32 31 28 25", "43 41 40 37 34 32 30 28", "72 69 67 64 61 60", "80 82 83 86 87 90", "34 37 39 42 45 47 48", "38 40 43 45 48 49", "37 39 42 45 46 48 50 51", "91 93 96 97 99", "9 6 5 3 1", "63 64 66 68 71 74 77", "41 43 44 45 46 48", "3 5 7 8 10 13 14 17", "97 95 94 92 90 89 86 83", "10 9 7 4 1", "28 30 31 34 35 37 40 43", "42 44 45 48 50 51 52 53", "70 71 72 73 76 79", "28 29 31 32 34", "22 21 18 17 16 13 10 8", "84 81 78 75 73 71", "30 33 34 35 36 38", "57 58 61 64 67 68 71", "63 65 67 68 71", "41 39 38 35 32 29 28 27", "7 9 11 13 14", "27 25 23 22 21 20", "89 88 86 83 80", "32 30 27 26 25", "29 27 26 23 20 17 14 13", "92 91 89 88 87 85", "34 31 30 27 24 23 20", "73 70 68 65 62", "79 82 83 84 87 90 92 95", "11 14 17 20 21 24 27 29", "23 20 18 17 16 14 13", "7 9 10 12 15", "11 12 14 17 19 21 22", "27 26 24 21 20 18", "65 67 70 72 73 76", "22 23 25 26 29 31 33", "66 69 71 74 75 78", "44 47 50 53 54 56 59", "16 14 11 10 8 6 4 2", "49 50 51 53 55 58", "67 65 63 61 60 59 58", "98 95 94 91 89", "56 58 59 61 64 65 68 71", "74 72 71 70 67 65 64", "5 8 9 11 12", "51 49 48 46 45 43 40", "36 33 30 28 25 22 20", "59 61 62 63 65 68 69 70", "33 32 29 26 23 22 20", "27 28 31 33 34 36 39", "22 19 18 15 14 12", "40 42 43 45 46 48", "25 27 28 30 33", "6 8 9 12 15 17 18", "65 63 60 59 58", "99 98 97 94 92 90 89 87", "9 10 13 14 15 18", "11 14 17 20 21 23 25 28", "90 87 86 84 83 81 78", "47 44 43 42 40 37 35 33", "32 33 34 36 38 40 42 45", "61 62 65 68 70 72", "62 64 67 68 70 73 76", "51 49 48 47 44 41", "37 35 34 33 31", "32 35 38 39 41 42", "85 88 89 91 93", "29 32 34 36 38 41", "33 31 29 27 24 23 22", "21 22 23 24 25 26 27 30", "41 44 47 48 50 53 54", "47 46 43 42 41 39 36 33", "12 13 16 17 20 23 24", "11 13 16 19 20 23 25", "82 81 79 77 74", "33 35 36 37 40 42", "64 66 68 71 73 74", "61 58 55 53 51 50 48", "97 95 94 91 89 88", "75 76 79 80 81 83", "54 56 59 60 61 62", "94 91 90 89 88", "76 74 72 70 68 67 64", "24 27 28 31 34 35 37", "19 16 15 14 13 12 9 8", "54 56 57 58 61 63", "43 44 47 49 51", "52 49 47 46 43 41 38", "4 6 9 11 14", "41 43 44 47 48 51 54 57", "4 7 9 10 13 16 19", "60 61 63 66 69 70", "82 79 76 74 71", "61 63 65 68 69 71 74", "37 34 33 30 27", "23 26 28 29 31 32 34 36", "90 92 94 97 98", "54 57 59 60 62 65", "16 19 21 22 24 27 28 31", "64 63 62 60 57 54", "8 9 11 14 15 16 17", "32 30 28 26 24 23 20", "22 20 19 16 14", "53 51 48 45 43 42 39 36", "32 35 38 41 42 44 46", "40 41 42 45 46 49 52", "24 27 30 32 33 35 37 38", "15 16 17 19 22", "53 50 47 45 42 39 37 35", "55 58 61 64 67 70 72", "11 12 15 18 20 22 25 26", "42 40 39 36 35 33", "63 66 69 70 73", "83 84 87 89 91 92 94 95", "11 14 16 17 20 22 25 27", "40 42 45 48 49 52", "39 36 33 30 28 26", "75 74 73 70 67 65 63 61", "23 26 28 30 33 36 39 40", "36 38 40 41 44 46 48 50", "20 18 15 13 12 10 9", "78 75 73 70 68 67", "52 51 49 48 47 45 42 39", "93 91 89 88 85 82", "37 38 41 42 44 47", "13 12 9 8 6 3", "92 91 89 86 85 83 80", "49 46 43 42 40 39 37", "62 60 59 56 54 53 50", "59 58 57 54 53 51 49 48", "88 91 92 93 94 96 97", "29 30 32 34 37 40 41 43", "38 37 35 33 31", "82 79 78 75 72 71 68", "32 31 30 28 25 24 22 20", "91 88 85 83 81 78 77", "64 67 69 70 72 73 75 78", "3 4 5 7 10 13", "96 94 92 91 88", "57 54 52 49 46", "54 52 51 49 46 44 42 40", "68 66 65 63 61 58 55 52", "61 58 55 52 51", "55 58 60 62 65 67 69 71", "9 11 13 15 18 20 21 24", "31 28 26 25 23 20 19 16", "37 38 39 42 45 48", "34 35 38 40 43 46", "35 38 41 42 44 46 47", "81 80 78 75 72 70 68 65", "33 36 37 38 40 42 44", "59 57 54 53 50 49 48 45", "96 95 93 90 88", "82 85 87 89 90", "56 58 61 63 64 65 66 67", "42 39 37 34 32", "8 11 12 15 17 19 20", "36 38 40 42 45", "59 57 56 53 52", "20 21 24 26 28 30 32 33", "81 78 76 73 71 70", "57 60 63 65 66 67 69", "82 81 79 77 76", "63 64 67 68 70 73 75", "84 87 88 90 92 94", "42 40 39 36 35 32", "51 49 48 45 44", "21 23 24 27 28 29", "95 92 89 88 85", "51 48 46 43 41 38 35", "20 23 24 26 27 29 30", "25 27 29 32 33 35 36", "29 27 26 24 22 21 18 15", "24 25 26 27 30 32", "25 26 28 31 34", "33 35 37 38 40 41 44", "15 18 21 24 26 27", "50 47 46 43 40 37", "1 2 4 6 7 9 10", "24 21 19 16 14 11", "95 93 90 89 88 85 82", "24 21 18 15 14 12 9", "47 48 50 52 53 54 56 58", "99 97 96 95 93 90 87 84", "32 33 36 39 41 43 45 46", "72 70 68 67 64 61", "87 86 85 83 82 81 78 76", "57 59 61 64 65 67", "16 17 20 21 23 25 27 28", "12 15 18 21 23", "93 92 91 90 88 85 82 81", "39 38 35 32 30 28 27 25", "50 53 56 59 62", "66 65 64 62 61 59", "23 24 27 30 32 35 37 40", "7 9 12 15 17 19 21 22", "77 74 72 71 68", "56 53 50 48 46", "83 81 80 79 78 75 73 70", "49 51 54 57 58 59", "99 97 94 92 91 89 86", "23 25 28 31 33 34 37", "56 54 53 51 50 48 46", "93 92 90 88 87 84 83", "84 82 79 76 74 73 71", "67 64 62 60 59", "45 42 40 38 36 34", "99 96 93 91 90", "39 40 43 45 47 48 50", "83 80 77 76 75 74 73", "5 7 8 9 10 12", "67 69 71 72 73", "37 38 40 41 43 46 47", "30 33 36 39 41 44 45 48", "96 95 94 93 91 88 85 82", "61 63 64 65 68", "44 46 47 50 51 52", "72 74 77 80 83 84 85", "73 71 69 68 66 64", "47 44 42 41 40 38", "36 39 42 44 47", "92 91 88 87 86 84 82", "57 58 60 62 65", "61 63 65 68 69 72", "29 28 26 24 21 19 16 15", "77 80 81 83 86 87 88 91", "29 30 31 32 34 35 38", "40 42 43 45 47", "54 51 50 49 48 46 44 41", "46 48 49 50 53", "55 53 52 51 48 46 43 41", "64 63 62 59 58", "46 49 51 53 56 57 60", "98 97 94 92 90 87 86", "28 25 22 21 18 15 14", "25 22 21 20 17 16", "49 51 53 55 58", "34 32 29 27 25 24 21", "74 71 68 65 64 63 61", "26 29 31 32 34 35 37", "84 85 88 89 92 94 96", "22 19 17 14 13", "4 6 7 10 11 13", "69 67 66 63 62 59", "12 11 8 5 4", "1 4 6 8 9 11 14 15", "23 25 27 29 32", "68 70 72 73 74", "38 35 34 32 29 27 25", "72 69 66 65 63 62 59 56", "68 71 72 75 76 79", "39 41 42 43 44 47 50", "81 78 75 72 69 66 64", "82 85 86 89 92 93 95 97", "65 67 68 70 71", "93 91 90 87 85 83 82", "97 94 93 90 87 84 82 80", "65 67 70 71 74 77", "24 22 20 17 14 12 9", "34 31 29 26 25 24", "23 24 27 29 30 31", "65 68 71 72 74", "51 50 47 46 45 44 41", "92 90 87 86 85", "28 29 32 33 35 37", "30 28 26 23 22 20 19", "14 17 18 19 22 24 26 29", "49 51 54 55 56 58", "54 56 57 58 61 63 66 69", "31 33 36 38 41", "80 81 84 86 87 88 91 92", "60 58 57 56 53 50 49", "73 71 68 65 63 60 59", "49 51 53 54 57 60 61 64", "29 27 25 22 21 18 17 15", "73 70 67 64 63 62", "53 56 58 61 63 64", "41 39 36 34 32 29 28 26", "18 15 12 10 9 6", "17 18 21 23 25 28 31 34", "47 45 42 39 36 35 33", "90 88 85 82 81 78 76 74", "15 13 12 10 8 6", "66 65 64 62 61", "99 97 94 93 91 88 87 86", "62 59 57 55 53", "23 26 28 29 31", "71 70 68 65 62 59 58", "25 27 30 32 34 36 38 41", "75 78 81 82 83 84", "79 77 75 73 71 68", "87 84 81 80 77 76 75 74", "66 67 68 69 71 72 75", "6 9 11 12 13 15", "87 86 83 80 77 76 73 70", "28 27 25 23 20 19 18", "49 48 47 44 42", "15 14 12 11 10 7 5", "34 35 36 39 41 42 44 45", "58 57 55 52 51", "59 57 55 54 51 50 49 48", "19 16 15 13 10 8", "60 61 63 64 66 68", "48 51 53 55 56 58 60 63", "46 44 43 42 40 38", "97 96 93 91 88 85 82 81", "39 42 45 47 50 52 54", "15 12 9 7 6 3", "71 72 73 75 77", "64 63 62 59 57 56", "60 58 55 52 51 49 46 44", "63 66 68 70 73 74 75 77", "16 19 22 23 25 27 29", "55 56 59 60 61 62 63", "86 84 83 80 79 77", "32 34 37 39 40 41 44 45", "38 40 41 43 44 47 48 49", "19 18 15 14 11", "70 71 74 75 77", "28 25 22 21 20 19 16", "84 85 88 89 90", "85 88 89 91 93 94 97", "75 72 69 68 65", "37 35 34 32 29 28 27 26", "44 42 41 39 37 36 34", "13 11 9 8 6 4", "32 29 26 24 21", "60 59 58 55 52 49", "45 46 48 51 52 53 56 58", "35 38 41 44 46", "53 51 48 47 45 44 42 39", "94 91 90 87 84 82", "4 6 7 8 11 13 16 19", "94 92 90 87 86 83 81 79", "82 79 76 75 72", "87 90 91 93 95 96 98", "40 43 46 48 51 53 56 58", "23 22 21 18 16 15 13 10", "69 70 72 73 76 78 79", "73 72 70 67 64 63", "31 28 25 24 21", "73 75 78 81 84", "89 86 84 82 79 78 77 75", "33 35 37 40 42 45 47 49", "71 74 77 78 79 81", "44 46 48 51 54", "53 50 49 47 44 42 39", "39 40 42 45 46", "70 73 76 77 79 81 83 86", "3 5 8 10 13 14 15", "28 31 32 34 36 38", "65 63 62 60 59 56", "28 30 31 34 37 39", "82 80 77 75 73 72 69 67", "41 40 39 37 36 33 31", "93 91 89 87 86", "33 32 29 27 24 23", "65 67 68 71 72 73 74 75", "49 51 52 53 55 57", "2 3 5 7 9 10 12", "52 49 47 46 44", "66 67 68 70 73 74", "57 55 53 51 50", "32 33 36 38 39 42", "59 61 64 65 68 70 71", "33 34 36 37 38 39 42", "56 59 61 64 65 66 68", "36 33 30 28 26", "96 94 92 89 87 84", "50 48 45 43 40 38", "65 63 60 59 56 53", "69 71 72 75 76 77 80", "42 41 38 35 33 31 28 26", "67 65 62 60 58 55", "97 96 94 92 89", "11 12 15 16 19 20 22 25", "83 85 88 91 93", "87 85 83 80 77 75", "40 42 44 45 47 50 53 55", "86 83 81 78 76 74 71 68", "6 7 8 10 11 13 14", "83 82 81 80 78 76", "72 75 77 78 79", "93 90 89 88 85 82 79", "64 67 70 71 72 75 78 81", "11 12 13 15 18" }; | |
fn getSafeReports() !void { | |
var safeReports: i16 = 0; | |
for (0..reports.len) |i| { | |
var iterator = std.mem.splitScalar(u8, reports[i], ' '); | |
var previous: i32 = 0; | |
var safeReport: bool = true; | |
var increased: bool = false; | |
var decreased: bool = false; | |
while (iterator.next()) |level| { | |
const levelValue = try std.fmt.parseInt(i32, level, 10); | |
if (previous != 0) { | |
if (@abs(levelValue - previous) > 3) { | |
safeReport = false; | |
break; | |
} | |
if (levelValue >= previous) { | |
increased = true; | |
} | |
if (levelValue <= previous) { | |
decreased = true; | |
} | |
} | |
previous = levelValue; | |
} | |
if (safeReport and (increased != decreased)) { | |
safeReports += 1; | |
} | |
} | |
std.debug.print("Part 1 Safe Reports: {d}\n", .{safeReports}); | |
} | |
fn getSafeReportsWithDamper() !void { | |
const allocator = std.heap.page_allocator; | |
var safeReports: i16 = 0; | |
for (0..reports.len) |i| { | |
var iterator = std.mem.splitScalar(u8, reports[i], ' '); | |
var levels = std.ArrayList(i8).init(allocator); | |
while (iterator.next()) |level| { | |
const levelValue = try std.fmt.parseInt(i8, level, 10); | |
try levels.append(levelValue); | |
} | |
if (isSafe(levels.items)) { | |
safeReports += 1; | |
} else { | |
for (0..levels.items.len) |j| { | |
var clone = try levels.clone(); | |
_ = clone.orderedRemove(j); | |
if (isSafe(clone.items)) { | |
safeReports += 1; | |
break; | |
} | |
} | |
} | |
} | |
std.debug.print("Part 2 Safe Reports: {d}\n", .{safeReports}); | |
} | |
fn isSafe(levels: []i8) bool { | |
const initialDifference: i8 = levels[0] - levels[1]; | |
const asc = initialDifference < 0; | |
for (1..levels.len) |i| { | |
const difference: i8 = levels[i - 1] - levels[i]; | |
if (@abs(difference) > 3 or (asc and difference >= 0) or (!asc and difference <= 0)) { | |
return false; | |
} | |
} | |
return true; | |
} | |
pub fn main() !void { | |
try getSafeReports(); | |
try getSafeReportsWithDamper(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment