Skip to content

Commit 0ed071a

Browse files
committed
chore(aoc-2024): day2 part 2
Signed-off-by: Márk Kővári <kovarimarkofficial@gmail.com>
1 parent 0907b7e commit 0ed071a

2 files changed

Lines changed: 55 additions & 3 deletions

File tree

2024/cmd/02.go

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func countSafeLevels(levels [][]int) int {
4444
}
4545

4646
func isLevelSafe(row []int) bool {
47-
if len(row) < 3 {
47+
if len(row) < 2 {
4848
return false
4949
}
5050
increasing := row[0] < row[1]
@@ -62,3 +62,33 @@ func isLevelSafe(row []int) bool {
6262
}
6363
return true
6464
}
65+
66+
func isLevelSafeTolerate(row []int) bool {
67+
for i := 0; i < len(row); i++ {
68+
if isLevelSafe(skipAtFrom(i, row)) {
69+
return true
70+
}
71+
}
72+
return false
73+
}
74+
75+
func countSafeLevelsTolerate(levels [][]int) int {
76+
count := 0
77+
for _, row := range levels {
78+
if isLevelSafeTolerate(row) {
79+
count++
80+
}
81+
}
82+
return count
83+
}
84+
85+
func skipAtFrom(index int, elements []int) []int {
86+
newElements := make([]int, 0)
87+
for i := range len(elements) {
88+
if i == index {
89+
continue
90+
}
91+
newElements = append(newElements, elements[i])
92+
}
93+
return newElements
94+
}

2024/cmd/02_test.go

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ func Test02Example(t *testing.T) {
99
}
1010
countSafe := countSafeLevels(levels)
1111
if countSafe != 2 {
12-
t.Fatalf("Expected 2 safe leves, got=%d", countSafe)
12+
t.Fatalf("Expected 2 safe levels, got=%d", countSafe)
1313
}
1414
}
1515

@@ -20,6 +20,28 @@ func Test02Input(t *testing.T) {
2020
}
2121
countSafe := countSafeLevels(levels)
2222
if countSafe != 686 {
23-
t.Fatalf("Expected 686 safe leves, got=%d", countSafe)
23+
t.Fatalf("Expected 686 safe levels, got=%d", countSafe)
24+
}
25+
}
26+
27+
func Test02Part2Example(t *testing.T) {
28+
levels, err := read02File("../data/02/example")
29+
if err != nil {
30+
t.Fatalf("Error reading file: %v", err)
31+
}
32+
countSafe := countSafeLevelsTolerate(levels)
33+
if countSafe != 4 {
34+
t.Fatalf("Expected 4 safe levels, got=%d", countSafe)
35+
}
36+
}
37+
38+
func Test02Part2Input(t *testing.T) {
39+
levels, err := read02File("../data/02/input")
40+
if err != nil {
41+
t.Fatalf("Error reading file: %v", err)
42+
}
43+
countSafe := countSafeLevelsTolerate(levels)
44+
if countSafe != 717 {
45+
t.Fatalf("Expected 717 safe levels, got=%d", countSafe)
2446
}
2547
}

0 commit comments

Comments
 (0)