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