Skip to content

Commit be593eb

Browse files
committed
Restore initial implementation for day 20
1 parent 9f712ff commit be593eb

File tree

9 files changed

+69
-72
lines changed

9 files changed

+69
-72
lines changed

src/main/java/com/adventofcode/flashk/day20/Broadcaster.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ public Broadcaster() {
99
}
1010

1111
@Override
12-
public void executePulse() {
13-
super.executePulse();
12+
public void processPulse() {
1413
if(!inputPulses.isEmpty()) {
1514

1615
Pair<Module, String> inputPulse = this.inputPulses.poll();
@@ -19,13 +18,13 @@ public void executePulse() {
1918
// Processes the pulse:
2019
// A broadcast module just sends the pulse to other modules.
2120
for(Module output : outputs) {
22-
output.addPulse(this, newOutputPulse);
21+
output.sendPulse(this, newOutputPulse);
2322
}
2423

2524
// Recursively process the pulses
26-
/*for(Module output : outputs) {
27-
output.process();
28-
}*/
25+
for(Module output : outputs) {
26+
output.processPulse();
27+
}
2928
}
3029

3130

src/main/java/com/adventofcode/flashk/day20/Button.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.adventofcode.flashk.day20;
22

3-
import org.apache.commons.lang3.tuple.ImmutablePair;
43
import org.apache.commons.lang3.tuple.Pair;
54

65
public class Button extends Module {
@@ -10,15 +9,13 @@ public Button(String name) {
109
}
1110

1211
@Override
13-
public void executePulse() {
14-
super.executePulse();
12+
public void processPulse() {
1513
if(!inputPulses.isEmpty()) {
1614
Pair<Module, String> inputPulse = this.inputPulses.poll();
1715
String newOutputPulse = inputPulse.getRight();
1816

19-
outputs.get(0).addPulse(this, newOutputPulse);
20-
21-
//outputs.get(0).process();
17+
outputs.get(0).sendPulse(this, newOutputPulse);
18+
outputs.get(0).processPulse();
2219

2320
}
2421

src/main/java/com/adventofcode/flashk/day20/Conjunction.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,16 @@ public Conjunction(String name) {
1414
}
1515

1616
@Override
17-
public void executePulse() {
18-
super.executePulse();
17+
public void sendPulse(Module origin, String value) {
18+
super.sendPulse(origin, value);
19+
memory.put(origin, value);
20+
}
21+
22+
@Override
23+
public void processPulse() {
1924
if(!inputPulses.isEmpty()) {
2025
Pair<Module, String> inputPulse = inputPulses.poll();
21-
Module module = inputPulse.getLeft();
22-
String pulse = inputPulse.getRight();
2326

24-
// Update memory
25-
memory.put(module, pulse);
26-
27-
// Verify memory values
2827
boolean isAllHigh = true;
2928
for(String memoryValue : memory.values()) {
3029
if(LOW.equals(memoryValue)) {
@@ -41,13 +40,13 @@ public void executePulse() {
4140
}
4241

4342
for(Module output : outputs) {
44-
output.addPulse(this, newOutputPulse);
43+
output.sendPulse(this, newOutputPulse);
4544
}
4645

4746
// Process childs
48-
/*for(Module output : outputs) {
49-
output.process();
50-
}*/
47+
for(Module output : outputs) {
48+
output.processPulse();
49+
}
5150

5251

5352
}

src/main/java/com/adventofcode/flashk/day20/FlipFlop.java

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.adventofcode.flashk.day20;
22

3+
import org.apache.commons.lang3.tuple.ImmutablePair;
34
import org.apache.commons.lang3.tuple.Pair;
45

56
public class FlipFlop extends Module {
@@ -14,8 +15,24 @@ public FlipFlop(String name) {
1415
}
1516

1617
@Override
17-
public void executePulse() {
18-
super.executePulse();
18+
public void sendPulse(Module origin, String value) {
19+
20+
System.out.println(origin.getName() + " -"+value+"-> " + getName());
21+
22+
// Update high and low counters
23+
if (LOW.equals(value)) {
24+
this.inputPulses.add(ImmutablePair.of(origin, value));
25+
increaseLowCount();
26+
} else {
27+
increaseHighCount();
28+
}
29+
30+
31+
}
32+
33+
@Override
34+
public void processPulse() {
35+
1936
if(!inputPulses.isEmpty())
2037
{
2138
Pair<Module, String> nextPulse = this.inputPulses.poll();
@@ -33,14 +50,14 @@ public void executePulse() {
3350
}
3451

3552
for(Module output : outputs) {
36-
output.addPulse(this, newOutputPulse);
53+
output.sendPulse(this, newOutputPulse);
3754
}
3855
}
3956

4057

41-
/*for(Module output : outputs) {
42-
output.process();
43-
}*/
58+
for(Module output : outputs) {
59+
output.processPulse();
60+
}
4461
}
4562

4663
}

src/main/java/com/adventofcode/flashk/day20/Module.java

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,47 +15,48 @@ public abstract class Module {
1515
public static final String HIGH = "high";
1616

1717
@Getter
18-
private String name;
18+
private final String name;
1919

20-
@Getter
21-
private long lowCount;
20+
protected Deque<Pair<Module,String>> inputPulses = new ArrayDeque<>();
2221

2322
@Getter
24-
private long highCount;
23+
protected List<Module> outputs = new ArrayList<>();
2524

2625
@Getter
27-
protected List<Module> outputs = new ArrayList<>();
28-
protected Deque<Pair<Module,String>> inputPulses = new ArrayDeque<>();
26+
private long lowCount;
2927

30-
protected boolean pulseExecuted = false;
28+
@Getter
29+
private long highCount;
3130

32-
public Module(String name) {
31+
protected Module(String name) {
3332
this.name = name;
3433
}
3534

36-
public void addPulse(Module origin, String value) {
35+
public void sendPulse(Module origin, String value) {
3736
this.inputPulses.add(ImmutablePair.of(origin, value));
3837
System.out.println(origin.name + " -"+value+"-> " + name);
3938

4039
// Update high and low counters
4140
if(LOW.equals(value)) {
42-
lowCount++;
41+
increaseLowCount();
4342
} else {
44-
highCount++;
43+
increaseHighCount();
4544
}
4645

4746
}
4847

49-
public void addOutput(Module output) {
50-
this.outputs.add(output);
48+
public void increaseLowCount() {
49+
lowCount++;
5150
}
5251

53-
public void executePulse() {
54-
pulseExecuted = true;
52+
public void increaseHighCount() {
53+
highCount++;
5554
}
5655

57-
public void reset() {
58-
pulseExecuted = false;
56+
public void addOutput(Module output) {
57+
this.outputs.add(output);
5958
}
6059

60+
public abstract void processPulse();
61+
6162
}

src/main/java/com/adventofcode/flashk/day20/Output.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@ public Output(String name) {
77
}
88

99
@Override
10-
public void executePulse() {
11-
super.executePulse();
10+
public void processPulse() {
1211
// Output does nothing
13-
//pulseExecuted = true;
1412
}
1513
}

src/main/java/com/adventofcode/flashk/day20/PulsePropagation.java

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -91,26 +91,9 @@ public PulsePropagation(List<String> inputs) {
9191
public long solveA(int pressTimes) {
9292
System.out.println();
9393

94-
95-
Deque<Module> queue = new ArrayDeque<>();
96-
9794
for(int i = 0; i < pressTimes; i++) {
98-
99-
button.addPulse(button, Module.LOW);
100-
queue.add(button);
101-
Set<Module> processedModules = new HashSet<>();
102-
do {
103-
Module module = queue.poll();
104-
module.executePulse();
105-
queue.addAll(module.getOutputs());
106-
processedModules.add(module);
107-
} while (!modules.isEmpty() && processedModules.size() < modules.size());
108-
109-
for(Module module : modules) {
110-
module.reset();
111-
}
112-
113-
queue.clear();
95+
button.sendPulse(button, Module.LOW);
96+
button.processPulse();
11497
}
11598

11699
long lows = 0;

src/test/java/com/adventofcode/flashk/day20/Day20Test.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public void testSolvePart1Sample() {
4747
List<String> inputs = Input.readStringLines(INPUT_FOLDER, TestFilename.INPUT_FILE_SAMPLE);
4848

4949
PulsePropagation pulsePropagation = new PulsePropagation(inputs);
50-
long result = pulsePropagation.solveA(1);
50+
long result = pulsePropagation.solveA(1000);
5151

5252
assertEquals(32000000, result);
5353
}
@@ -75,6 +75,7 @@ public void testSolvePart1Sample2() {
7575
@Tag(TestTag.PART_ONE)
7676
@Tag(TestTag.INPUT)
7777
@DisplayName(TestDisplayName.PART_ONE_INPUT)
78+
@Disabled // TODO enable
7879
public void testSolvePart1Input() {
7980

8081
System.out.print("1 | input | ");
@@ -83,7 +84,7 @@ public void testSolvePart1Input() {
8384
List<String> inputs = Input.readStringLines(INPUT_FOLDER, TestFilename.INPUT_FILE);
8485

8586
PulsePropagation pulsePropagation = new PulsePropagation(inputs);
86-
long result = pulsePropagation.solveA(1000);
87+
long result = pulsePropagation.solveA(1);
8788

8889
System.out.println("R: "+result);
8990
//assertEquals(0, result);
@@ -94,6 +95,7 @@ public void testSolvePart1Input() {
9495
@Tag(TestTag.PART_TWO)
9596
@Tag(TestTag.SAMPLE)
9697
@DisplayName(TestDisplayName.PART_TWO_SAMPLE)
98+
@Disabled // TODO enable
9799
public void testSolvePart2Sample() {
98100

99101
System.out.print("2 | sample | ");
@@ -108,6 +110,7 @@ public void testSolvePart2Sample() {
108110
@Tag(TestTag.PART_TWO)
109111
@Tag(TestTag.INPUT)
110112
@DisplayName(TestDisplayName.PART_TWO_INPUT)
113+
@Disabled // TODO enable
111114
public void testSolvePart2Input() {
112115

113116
System.out.print("2 | input | ");

src/test/resources/inputs

0 commit comments

Comments
 (0)