1
+ package day23 ;
2
+
3
+ import java .util .ArrayList ;
4
+ import java .util .HashMap ;
5
+
6
+ import util .ReadInputHelper ;
7
+
8
+ public class Main {
9
+ static int speed = 0 ;
10
+
11
+ public static void main (String [] args ) {
12
+ ArrayList <String > lines = new ReadInputHelper (23 ).getLines ();
13
+
14
+ HashMap <String , Long > list = new HashMap <>();
15
+ list .put ("a" , 1l );
16
+ list .put ("b" , 0l );
17
+ list .put ("c" , 0l );
18
+ list .put ("d" , 0l );
19
+ list .put ("e" , 0l );
20
+ list .put ("f" , 0l );
21
+ list .put ("g" , 0l );
22
+ list .put ("h" , 0l );
23
+
24
+ for (int i = 0 ; i < lines .size () && i > -1 ; i ++) {
25
+ try {
26
+ Thread .sleep (Main .speed );
27
+ } catch (InterruptedException e1 ) {
28
+ // TODO Auto-generated catch block
29
+ e1 .printStackTrace ();
30
+ }
31
+ System .out .print ("Programcount: " + (i +1 ) + ", " );
32
+ System .out .print (lines .get (i ));
33
+
34
+ String [] temp = lines .get (i ).split (" " );
35
+
36
+ switch (temp [0 ]) {
37
+ case "set" : {
38
+ long value = 0 ;
39
+ try {
40
+ value = Long .parseLong (temp [2 ]);
41
+ } catch (NumberFormatException e ) {
42
+ value = list .get (temp [2 ]);
43
+ }
44
+ list .put (temp [1 ], value );
45
+ }
46
+ break ;
47
+ case "sub" : {
48
+ long value = 0 ;
49
+ try {
50
+ value = Long .parseLong (temp [2 ]);
51
+ } catch (NumberFormatException e ) {
52
+ value = list .get (temp [2 ]);
53
+ }
54
+
55
+ long result = list .get (temp [1 ]) + value ;
56
+ System .out .print (", substracting: " + list .get (temp [1 ]) + " and " + value + " = " + result );
57
+ list .put (temp [1 ], result );
58
+ }
59
+ break ;
60
+ case "mul" : {
61
+ long value = 0 ;
62
+ try {
63
+ value = Long .parseLong (temp [2 ]);
64
+ } catch (NumberFormatException e ) {
65
+ value = list .get (temp [2 ]);
66
+ }
67
+
68
+ long result = list .get (temp [1 ]) * value ;
69
+ list .put (temp [1 ], result );
70
+ }
71
+ break ;
72
+ case "jnz" : {
73
+ long value = 0 ;
74
+
75
+ try {
76
+ value = Long .parseLong (temp [2 ]);
77
+ } catch (NumberFormatException e ) {
78
+ value = list .get (temp [2 ]);
79
+ }
80
+ long threshold = 0 ;
81
+
82
+ try {
83
+ threshold = Long .parseLong (temp [1 ]);
84
+ } catch (NumberFormatException e ) {
85
+ threshold = list .get (temp [1 ]);
86
+ }
87
+
88
+ if (threshold != 0 )
89
+ i += value - 1 ;
90
+ else
91
+ System .out .print (", skipping jump" );
92
+ }
93
+ break ;
94
+
95
+ default :
96
+ System .out .println ("Forgot: " + temp [0 ]);
97
+ }
98
+ System .out .println (", value of program: " + list .get (temp [1 ]));
99
+ }
100
+
101
+ System .out .println (list .get ("h" ));
102
+ }
103
+ }
104
+
105
+ class Program extends Thread {
106
+ HashMap <String , Long > list = new HashMap <>();
107
+ ArrayList <String > lines ;
108
+ boolean locked = false ;
109
+ int counter = 0 ;
110
+
111
+ public Program (ArrayList <String > lines ) {
112
+ this .setDaemon (true );
113
+ list .put ("a" , 0l );
114
+ list .put ("b" , 0l );
115
+ list .put ("c" , 0l );
116
+ list .put ("d" , 0l );
117
+ list .put ("e" , 0l );
118
+ list .put ("f" , 0l );
119
+ list .put ("g" , 0l );
120
+ list .put ("h" , 0l );
121
+ this .lines = lines ;
122
+ }
123
+
124
+ @ Override
125
+ public void run () {
126
+ for (int i = 0 ; i < lines .size (); i ++) {
127
+ try {
128
+ Thread .sleep (Main .speed );
129
+ } catch (InterruptedException e1 ) {
130
+ // TODO Auto-generated catch block
131
+ e1 .printStackTrace ();
132
+ }
133
+ System .out .print ("Program: " );
134
+ System .out .print (lines .get (i ));
135
+
136
+ String [] temp = lines .get (i ).split (" " );
137
+
138
+ switch (temp [0 ]) {
139
+ case "set" : {
140
+ long value = 0 ;
141
+ try {
142
+ value = Long .parseLong (temp [2 ]);
143
+ } catch (NumberFormatException e ) {
144
+ value = list .get (temp [2 ]);
145
+ }
146
+ list .put (temp [1 ], value );
147
+ }
148
+ break ;
149
+ case "sub" : {
150
+ long value = 0 ;
151
+ try {
152
+ value = Long .parseLong (temp [2 ]);
153
+ } catch (NumberFormatException e ) {
154
+ value = list .get (temp [2 ]);
155
+ }
156
+
157
+ long result = list .get (temp [1 ]) - value ;
158
+ list .put (temp [1 ], result );
159
+ }
160
+ break ;
161
+ case "mul" : {
162
+ long value = 0 ;
163
+ try {
164
+ value = Long .parseLong (temp [2 ]);
165
+ } catch (NumberFormatException e ) {
166
+ value = list .get (temp [2 ]);
167
+ }
168
+
169
+ counter ++;
170
+ long result = list .get (temp [1 ]) * value ;
171
+ list .put (temp [1 ], result );
172
+ }
173
+ break ;
174
+ case "jnz" : {
175
+ long value = 0 ;
176
+
177
+ try {
178
+ value = Long .parseLong (temp [2 ]);
179
+ } catch (NumberFormatException e ) {
180
+ value = list .get (temp [2 ]);
181
+ }
182
+ long threshold = 0 ;
183
+
184
+ try {
185
+ threshold = Long .parseLong (temp [1 ]);
186
+ } catch (NumberFormatException e ) {
187
+ threshold = list .get (temp [1 ]);
188
+ }
189
+
190
+ if (threshold != 0 )
191
+ i += value - 1 ;
192
+ else
193
+ System .out .print (", skipping jump" );
194
+ }
195
+ break ;
196
+
197
+ default :
198
+ System .out .println ("Forgot: " + temp [0 ]);
199
+ }
200
+
201
+ System .out .println (counter );
202
+ }
203
+ }
204
+ }
0 commit comments