Skip to content

Commit 39e68ea

Browse files
committed
feat: solve day 9 part 1
1 parent cd7f3c7 commit 39e68ea

File tree

3 files changed

+127
-6
lines changed

3 files changed

+127
-6
lines changed
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package com.adventofcode.flashk.day09;
2+
3+
import java.sql.Array;
4+
import java.util.ArrayDeque;
5+
import java.util.Deque;
6+
import java.util.List;
7+
8+
public class DiskFragmenter {
9+
10+
private static final char EMPTY = '.';
11+
private char[] diskMap;
12+
private char[] disk;
13+
private int lastBlockIndex = 0;
14+
private Deque<Integer> diskDeque = new ArrayDeque<>();
15+
16+
public DiskFragmenter(List<String> inputs) {
17+
diskMap = inputs.get(0).toCharArray();
18+
disk = new char[diskMap.length*9];
19+
20+
int fileId = 0;
21+
22+
for(int i = 0; i < diskMap.length; i++) {
23+
int blockSize = Character.getNumericValue(diskMap[i]);
24+
for(int blockIndex = lastBlockIndex; blockIndex < lastBlockIndex + blockSize; blockIndex++) {
25+
if(i % 2 == 0) {
26+
disk[blockIndex] = Character.forDigit(fileId, 10);
27+
diskDeque.add(fileId);
28+
} else {
29+
disk[blockIndex] = EMPTY;
30+
diskDeque.add(-1);
31+
}
32+
}
33+
34+
lastBlockIndex += blockSize;
35+
if(i % 2 == 0) {
36+
fileId++;
37+
}
38+
}
39+
40+
}
41+
42+
public long solveA() {
43+
44+
45+
long result = 0;
46+
int index = 0;
47+
while(!diskDeque.isEmpty()) {
48+
int current = diskDeque.pollFirst();
49+
if(current != -1) {
50+
result += index * current;
51+
index++;
52+
} else if(diskDeque.peekLast() != null){
53+
diskDeque.addFirst(diskDeque.pollLast());
54+
}
55+
}
56+
57+
return result;
58+
59+
}
60+
61+
/*
62+
private long checksum() {
63+
long result = 0;
64+
int i = 0;
65+
while(disk[i] != EMPTY) {
66+
result += ((long) Character.getNumericValue(disk[i])*(long)i);
67+
i++;
68+
}
69+
70+
return result;
71+
}
72+
73+
private void moveToLeft(int blockIndex) {
74+
75+
char fileId = disk[blockIndex];
76+
boolean emptyFound = false;
77+
int i = 0;
78+
while(!emptyFound && i < blockIndex) {
79+
80+
if(disk[i] == EMPTY) {
81+
emptyFound = true;
82+
disk[blockIndex] = EMPTY;
83+
disk[i] = fileId;
84+
}
85+
86+
i++;
87+
}
88+
}
89+
*/
90+
91+
92+
}

src/test/java/com/adventofcode/flashk/day09/Day09Test.java

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,30 @@
1717
import com.adventofcode.flashk.common.test.utils.PuzzleTest;
1818
import com.adventofcode.flashk.common.test.utils.Input;
1919

20+
import static org.junit.jupiter.api.Assertions.assertEquals;
21+
2022
@DisplayName(TestDisplayName.DAY_09)
2123
@TestMethodOrder(OrderAnnotation.class)
22-
@Disabled // TODO Remove comment when implemented
2324
public class Day09Test extends PuzzleTest {
2425

2526
private static final String INPUT_FOLDER = TestFolder.DAY_09;
2627

28+
@Test
29+
@Order(1)
30+
@Tag(TestTag.PART_1)
31+
@Tag(TestTag.SAMPLE)
32+
@DisplayName(TestDisplayName.PART_ONE_SINGLE_SAMPLE)
33+
void testSolvePart1SingleSample() {
34+
35+
// Read input file
36+
List<String> inputs = Input.readStringLines(INPUT_FOLDER, TestFilename.INPUT_FILE_SINGLE_SAMPLE);
37+
38+
DiskFragmenter diskFragmenter = new DiskFragmenter(inputs);
39+
40+
//assertEquals(0L, diskFragmenter.solveA());
41+
42+
}
43+
2744
@Test
2845
@Order(1)
2946
@Tag(TestTag.PART_1)
@@ -33,7 +50,11 @@ public void testSolvePart1Sample() {
3350

3451
// Read input file
3552
List<String> inputs = Input.readStringLines(INPUT_FOLDER, TestFilename.INPUT_FILE_SAMPLE);
36-
53+
54+
DiskFragmenter diskFragmenter = new DiskFragmenter(inputs);
55+
56+
assertEquals(1928L, diskFragmenter.solveA());
57+
3758
}
3859

3960
@Test
@@ -45,7 +66,10 @@ public void testSolvePart1Input() {
4566

4667
// Read input file
4768
List<String> inputs = Input.readStringLines(INPUT_FOLDER, TestFilename.INPUT_FILE);
48-
69+
70+
DiskFragmenter diskFragmenter = new DiskFragmenter(inputs);
71+
72+
assertEquals(6310675819476L, diskFragmenter.solveA());
4973
}
5074

5175
@Test
@@ -57,7 +81,8 @@ public void testSolvePart2Sample() {
5781

5882
// Read input file
5983
List<String> inputs = Input.readStringLines(INPUT_FOLDER, TestFilename.INPUT_FILE_SAMPLE);
60-
84+
DiskFragmenter diskFragmenter = new DiskFragmenter(inputs);
85+
assertEquals(2858L, diskFragmenter.solveB());
6186
}
6287

6388
@Test
@@ -69,7 +94,11 @@ public void testSolvePart2Input() {
6994

7095
// Read input file
7196
List<String> inputs = Input.readStringLines(INPUT_FOLDER, TestFilename.INPUT_FILE);
72-
97+
98+
99+
System.out.println("Solution: ");
100+
assertEquals(0L, 0L);
101+
73102
}
74103

75104
}

src/test/resources/inputs

0 commit comments

Comments
 (0)