Skip to content

Commit 6c4574f

Browse files
committed
Advent of Code 2021 - Day 6
1 parent a836669 commit 6c4574f

File tree

13 files changed

+130
-30
lines changed

13 files changed

+130
-30
lines changed

pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020

2121
<dependencies>
2222
<dependency>
23-
<groupId>junit</groupId>
24-
<artifactId>junit</artifactId>
25-
<version>4.11</version>
23+
<groupId>org.junit.jupiter</groupId>
24+
<artifactId>junit-jupiter</artifactId>
25+
<version>5.8.2</version>
2626
<scope>test</scope>
2727
</dependency>
2828
<dependency>

src/main/java/com/codingnagger/App.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ public class App {
1313
public static void main(String[] args) throws IOException {
1414
System.out.println("Advent of Code 2021");
1515

16-
List<String> input = InputLoader.Load("day5.txt");
16+
List<String> input = InputLoader.Load("day6.txt");
1717

18-
Day day = new Day5();
18+
Day day = new Day6();
1919

2020
System.out.println("Part 1:");
2121
System.out.println(day.partOne(input));
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package com.codingnagger.days;
2+
3+
import java.math.BigDecimal;
4+
import java.math.BigInteger;
5+
import java.util.ArrayList;
6+
import java.util.Arrays;
7+
import java.util.List;
8+
import java.util.Optional;
9+
import java.util.stream.Collectors;
10+
11+
import static com.codingnagger.utils.InputConverter.convertToIntegers;
12+
13+
public class Day6 implements Day {
14+
@Override
15+
public String partOne(List<String> input) {
16+
LanterfishPool pool = parse(input);
17+
pool.run(80);
18+
return pool.fishCount().toString();
19+
}
20+
21+
@Override
22+
public String partTwo(List<String> input) {
23+
LanterfishPool pool = parse(input);
24+
pool.run(256);
25+
return pool.fishCount().toString();
26+
}
27+
28+
public LanterfishPool parse(List<String> input) {
29+
return new LanterfishPool(convertToIntegers(input.get(0), ","));
30+
}
31+
32+
public static class LanterfishPool {
33+
private final BigInteger[] fishes;
34+
35+
public LanterfishPool(List<Integer> fishStates) {
36+
fishes = new BigInteger[9];
37+
38+
for (int i = 0; i < 9; i++) {
39+
fishes[i] = BigInteger.ZERO;
40+
}
41+
42+
for (Integer state : fishStates) {
43+
fishes[state] = fishes[state].add(BigInteger.ONE);
44+
}
45+
}
46+
47+
public void run(int cycleCount) {
48+
for (int i = 0; i < cycleCount; i++) {
49+
tick();
50+
}
51+
}
52+
53+
public void tick() {
54+
BigInteger newBorns = fishes[0];
55+
56+
System.arraycopy(fishes, 1, fishes, 0, 8);
57+
58+
fishes[6] = fishes[6].add(newBorns);
59+
fishes[8] = newBorns;
60+
}
61+
62+
public BigInteger fishCount() {
63+
BigInteger count = BigInteger.ZERO;
64+
65+
for (int i = 0; i < 9; i++) {
66+
count = count.add(fishes[i]);
67+
}
68+
69+
return count;
70+
}
71+
}
72+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
package com.codingnagger.utils;
22

3+
import java.util.Arrays;
34
import java.util.List;
45
import java.util.stream.Collectors;
56

67
public class InputConverter {
78
public static List<Integer> convertToIntegers(List<String> input) {
89
return input.stream().map(Integer::parseInt).collect(Collectors.toList());
910
}
11+
12+
public static List<Integer> convertToIntegers(String input, String separator) {
13+
return Arrays.stream(input.split(",")).map(Integer::parseInt).collect(Collectors.toList());
14+
}
1015
}

src/main/resources/day6.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
1,1,3,1,3,2,1,3,1,1,3,1,1,2,1,3,1,1,3,5,1,1,1,3,1,2,1,1,1,1,4,4,1,2,1,2,1,1,1,5,3,2,1,5,2,5,3,3,2,2,5,4,1,1,4,4,1,1,1,1,1,1,5,1,2,4,3,2,2,2,2,1,4,1,1,5,1,3,4,4,1,1,3,3,5,5,3,1,3,3,3,1,4,2,2,1,3,4,1,4,3,3,2,3,1,1,1,5,3,1,4,2,2,3,1,3,1,2,3,3,1,4,2,2,4,1,3,1,1,1,1,1,2,1,3,3,1,2,1,1,3,4,1,1,1,1,5,1,1,5,1,1,1,4,1,5,3,1,1,3,2,1,1,3,1,1,1,5,4,3,3,5,1,3,4,3,3,1,4,4,1,2,1,1,2,1,1,1,2,1,1,1,1,1,5,1,1,2,1,5,2,1,1,2,3,2,3,1,3,1,1,1,5,1,1,2,1,1,1,1,3,4,5,3,1,4,1,1,4,1,4,1,1,1,4,5,1,1,1,4,1,3,2,2,1,1,2,3,1,4,3,5,1,5,1,1,4,5,5,1,1,3,3,1,1,1,1,5,5,3,3,2,4,1,1,1,1,1,5,1,1,2,5,5,4,2,4,4,1,1,3,3,1,5,1,1,1,1,1,1

src/test/java/com/codingnagger/AppTest.java

Lines changed: 0 additions & 18 deletions
This file was deleted.

src/test/java/com/codingnagger/days/Day1Test.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
package com.codingnagger.days;
22

33
import com.codingnagger.utils.InputLoader;
4-
import org.junit.Test;
5-
4+
import org.junit.jupiter.api.Test;
65

76
import java.util.List;
87

src/test/java/com/codingnagger/days/Day2Test.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
package com.codingnagger.days;
22

33
import com.codingnagger.utils.InputLoader;
4-
import org.junit.Test;
4+
import org.junit.jupiter.api.Test;
55

6-
import java.io.IOException;
76
import java.util.List;
87

98
import static org.assertj.core.api.Assertions.assertThat;

src/test/java/com/codingnagger/days/Day3Test.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.codingnagger.days;
22

33
import com.codingnagger.utils.InputLoader;
4-
import org.junit.Test;
4+
import org.junit.jupiter.api.Test;
55

66
import java.util.List;
77

src/test/java/com/codingnagger/days/Day4Test.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.codingnagger.days;
22

33
import com.codingnagger.utils.InputLoader;
4-
import org.junit.Test;
4+
import org.junit.jupiter.api.Test;
55

66
import java.util.List;
77

src/test/java/com/codingnagger/days/Day5Test.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.codingnagger.days;
22

33
import com.codingnagger.utils.InputLoader;
4-
import org.junit.Test;
4+
import org.junit.jupiter.api.Test;
55

66
import java.util.List;
77

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.codingnagger.days;
2+
3+
import com.codingnagger.utils.InputLoader;
4+
import org.junit.jupiter.api.Test;
5+
import org.junit.jupiter.params.ParameterizedTest;
6+
import org.junit.jupiter.params.provider.CsvSource;
7+
8+
import java.math.BigInteger;
9+
import java.util.Arrays;
10+
import java.util.List;
11+
12+
import static org.assertj.core.api.Assertions.assertThat;
13+
14+
public class Day6Test {
15+
private static final List<String> INPUT = InputLoader.LoadTest("day6.txt");
16+
private static final Day DAY = new Day6();
17+
18+
@Test
19+
public void partOne_shouldReturnExpectedResult() {
20+
String result = DAY.partOne(INPUT);
21+
22+
assertThat(result).isEqualTo("5934");
23+
}
24+
25+
@ParameterizedTest
26+
@CsvSource({"5,10", "6,10","7,10","8,10","10,12", "18,26"})
27+
public void partOne_lanternFishCount(int cyclesCount, BigInteger expectedResult) {
28+
Day6.LanterfishPool pool = new Day6.LanterfishPool(Arrays.asList(3,4,3,1,2));
29+
30+
pool.run(cyclesCount);
31+
32+
assertThat(pool.fishCount()).isEqualTo(expectedResult);
33+
}
34+
35+
@Test
36+
public void partTwo_shouldReturnExpectedResult() {
37+
String result = DAY.partTwo(INPUT);
38+
39+
assertThat(result).isEqualTo("26984457539");
40+
}
41+
}

src/test/resources/day6.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
3,4,3,1,2

0 commit comments

Comments
 (0)