Skip to content

Commit 2ae51a1

Browse files
committed
Day 18 initial commit
1 parent eafae5c commit 2ae51a1

File tree

3 files changed

+273
-4
lines changed

3 files changed

+273
-4
lines changed

input0.txt

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
0: 3
2-
1: 2
3-
4: 4
4-
6: 4
1+
set a 1
2+
add a 2
3+
mul a a
4+
mod a 5
5+
snd a
6+
set a 0
7+
rcv a
8+
jgz a -1
9+
set a 1
10+
jgz a -2

input18.txt

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
set i 31
2+
set a 1
3+
mul p 17
4+
jgz p p
5+
mul a 2
6+
add i -1
7+
jgz i -2
8+
add a -1
9+
set i 127
10+
set p 622
11+
mul p 8505
12+
mod p a
13+
mul p 129749
14+
add p 12345
15+
mod p a
16+
set b p
17+
mod b 10000
18+
snd b
19+
add i -1
20+
jgz i -9
21+
jgz a 3
22+
rcv b
23+
jgz b -1
24+
set f 0
25+
set i 126
26+
rcv a
27+
rcv b
28+
set p a
29+
mul p -1
30+
add p b
31+
jgz p 4
32+
snd a
33+
set a b
34+
jgz 1 3
35+
snd b
36+
set f 1
37+
add i -1
38+
jgz i -11
39+
snd a
40+
jgz f -16
41+
jgz a -19

src/day18/Main.java

Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
1+
package day18;
2+
3+
import java.util.ArrayList;
4+
import java.util.HashMap;
5+
6+
import util.ReadInputHelper;
7+
8+
public class Main {
9+
public static void main(String[] args) {
10+
ArrayList<String> lines = new ReadInputHelper(18).getLines();
11+
HashMap<String, Long> list = new HashMap<>();
12+
13+
list.put("b", 0l);
14+
list.put("i", 0l);
15+
list.put("a", 0l);
16+
list.put("f", 0l);
17+
list.put("p", 0l);
18+
19+
boolean rcved = false;
20+
long lastPlayedFrequency = 0;
21+
22+
for (int i = 0; i < lines.size() && !rcved; i++) {
23+
System.out.print(lines.get(i));
24+
25+
String[] temp = lines.get(i).split(" ");
26+
27+
switch (temp[0]) {
28+
case "set": {
29+
long value = 0;
30+
try {
31+
value = Integer.parseInt(temp[2]);
32+
} catch (NumberFormatException e) {
33+
value = list.get(temp[2]);
34+
}
35+
list.put(temp[1], value);
36+
}
37+
break;
38+
case "add": {
39+
long value = list.get(temp[1]) + Integer.parseInt(temp[2]);
40+
list.put(temp[1], value);
41+
}
42+
break;
43+
case "snd":
44+
lastPlayedFrequency = list.get(temp[1]);
45+
break;
46+
case "jgz": {
47+
long value = 0;
48+
49+
try {
50+
value = Integer.parseInt(temp[2]);
51+
} catch (NumberFormatException e) {
52+
value = list.get(temp[2]);
53+
}
54+
55+
if (list.get(temp[1]) > 0)
56+
i += value - 1;
57+
else
58+
System.out.print(", skipping jump");
59+
}
60+
break;
61+
case "mod": {
62+
long value1 = list.get(temp[1]);
63+
64+
long value2 = 0;
65+
66+
try {
67+
value2 = Integer.parseInt(temp[2]);
68+
} catch (NumberFormatException e) {
69+
value2 = list.get(temp[2]);
70+
}
71+
72+
value2 = Math.abs(value2);
73+
74+
if (value2 == 0)
75+
break;
76+
long value = value1 % value2;
77+
78+
if (value < 0)
79+
value += value2;
80+
System.out.print(", " + value1 + "%" + value2 + "=" + value);
81+
list.put(temp[1], value);
82+
}
83+
break;
84+
case "rcv": {
85+
long value = (list.get(temp[1]));
86+
87+
if (value > 0) {
88+
System.out.print(", rcved: ");
89+
rcved = true;
90+
System.out.print(lastPlayedFrequency);
91+
}
92+
}
93+
break;
94+
case "mul": {
95+
long value1 = list.get(temp[1]);
96+
long value2 = 1;
97+
try {
98+
value2 = Integer.parseInt(temp[2]);
99+
} catch (NumberFormatException e) {
100+
value2 = list.get(temp[2]);
101+
}
102+
103+
list.put(temp[1], value1 * value2);
104+
}
105+
break;
106+
default:
107+
System.out.println("Forgot: " + temp[0]);
108+
}
109+
110+
System.out.println(", value of program: " + list.get(temp[1]));
111+
}
112+
}
113+
}
114+
115+
class Program {
116+
HashMap<String, Long> list = new HashMap<>();
117+
ArrayList<String> lines;
118+
boolean rcved = false;
119+
long lastPlayedFrequency = 0;
120+
121+
public Program (ArrayList<String> lines) {
122+
list.put("b", 0l);
123+
list.put("i", 0l);
124+
list.put("a", 0l);
125+
list.put("f", 0l);
126+
list.put("p", 0l);
127+
this.lines = lines;
128+
}
129+
130+
public void start(){
131+
for (int i = 0; i < lines.size() && !rcved; i++) {
132+
System.out.print(lines.get(i));
133+
134+
String[] temp = lines.get(i).split(" ");
135+
136+
switch (temp[0]) {
137+
case "set": {
138+
long value = 0;
139+
try {
140+
value = Integer.parseInt(temp[2]);
141+
} catch (NumberFormatException e) {
142+
value = list.get(temp[2]);
143+
}
144+
list.put(temp[1], value);
145+
}
146+
break;
147+
case "add": {
148+
long value = list.get(temp[1]) + Integer.parseInt(temp[2]);
149+
list.put(temp[1], value);
150+
}
151+
break;
152+
case "snd":
153+
lastPlayedFrequency = list.get(temp[1]);
154+
break;
155+
case "jgz": {
156+
long value = 0;
157+
158+
try {
159+
value = Integer.parseInt(temp[2]);
160+
} catch (NumberFormatException e) {
161+
value = list.get(temp[2]);
162+
}
163+
164+
if (list.get(temp[1]) > 0)
165+
i += value - 1;
166+
else
167+
System.out.print(", skipping jump");
168+
}
169+
break;
170+
case "mod": {
171+
long value1 = list.get(temp[1]);
172+
173+
long value2 = 0;
174+
175+
try {
176+
value2 = Integer.parseInt(temp[2]);
177+
} catch (NumberFormatException e) {
178+
value2 = list.get(temp[2]);
179+
}
180+
181+
value2 = Math.abs(value2);
182+
183+
if (value2 == 0)
184+
break;
185+
long value = value1 % value2;
186+
187+
if (value < 0)
188+
value += value2;
189+
System.out.print(", " + value1 + "%" + value2 + "=" + value);
190+
list.put(temp[1], value);
191+
}
192+
break;
193+
case "rcv": {
194+
long value = (list.get(temp[1]));
195+
196+
if (value > 0) {
197+
System.out.print(", rcved: ");
198+
rcved = true;
199+
System.out.print(lastPlayedFrequency);
200+
}
201+
}
202+
break;
203+
case "mul": {
204+
long value1 = list.get(temp[1]);
205+
long value2 = 1;
206+
try {
207+
value2 = Integer.parseInt(temp[2]);
208+
} catch (NumberFormatException e) {
209+
value2 = list.get(temp[2]);
210+
}
211+
212+
list.put(temp[1], value1 * value2);
213+
}
214+
break;
215+
default:
216+
System.out.println("Forgot: " + temp[0]);
217+
}
218+
219+
System.out.println(", value of program: " + list.get(temp[1]));
220+
}
221+
}
222+
}

0 commit comments

Comments
 (0)