advent of code 2025 in ts and nix
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <title>AoC 2025 Day 10 - Factory</title>
7 <style>
8 * {
9 box-sizing: border-box;
10 }
11 body {
12 background: #1e1e2e;
13 color: #cdd6f4;
14 font-family: "Source Code Pro", monospace;
15 font-size: 14pt;
16 font-weight: 300;
17 padding: 20px;
18 display: flex;
19 flex-direction: column;
20 align-items: center;
21 min-height: 100vh;
22 margin: 0;
23 }
24 h1 {
25 color: #a6e3a1;
26 text-shadow: 0 0 2px #a6e3a1, 0 0 5px #a6e3a1;
27 margin-bottom: 10px;
28 font-size: 1em;
29 font-weight: normal;
30 }
31 .controls {
32 background: #11111b;
33 border: 1px solid #313244;
34 padding: 15px;
35 margin: 15px 0;
36 max-width: 1200px;
37 border-radius: 4px;
38 width: 100%;
39 }
40 .control-row {
41 display: flex;
42 gap: 15px;
43 align-items: center;
44 margin-bottom: 15px;
45 flex-wrap: wrap;
46 justify-content: center;
47 }
48 .control-row:last-child {
49 margin-bottom: 0;
50 }
51 button {
52 background: #11111b;
53 color: #a6e3a1;
54 border: 1px solid #313244;
55 padding: 8px 16px;
56 cursor: pointer;
57 font-family: inherit;
58 font-size: 14px;
59 border-radius: 3px;
60 }
61 button:hover {
62 background: #181825;
63 }
64 button:disabled {
65 opacity: 0.5;
66 cursor: not-allowed;
67 }
68 .speed-control {
69 display: flex;
70 align-items: center;
71 gap: 8px;
72 font-size: 13px;
73 color: #a6adc8;
74 }
75 .speed-control input[type="range"] {
76 width: 120px;
77 height: 6px;
78 background: #313244;
79 outline: none;
80 -webkit-appearance: none;
81 border-radius: 3px;
82 }
83 .speed-control input[type="range"]::-webkit-slider-thumb {
84 -webkit-appearance: none;
85 appearance: none;
86 width: 14px;
87 height: 14px;
88 background: #a6e3a1;
89 cursor: pointer;
90 border-radius: 50%;
91 border: 1px solid #313244;
92 }
93 .speed-control input[type="range"]::-moz-range-thumb {
94 width: 14px;
95 height: 14px;
96 background: #a6e3a1;
97 cursor: pointer;
98 border-radius: 50%;
99 border: 1px solid #313244;
100 }
101 .machine-display {
102 background: #11111b;
103 border: 1px solid #313244;
104 padding: 20px;
105 margin: 20px 0;
106 max-width: 1200px;
107 border-radius: 4px;
108 width: 100%;
109 }
110 .lights {
111 display: flex;
112 gap: 10px;
113 justify-content: center;
114 margin: 20px 0;
115 flex-wrap: wrap;
116 padding: 10px;
117 }
118 .light {
119 width: 50px;
120 height: 50px;
121 border-radius: 50%;
122 border: 2px solid #313244;
123 display: flex;
124 flex-direction: column;
125 align-items: center;
126 justify-content: center;
127 font-size: 9px;
128 transition: all 0.3s ease;
129 overflow: hidden;
130 text-align: center;
131 padding: 3px;
132 line-height: 1.1;
133 position: relative;
134 background: #1e1e2e;
135 }
136 .light-inner {
137 position: absolute;
138 inset: 0;
139 border-radius: 50%;
140 overflow: hidden;
141 clip-path: circle(50% at 50% 50%);
142 }
143 .light::before {
144 content: '';
145 position: absolute;
146 bottom: 0;
147 left: -10%;
148 right: -10%;
149 width: 120%;
150 background: linear-gradient(to top, #a6e3a1, #a6e3a1cc);
151 height: var(--fill-height, 0%);
152 transition: height 0.3s ease;
153 z-index: 0;
154 border-radius: 0 0 50% 50%;
155 }
156 .light > div {
157 position: relative;
158 z-index: 1;
159 }
160 .light.off {
161 color: #6c7086;
162 box-shadow: none;
163 }
164 .light.off::before {
165 left: -10%;
166 right: -10%;
167 width: 120%;
168 border-radius: 0 0 50% 50%;
169 }
170 .light.on {
171 color: #1e1e2e;
172 box-shadow: 0 0 20px #a6e3a1, 0 0 30px #a6e3a180 !important;
173 overflow: visible;
174 }
175 .light.on::before {
176 left: 0;
177 right: 0;
178 width: 100%;
179 border-radius: 50%;
180 }
181 .light.target {
182 border-color: #f9e2af;
183 border-width: 3px;
184 }
185 .buttons-grid {
186 display: grid;
187 grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
188 gap: 10px;
189 margin: 20px 0;
190 }
191 .button-display {
192 background: #181825;
193 border: 1px solid #313244;
194 padding: 10px;
195 border-radius: 4px;
196 text-align: center;
197 cursor: pointer;
198 transition: all 0.2s ease;
199 }
200 .button-display:hover {
201 background: #313244;
202 }
203 .button-display.pressed {
204 background: #a6e3a1;
205 color: #1e1e2e;
206 border-color: #a6e3a1;
207 }
208 .button-label {
209 font-size: 12px;
210 margin-bottom: 5px;
211 color: #a6adc8;
212 }
213 .button-toggles {
214 font-size: 11px;
215 color: #6c7086;
216 }
217 .stats {
218 background: #11111b;
219 border: 1px solid #313244;
220 padding: 10px 15px;
221 margin: 10px 0;
222 max-width: 1200px;
223 border-radius: 4px;
224 text-align: center;
225 font-size: 13px;
226 color: #a6adc8;
227 width: 100%;
228 margin-top: auto;
229 }
230 .info {
231 margin: 10px 0;
232 text-align: center;
233 color: #f9e2af;
234 }
235 a {
236 text-decoration: none;
237 color: #a6e3a1;
238 outline: 0;
239 }
240 a:hover, a:focus {
241 text-decoration: underline;
242 }
243 </style>
244</head>
245<body>
246 <h1>AoC 2025 Day 10 - Factory Machines</h1>
247
248 <div class="controls">
249 <div class="control-row">
250 <button id="togglePart" style="color: #f9e2af; font-weight: bold;">Part 1</button>
251 <button id="prev">← Previous Machine</button>
252 <button id="play">▶ Play</button>
253 <button id="next">Next Machine →</button>
254 <button id="reset">↺ Reset</button>
255 <div class="speed-control">
256 <label for="speed">Speed:</label>
257 <input type="range" id="speed" min="1" max="25" value="5" step="1">
258 <span id="speedValue">5x</span>
259 </div>
260 </div>
261 </div>
262
263 <div class="info" id="machineInfo">Machine 1 / 197</div>
264
265 <div class="machine-display">
266 <h2 id="displayTitle" style="text-align: center; color: #89b4fa; font-size: 18px; margin-bottom: 20px;">Indicator Lights</h2>
267 <div class="lights" id="lights"></div>
268
269 <h2 style="text-align: center; color: #89b4fa; font-size: 18px; margin: 30px 0 20px 0;">Buttons</h2>
270 <div class="buttons-grid" id="buttons"></div>
271 </div>
272
273 <div class="stats">
274 <div id="statsInfo">Buttons Pressed: 0 | Target: ? | Accumulated Total: 0</div>
275 <div style="margin-top: 5px; font-size: 11px;"><a href="../index.html">[Return to Index]</a></div>
276 </div>
277
278 <script type="module">
279 const machines = [{"target":[false,false,false,true,true,true,false,true,false,true],"buttons":[[1,8],[0,4,5,6],[2,3,4,5,6,7,8],[5],[0,3,5],[0,1,5,6,7,9],[0,7,9],[0,1,2,3,5,6,8,9],[0,1,2,3,4,5,7,8,9],[0,2,4,6,7,8,9],[1,2,3,4,6,7,8,9],[0,9]],"joltages":[65,41,48,35,50,67,76,68,55,61]},{"target":[true,true,false,true,false,false],"buttons":[[0,2,3,5],[0,2,3,4],[0,1,2,4],[1,4],[2,3,4,5],[1,4,5],[0,3,4],[3]],"joltages":[56,191,62,82,236,212]},{"target":[false,false,false,true,false],"buttons":[[2,3,4],[1,2],[1,2,3,4],[0,2,3],[3],[0,3,4]],"joltages":[194,25,212,218,39]},{"target":[true,true,true,false,false],"buttons":[[1,2],[1,2,3],[3,4],[0,1,2],[1,3,4]],"joltages":[12,52,35,43,28]},{"target":[true,false,false,true,true,true,true],"buttons":[[0,3,4,5,6],[0,1,3,5,6],[0,1,2,6],[0,3],[0,1,2,3],[4,5],[3,4]],"joltages":[47,46,31,136,104,19,27]},{"target":[true,false,true,false,true],"buttons":[[0,1,2],[1,2,3],[0,2,3],[1,2],[0,4],[1,3]],"joltages":[35,44,50,27,10]},{"target":[false,true,false,false,false,true,true,true,false],"buttons":[[4,5,6],[3,5,6],[0,2,4,6],[0,2,6,8],[0,1,8],[1,3],[0,1,2,4,5,7,8],[2,5,7]],"joltages":[39,33,32,11,41,35,37,15,29]},{"target":[false,true,false,true,true,true,true],"buttons":[[0,1],[0,4,5,6],[1,3,4,5],[1,5],[1,2,3],[1,2,3,6],[0,1,3,4,6]],"joltages":[43,87,30,61,37,26,44]},{"target":[false,true,true,true,true,true,true,false],"buttons":[[0,3,4,5,7],[1,2,4,5,6,7],[1,2,3,4,6,7],[0,1,2],[5,7],[0,1,2,3,4,6],[0,4,5],[2,3],[0,2,3,4,5,7],[0,1,5,7]],"joltages":[34,43,49,20,33,47,21,47]},{"target":[false,true,true,true,true,true],"buttons":[[0,3],[0,1,3,5],[1,2,3,4,5],[2],[0,1,2]],"joltages":[34,170,162,185,153,168]},{"target":[false,true,false,true],"buttons":[[1,3],[0,2,3]],"joltages":[154,10,154,164]},{"target":[false,false,true,false,true,true],"buttons":[[0,3,4],[2,4,5],[0,1,3,4,5],[0,1,3,5]],"joltages":[28,12,2,28,23,14]},{"target":[false,false,false,true,false],"buttons":[[1,2,3,4],[3],[1,2,4],[0,3],[1,4]],"joltages":[168,22,12,188,22]},{"target":[true,true,false,false,false],"buttons":[[1,2,4],[2,3],[2,3,4],[1,2],[1,2,3],[0,2],[4]],"joltages":[3,30,36,15,11]},{"target":[false,false,true,true],"buttons":[[1],[1,2],[2,3],[2],[0,1,3],[0,3]],"joltages":[11,11,143,25]},{"target":[false,true,true,true,false,false,true,false,false],"buttons":[[1,2,4,5,7,8],[0,3,4,5,7,8],[1,3,7,8],[5,7],[6],[0,1,3,4,6],[0,1,2,4,5,6,7,8],[1,3,4,6,7],[0,2,3,4,7,8],[1,5,6],[3,4,5,6,7,8]],"joltages":[49,151,36,57,71,160,141,79,63]},{"target":[false,true,false,true],"buttons":[[1,3],[2,3],[1,2],[0,1],[0,1,3]],"joltages":[23,48,18,47]},{"target":[false,true,false,false,false,false,false,false,true],"buttons":[[0,2,4,6],[1,4,5],[0,2,3],[0,2,4,7,8],[1,3,5,6,7,8],[3,7],[2,3,4,7,8],[1,8],[0,2]],"joltages":[42,20,228,213,224,19,14,205,201]},{"target":[true,false,false,true,false],"buttons":[[4],[0,1,3],[2,3,4],[1],[0,3],[3,4],[1,2,4]],"joltages":[14,29,10,18,29]},{"target":[false,true,true,true,true,true,false,true],"buttons":[[0,1,5,7],[0,4,5,6,7],[2,6],[2,3,5],[1,4,5],[3,5,7],[1,2,3,4,5,6,7]],"joltages":[13,42,24,35,37,68,25,45]},{"target":[true,true,true,false,true,true,true,false,true],"buttons":[[4,6,7],[2,4,6,7],[0,1,4,5],[2,3,4,5,6,7,8],[1,8],[1,2,3,4,6,8],[2,5,6],[0,2,3,5,6,8],[0,5,6,7,8],[1,2,4,6,8]],"joltages":[27,15,61,25,57,58,94,57,47]},{"target":[true,true,false,true,true,false,false,false,false],"buttons":[[0,1,2,5,6,7,8],[0,1,2,3,6,7],[0,1,2,6,7],[2,3,6],[0,3,4,7,8],[0,1,2,4,6],[5,7,8],[4,6,7]],"joltages":[47,45,61,37,32,209,77,249,211]},{"target":[false,true,true,false,true,true,false,true,false,true],"buttons":[[2,4,7,9],[1,4,5,8],[0,1,3,5],[1,4,5],[7],[1,2,8,9],[2,3,7,8],[0,1,2,3,4,7,8],[0,5],[0,2,3],[1,2,5,6,7,8,9],[0,1,2,3,5,9],[4,6,7,9]],"joltages":[69,76,81,72,49,58,6,51,46,40]},{"target":[true,true,false,false],"buttons":[[0,2],[0,1,3],[0,1]],"joltages":[26,6,20,2]},{"target":[false,true,false,true,false,true,false],"buttons":[[0,1,6],[0,3,4],[1,2,3,6],[1,2,3,4,5],[1,2,3,5,6],[0,1,2,3]],"joltages":[21,33,28,34,7,7,22]},{"target":[true,false,false,true,true,false,true,true,true,true],"buttons":[[8],[3,5],[1,3,4,6],[4,5,7,8],[2,3,4,6,9],[0,1,4,6,7,9],[1,2,3,4,5,6],[1,4,5,6,7],[1,5,6,7],[6,9],[3,6],[0,1,2,3,4,5,8,9]],"joltages":[25,161,35,166,175,74,190,42,29,50]},{"target":[true,false,false,true,false],"buttons":[[0,2,4],[1,4],[0,3]],"joltages":[22,5,20,2,25]},{"target":[false,false,false,false,false,false,false,true,false,false],"buttons":[[0,3,4,5],[2,3,5,6,8,9],[1,2,3,5,7,8],[0,1,3,4,7],[0,2,3,4,5,6,7],[1,2,5,6,7],[0,1,3,6,8,9],[0,2,6],[0,2],[0,1,3,4,5,7,8]],"joltages":[79,31,88,74,43,75,58,49,44,20]},{"target":[false,true,true,false,false,true,true,true,false],"buttons":[[0,2],[1,6],[7,8],[1,3,7],[2,3],[3,4,7,8],[0,2,3,4,5,7],[4,7],[1,2,5,6,7],[0,2,3,4,5,8]],"joltages":[19,38,37,33,26,30,21,65,31]},{"target":[true,true,true,false,false,true,false,false],"buttons":[[5,6],[0,4],[0,1,2,4,5,7],[0,3,5],[1,2,3,5,6],[0,2],[0,1,2,4,7],[0,3,6]],"joltages":[55,49,51,38,32,53,23,32]},{"target":[false,false,true,true,false,true],"buttons":[[1,5],[0,1,2,3,4],[0,1,3],[2,4],[0,3,4],[0,2,4,5]],"joltages":[122,133,27,118,28,20]},{"target":[true,false,false,false,true,false,true],"buttons":[[0,1,2,6],[1,3,6],[0,3,4,5,6],[1],[0,1,4,5,6],[0,4,5],[2,3,4,5,6],[2,3,4]],"joltages":[47,37,38,37,55,37,47]},{"target":[true,true,false,true,true,true],"buttons":[[0,1,3,4,5],[1,4],[0,5],[1,3,4,5],[1,2,3,5],[0,2,3,4,5]],"joltages":[36,43,22,54,47,57]},{"target":[false,true,true,false,false,false,true,false,false],"buttons":[[0,1,3,4,5,7],[0,1,2,3,4,6,8],[0,4,8],[1,5,6,7],[0,1,5,6,7,8],[0,2,4,5,7,8],[0,1,3,5,6]],"joltages":[78,68,23,32,40,77,62,58,53]},{"target":[false,false,true,true,false,false,false,false,false],"buttons":[[0,4,6,7,8],[1,2,3,5,7],[3,6],[1,3,4],[0,1,2,4,5,6,7,8],[0,1,2,3,4,5],[0,5,6],[2,5,6]],"joltages":[34,44,55,49,35,59,55,33,18]},{"target":[false,true,true,false,true,false,true,false,false,true],"buttons":[[1,2,3,6,8,9],[1,2,5,7,8],[3,7,9],[1,2,4,6,9],[1,2,4,6,8,9],[1,2,5,6,7,8,9],[0,2,5,6,7,8],[0,3,4,6,7,9],[0,2,5,6,7,8,9]],"joltages":[20,44,61,26,25,34,59,55,44,62]},{"target":[true,false,true,false],"buttons":[[0,1,3],[0,2]],"joltages":[213,18,195,18]},{"target":[true,false,false,true,true,false],"buttons":[[3,4],[0,1,2,5],[2,5],[0,2,3,4],[0,1,3,4,5],[0,5]],"joltages":[27,12,27,15,15,41]},{"target":[false,true,true,false,false],"buttons":[[0],[1,2,3],[0,4],[1,2],[0,1,2,3],[3,4],[1,3]],"joltages":[42,207,201,207,36]},{"target":[false,true,true,false,true,false,false],"buttons":[[1,2,3,4,5],[0,3],[2,3,4],[1,3,6],[1,2,4,5,6],[0,1,3,4],[0]],"joltages":[34,123,34,153,35,14,114]},{"target":[true,false,true,false,true,false,true],"buttons":[[1,3,5,6],[0,5],[3,6],[1,2,3,4],[0,2]],"joltages":[33,22,29,26,16,26,10]},{"target":[true,false,false,false,true,true,false,false,false],"buttons":[[0,1,2,4,5,6,7],[0,1,2,8],[0,2,3,4,6,7,8],[0,2,3],[1,2,3,4,6,7,8],[0,1,2,3,5,6,8],[1,3,5,6],[1,2,4,5,6],[0,5,6,8]],"joltages":[53,48,74,47,55,29,61,48,42]},{"target":[true,true,false,true,false],"buttons":[[1,3,4],[0,4],[1,4],[0,1,2,3],[1,2,4]],"joltages":[177,213,173,193,44]},{"target":[false,true,false,true,false,true,true,false,true],"buttons":[[1,3,7],[8],[0,1],[4,5],[4,5,8],[0,3,4,5,6,7,8],[2,7],[2,4,6],[0,2,3]],"joltages":[22,15,30,9,21,9,15,17,24]},{"target":[true,false,false,false,false,false,false,true,false,true],"buttons":[[0,1,2,4,6,7,8],[1,3,7,9],[5,7],[0,2,4,6],[2,4,5,7,9],[3,5,7],[0,1,2,5,6,9],[0,7,8]],"joltages":[54,27,50,24,36,58,34,77,28,35]},{"target":[true,false,true,false,false,true,true],"buttons":[[0,1,3],[0,2],[1,2,4,6],[3,5],[5,6],[0,4,6],[0,1,3,5,6],[2,6]],"joltages":[33,28,31,20,26,14,44]},{"target":[true,false,false,true,true],"buttons":[[0,1],[2,3],[1,3,4],[0,1,4]],"joltages":[175,177,0,2,168]},{"target":[false,true,true,true,false,false,false,true,true,false],"buttons":[[8],[0,3,4,5,6,7,8,9],[0,4,5,9],[0,1,2,3,5,7,8],[2,3,4,5,6,7,9],[1,2,3,6,7,9],[0,1,2,3,4,5,7,8],[2,3,5,8,9],[6,8,9],[1,2,3,4,5,6,7,9],[1,4,6,8,9],[0,3,6,9],[0,2,3,7]],"joltages":[65,50,69,97,72,86,95,82,68,117]},{"target":[true,false,false,true,false,true,false,false,false,false],"buttons":[[0,2,4,7],[1,8,9],[0,1,3,4,6,7,8,9],[8],[0,1,3,4,5,6,9],[1,3,5,6,7],[0,3,5,6,7],[1,3],[0,3,5],[0,1,4,8],[0,1,2,4,5,7,8,9]],"joltages":[80,81,27,53,70,31,38,56,62,53]},{"target":[true,false,false,false],"buttons":[[0,1,2],[1,3],[1,2],[0,2],[2,3]],"joltages":[19,41,38,23]},{"target":[false,true,true,false,false],"buttons":[[1,2],[1,3,4],[0,3]],"joltages":[20,29,9,40,20]},{"target":[false,false,true,false,true,false],"buttons":[[3,4,5],[2,3,5],[0,1,2,5],[3,5],[0,1,2],[2,3,4,5],[2,3]],"joltages":[27,27,76,67,25,72]},{"target":[true,true,false,true,true,false,false,false,true],"buttons":[[7,8],[0,2,4,5,7,8],[1,4,6,7],[2,4,5,6],[2,3,4,5,6],[0,1,3,5,6,8],[1,5,7,8],[0,2,5,8],[0,1,3,6],[2,3,4,5,6,7,8],[0,2,3]],"joltages":[56,44,44,48,44,68,60,44,61]},{"target":[true,false,false,true,false],"buttons":[[0,2,3,4],[0,1,2,3],[1,2,3],[2,4]],"joltages":[12,13,132,25,119]},{"target":[false,false,true,false,false,false,true],"buttons":[[1,2,4],[2,3,4],[2],[0,1,4,5,6],[2,4],[0,1,2,4],[0,2,3,4,5],[0,2,4,5,6],[0,1,2,3,6]],"joltages":[58,42,71,22,64,34,49]},{"target":[false,false,true,true,false],"buttons":[[0,2,4],[0,1,2,3],[0,1,4],[1,4],[2,3,4],[1,2,4]],"joltages":[22,44,18,11,41]},{"target":[true,false,true,false],"buttons":[[0,1,3],[0,2]],"joltages":[21,1,20,1]},{"target":[true,false,false,false],"buttons":[[0,3],[0,1,3],[0,2,3],[1],[1,2,3],[2,3]],"joltages":[120,35,134,153]},{"target":[false,true,false,true,true,false,true],"buttons":[[1,3,4,6],[0,1,2,4,5,6],[0,1,2,4,5],[0,2,6],[2,3,5],[4]],"joltages":[54,48,67,27,55,47,50]},{"target":[true,true,false,true],"buttons":[[0,2,3],[0,1,3]],"joltages":[18,17,1,18]},{"target":[true,false,true,true,false,false,false,false,false,true],"buttons":[[0,2,3,9],[6,8],[1,6,7],[4,5,6],[0,1,3,4,8,9],[3,4,5,6,8],[0,3,7,8],[0,2,3]],"joltages":[22,19,19,28,16,15,36,20,12,1]},{"target":[true,true,false,true,false],"buttons":[[0,2,3],[0,1,4],[1,3,4],[1,4],[0,1,3],[1,3]],"joltages":[19,62,1,36,42]},{"target":[true,false,true,true,true],"buttons":[[1,3,4],[0,2,3,4],[2,3]],"joltages":[12,19,30,49,31]},{"target":[false,false,false,true,true],"buttons":[[0,1,4],[1,2,3,4],[0,2],[0,3],[3,4],[1,2],[0]],"joltages":[18,19,18,18,18]},{"target":[true,false,false,true,false,false,true,false,true],"buttons":[[0,1,4],[5,7,8],[2,5,6,7,8],[0,4,5,6],[0,2,3,4,6,8],[1,3,4,5,6,7],[0,2,3,5,6,7,8],[0,1,2,3,4,6,7],[1,2,3,6,7,8],[2,4,5,7]],"joltages":[209,187,45,48,215,71,78,64,43]},{"target":[true,true,false,false,false,false,true,false],"buttons":[[2,3,4,7],[1,4,5],[0,3,4,5],[0,1,2,5,7],[1,4],[0,1,4,6],[0,3,4],[0,6,7]],"joltages":[30,38,108,107,138,10,17,108]},{"target":[false,false,true,true,true,false,true,true,true,false],"buttons":[[0,9],[1,7],[0,1,2,3,5,6],[2,5,7,8],[0,2,3,4,5,7,9],[1,2,3,4,5,7,8,9],[1,2,3,4,5,6],[0,1,2,5,6,8],[0,1,2,4,5,6,7,8],[0,1,2,5],[0,1,2,4,6,7,8,9]],"joltages":[82,105,103,33,55,85,74,77,79,37]},{"target":[true,false,true,false,true,false,true,true,false],"buttons":[[1,2,3,4,5,6,7],[1,6,8],[2,3,5],[5,6],[1,2,4,6,7],[0,1,2,7,8],[0,2,3,4,5,7,8],[0,1,3,4,5,6,8]],"joltages":[37,45,79,49,42,52,30,59,40]},{"target":[true,false,false,false,true,true,false],"buttons":[[0,2,3,4,5],[0,3,6],[0,4,5],[1,3,5,6],[1,2,4,5],[4,6],[0,2,3,4,5,6]],"joltages":[27,18,22,34,33,29,45]},{"target":[true,false,false,true,true,false,true,false],"buttons":[[0,1,4],[0,5,7],[1,2,4,5,6],[2],[0,5],[3,4,6,7],[0,2,3,4,6]],"joltages":[24,171,185,10,181,178,176,7]},{"target":[true,false,false,true,false,true,true,false],"buttons":[[0,3,4,6],[4,6],[0,4,5],[1,2,3,4,5,7],[0,1,2,3,6],[0,1,2,4,6,7],[1,2,3],[1,2,3,4]],"joltages":[62,61,61,57,84,21,65,22]},{"target":[true,false,true,false,true,true,false],"buttons":[[0,1,2,4,5],[3,6],[1,2,4,5,6],[1,3,5,6],[0,1,6],[1,2]],"joltages":[16,149,136,27,17,25,38]},{"target":[true,false,true,false,true,false,false,true,false,true],"buttons":[[0,3,6,7,9],[0,2,3,5,6,7,8,9],[3,6,8],[0,2,5,6,9],[2,3,4,7],[0,1,2,4,5,6,7,8],[0,1,3,4,5,6,7,9],[0,1,2,3,7,9],[5,8,9],[2,5,8,9],[3]],"joltages":[54,41,64,92,37,43,52,67,47,59]},{"target":[true,true,false,false,true,false],"buttons":[[3,4,5],[1,5],[1,2,4],[1,4],[1,2],[0,3,5],[0]],"joltages":[23,47,31,10,33,12]},{"target":[true,false,false,true,true,false,true],"buttons":[[2,4],[1,3,4,5],[0,1,5,6],[0,2,4,5,6],[0,1,4,5,6]],"joltages":[47,41,24,12,55,59,47]},{"target":[true,false,true,false,true,true,false,true],"buttons":[[0,1,2,4,5,7],[0,2,3,6,7],[0,3,4,5],[3,4,5,6],[0,1,3,5,6,7],[1,2,4,5,6,7],[0,2,3],[2,4,5,6,7],[1,7]],"joltages":[32,34,35,34,44,47,32,42]},{"target":[false,false,true,false,true,false,false,false,false,true],"buttons":[[0,2,3,5,6,7,8,9],[1,3,4,5,6,7,8,9],[0,2,7,8,9],[5,6,9],[3],[0,1,4,5,9],[1,5,9],[0,1,2,3,4,5,8],[2,5],[4,8]],"joltages":[26,38,191,38,31,233,23,8,24,46]},{"target":[false,true,false,false,false,false,true,false,true,false],"buttons":[[2,3,4,8],[0,1,2,5,6,7,9],[0,2,3,4,7,8,9],[0,2,3,5,6,7,8,9],[1,3],[4,5,6,9],[0,3,4,5,6,7,8],[0,8,9],[3,4,5,7,8,9],[0,1,2,3,4,6,8,9],[1,2,5,6,7,8,9],[3,4,5]],"joltages":[70,55,62,73,59,77,79,59,69,100]},{"target":[true,false,false,false,true,true,true,false,false,false],"buttons":[[0,3,6,9],[5,8,9],[1,2,3,4,6,8,9],[1,2,5,7],[0,1,2,3,4,6,7,8],[1,2,3,4,6,7,8,9],[3,5],[1,5,6,7,8,9],[4,5,6],[1,2,3,4,5,6,7,9]],"joltages":[33,65,60,67,57,30,75,48,63,62]},{"target":[true,false,true,true],"buttons":[[1,2],[0,1],[0,2,3]],"joltages":[8,22,16,1]},{"target":[true,true,false,false,true,true],"buttons":[[1,2,5],[0,1,2,3,5],[0,3,4],[0,2,4]],"joltages":[20,11,21,10,17,11]},{"target":[false,true,false,true],"buttons":[[1,3],[0,2],[0,3]],"joltages":[21,10,9,22]},{"target":[true,false,false,true,true,false,true,true],"buttons":[[0,1,2,3,4,6,7],[3,4,7],[2,3,7],[2,3,4,5,7],[2,3,5,6],[2,3,6,7],[3,4],[1,3,7],[0,4,5,6],[2,3]],"joltages":[3,14,61,108,49,34,27,62]},{"target":[true,true,true,true,true,true,true,true,false,false],"buttons":[[0,2,3,4,9],[0,3,6,7,8,9],[0,1,2,3,4,5,6,7],[4,5,7,9],[0,1,2,3,4,7,8,9],[0,2,3,4,6,7,8,9],[1,3,5,6,8,9],[0,1,4,5,8,9],[0,2,3],[1,8],[0,5,8]],"joltages":[58,39,41,60,41,33,38,48,46,47]},{"target":[true,false,false,true,false,true,false,false,true],"buttons":[[0,3,6,7],[3,4,6,7],[0,2,5],[0,5,8],[0,6],[0,1,2,3,4,5,7,8],[1,3,4,6,7,8],[0,3,5,8],[4,7],[0,1,3,4,7,8]],"joltages":[49,22,13,36,43,26,47,47,35]},{"target":[false,true,false,false,false,false,false],"buttons":[[1,2,3,4,5],[1,2,3,4],[1,2,3,4,6],[0,2,4,6],[0,1,2,4,5]],"joltages":[6,29,33,27,33,18,8]},{"target":[true,true,false,true,true,true,false,true,false,true],"buttons":[[0,2,5,6,8],[1,2,3,4,5],[0,2,3,5,7,8,9],[0,1,2,4,5,6,9],[2,3,6,7,9],[0,1,2,3,4,5,7,9],[0,2,9],[2,3,4,7,9]],"joltages":[38,39,69,47,42,56,30,28,17,39]},{"target":[false,false,true,true,false,true,false],"buttons":[[0,1,3,4,5],[2,5],[0,1,4,5],[1,4,6],[0,3,4]],"joltages":[128,128,12,21,142,126,14]},{"target":[true,true,true,false],"buttons":[[1,3],[0,2,3],[3],[0,1],[2],[1]],"joltages":[24,41,14,44]},{"target":[true,true,false,true,true,false,false,false],"buttons":[[0,1,4,6,7],[0,1,3,4],[4,6],[0,2,3,4],[6,7],[3,5,6],[0,2,3,5,7]],"joltages":[38,20,18,31,42,23,54,42]},{"target":[true,false,true,false,false],"buttons":[[0,2,3],[3,4],[0,3],[4],[1,2],[0,1]],"joltages":[42,175,174,42,14]},{"target":[false,true,true,true,true,true,true,true],"buttons":[[0,2,6],[0,1,2,3,5,6],[1,7],[2,4,5,6,7],[1,2,4,5],[2,3,4,5,6]],"joltages":[2,8,22,7,20,20,22,21]},{"target":[false,true,false,true,true,true,false,true,true,true],"buttons":[[3,7,8],[0,8,9],[1,2,3,4,5,7,8,9],[0,1,2,3,5,6,9],[0,1,2,3,4,6,7],[0,1,2,3,5,6,8,9],[0,4,6,8],[0,1,2,4,8,9],[0,1,5,8]],"joltages":[191,63,54,46,150,41,166,15,177,48]},{"target":[true,false,true,false],"buttons":[[1,2,3],[0,2]],"joltages":[11,14,25,14]},{"target":[true,false,false,false],"buttons":[[0,3],[1,2,3],[3],[0,1,2],[2],[0,2]],"joltages":[7,7,14,22]},{"target":[false,false,false,false,true,true,false,false],"buttons":[[5,7],[0,6],[2,7],[1,2,3,5,6,7],[0,3,4,5,6,7],[0,1,3,5,7],[1,4],[0,1,2,3,5,7],[0,1,2,3,4,5,7]],"joltages":[37,30,22,26,13,31,14,31]},{"target":[true,false,false,false,true,true,false,false,false,false],"buttons":[[0,2,7],[2,5],[0,1,4,5,6,9],[0,1,6,7,8,9],[0,2,3,4,5,7,8],[0,2,3,4,5],[1,2,3,5,6,7,8],[0,1,2,6],[1,2,4,6],[3,8,9]],"joltages":[76,83,91,53,48,56,83,51,57,48]},{"target":[true,false,true,true,false,true,true,true,true],"buttons":[[0,1,3,4,6,7,8],[0,2,3,5,6,7,8],[2,4],[2,3,4,5,6,7,8],[0,1,3,4,5,7,8],[5,6],[2,3,6,7,8]],"joltages":[31,27,50,68,55,45,60,68,68]},{"target":[false,false,true,false,false,false,false,true,true],"buttons":[[0,1,4,5,6,7,8],[0,4,6,7,8],[1,3,4,5,7,8],[1,2,6,7,8],[0,2,3,4,8],[1,2,4,5],[0,4,5,6,7],[0,1,3,4,6,7,8]],"joltages":[52,52,40,41,71,35,43,53,68]},{"target":[false,true,false,true],"buttons":[[1,3],[0,2]],"joltages":[19,106,19,106]},{"target":[false,true,false,true],"buttons":[[0,3],[1,2,3],[1,2],[2],[0,1,3]],"joltages":[20,44,28,31]},{"target":[true,true,true,true,false],"buttons":[[0,2,4],[1,2],[0,1,2,3],[0,2,3,4],[1]],"joltages":[134,128,137,125,10]},{"target":[true,true,true,false,false,false,true,true],"buttons":[[0,4,5,6,7],[0,1,2,5],[1,4,5,7],[0,1,5],[2,3,4,7],[0,2,5,6,7],[0,2,3,6],[1,3,5],[0,1,2,3,6,7],[1,2,4,5,6]],"joltages":[201,193,197,35,42,211,32,55]},{"target":[false,false,true,false,true,true],"buttons":[[2,3,4,5],[0,1,2,3,5],[1,4],[0,1],[0,3,4],[0,3,5]],"joltages":[29,31,12,23,24,17]},{"target":[true,false,false,true],"buttons":[[2],[0,1],[0,1,2],[1,2],[3],[0,1,3]],"joltages":[23,25,25,20]},{"target":[false,true,true,false,true,true,false,false,true,false],"buttons":[[2,4,9],[0,1,3,4,5,6,8,9],[2,4,5,6,7],[1,2,3,4,6,7,8,9],[0,4,5,7,8],[0,3,4,6,7,8,9],[1,2,4,5,6,7,9],[0,3,4,5,6,7,8]],"joltages":[17,16,30,28,47,16,41,41,28,36]},{"target":[true,false,false,true,false,true],"buttons":[[0,3,5],[1,3,4],[1,3,5],[0,2,3,5],[4,5]],"joltages":[24,173,9,197,12,209]},{"target":[false,false,true,false,true],"buttons":[[0,1,3,4],[1,2,3],[0,1,2,4],[0,2,3]],"joltages":[160,25,158,146,22]},{"target":[true,true,true,false,false,true,true,true],"buttons":[[1,2,4,5,7],[0,2,3,5,7],[0,3,4,5,6,7],[1,2,6,7],[0,1],[1,2,4,7],[3,4,5,7],[0,2,3,5,6,7]],"joltages":[46,41,57,45,49,65,42,79]},{"target":[true,false,true,true],"buttons":[[1,2,3],[2,3],[0,2,3]],"joltages":[14,1,18,18]},{"target":[false,true,true,false,true,true,true,true,true,true],"buttons":[[1,2,3,4,5],[0,2,7],[0,2,4,5,6,7,8,9],[6,8,9],[0,1,3,4,6,8,9],[5],[5,6,9],[0,1,4,5,7,8,9],[0,2,3],[0,1,2,6,7,8,9],[1,2,5,6,7,8,9]],"joltages":[58,38,41,16,30,38,65,43,58,72]},{"target":[false,true,false,false,false,true,true,false,true],"buttons":[[0,1,2,3,4,6,7,8],[0,2,3,4,5,7],[0,1,5,6],[0,2,3,4,5,6,7],[0,1,2,6,7,8],[2,3,4,5,7],[0,2,4,7],[3,5,8]],"joltages":[220,14,230,224,217,223,32,230,32]},{"target":[true,true,true,true,false,false,true,false,false],"buttons":[[0,2,5],[3,4],[0,2,4,5],[0,4,5,7],[0,2,4,5,6,8],[0,1,5,8],[0,1,2,6,7],[0,1,3,4,5,7,8],[0,1,4,5,6],[0,2,3,4,5,6,8],[0,4,5,7,8]],"joltages":[302,229,63,40,99,283,47,64,243]},{"target":[false,false,false,true,false,true,false],"buttons":[[0,2,3,4,5],[3,4,5,6],[0,1,3,4,6],[3,4,5],[1,2,3,4,6],[0,3,6],[0,2,5],[0,1,5],[0,2,4,5,6]],"joltages":[87,25,61,70,76,80,58]},{"target":[true,true,true,false,false,false,false,false,false],"buttons":[[0,1,3,6,7,8],[3,6],[2,3,4,5,6,7],[0,4,8],[1,5,6,8],[0,1,3,4,6,7],[0,1,2,4,6,7,8],[1,2],[1,2,6]],"joltages":[145,188,47,160,29,35,188,157,156]},{"target":[false,false,false,true,true,false,true],"buttons":[[3,4,6],[0,1,3,4,6],[0,2,3,6],[3],[0,6],[4,5,6],[0,1,2,4,5],[0,3,5],[1,4,5,6]],"joltages":[38,26,19,40,39,21,35]},{"target":[true,true,true,true,false,false,true,true],"buttons":[[0,1,2,4,7],[1,6],[0,1,3,6],[0,7],[2,6],[0,1,3],[1,2,4,7],[3,5,6,7]],"joltages":[28,38,208,23,24,12,210,43]},{"target":[false,true,false,false,false,false,false],"buttons":[[0,1],[0,3,4,6],[2,3,4,6],[4,5,6],[1,2,4,5,6],[0,1,3,4,5],[3,4,6]],"joltages":[44,44,23,55,83,47,64]},{"target":[true,false,true,false,true,true,false,false,false,false],"buttons":[[0,1,2,3,7,8],[2,4,5,7,8],[0,1,3,4,8,9],[0,5,7,9],[3,4],[0,1,2,3,4,5,8,9],[0,1,2,3,4,5,6,7,9],[0,2,3,4,6,8,9]],"joltages":[48,26,154,61,184,135,23,130,167,47]},{"target":[true,true,false,true,true,true,true,true,true,true],"buttons":[[2,3,5,6,8,9],[0,5,9],[1,2,9],[0,2,3,4,5,6,7,8],[2,6,8],[0,3,5,6],[0,1,2,3,4,5,7,9],[3,4,9],[0,2,5,6,8],[3,7]],"joltages":[35,17,158,154,7,167,147,13,141,171]},{"target":[true,false,true,true,false,true,false,false],"buttons":[[0,3],[0,2,4],[1,2,3,5,6],[0,1,2,3,6],[1,2,3,4,5,7],[2,3],[3,4],[2,3,4,7],[0,1,2,7],[0,1,6,7]],"joltages":[72,60,68,67,41,16,39,45]},{"target":[true,true,true,false,false],"buttons":[[3],[1,2,3],[0,1,2,3],[3,4],[0,1,4],[0,3,4],[0,2]],"joltages":[37,26,24,34,18]},{"target":[false,false,false,true,false,false,false,true,true,true],"buttons":[[2,3,5],[0,3,4,5,6,9],[3,6],[2,8],[0,1,4,5,6,7,9],[1,3],[0,1,3,4,5,6,7,8,9],[5,7,9],[0,2,4,8]],"joltages":[50,36,32,66,50,63,46,33,22,48]},{"target":[true,false,false,true],"buttons":[[0,1,3],[0,2,3],[1],[1,2]],"joltages":[16,181,165,16]},{"target":[true,false,true,false],"buttons":[[0,2],[0,1,3]],"joltages":[19,15,4,15]},{"target":[true,true,false,true,true,true,true],"buttons":[[0,1,3],[0,4,5,6],[0,1,3,4,5,6],[0,2,4,5,6],[0,1,2,4,5,6],[2,3,4]],"joltages":[28,18,38,24,43,24,24]},{"target":[true,false,false,true,false,false],"buttons":[[0,3],[1,2,3,4],[1,2,4,5],[0,1,2,3,4,5]],"joltages":[19,227,227,33,227,213]},{"target":[true,false,true,true],"buttons":[[1,2,3],[0,1],[1,2],[2,3]],"joltages":[17,49,32,12]},{"target":[false,true,false,true,true],"buttons":[[0,1,3],[3,4],[2],[0,2,4]],"joltages":[16,13,20,28,18]},{"target":[true,true,false,false],"buttons":[[2],[0],[3],[0,2],[1,3],[0,2,3]],"joltages":[15,15,33,31]},{"target":[false,true,true,false,true,false,true,true,true,false],"buttons":[[1,6,8],[6,7],[0,1,2],[1,5,6,7,9],[2,3,4,5,6,8,9],[7,8],[2,4,5,6,7,8],[3,6,7,9],[0,1,3,5,6,7,8,9],[1,2,3,5,6,7],[0,2,5,6,8,9],[0,2,3,4,5,8,9]],"joltages":[19,59,26,37,9,46,82,69,41,50]},{"target":[true,false,true,false,false,false,true],"buttons":[[0,1,4,6],[0,3],[3,6],[1,2,4,5,6],[0,1,5],[1,4,5,6],[0,1,2,3,5],[0,1,4,5,6],[1,3,4,6]],"joltages":[51,67,24,33,42,59,42]},{"target":[true,true,true,true],"buttons":[[1,3],[0,1,2,3]],"joltages":[12,16,12,16]},{"target":[false,true,false,true,false],"buttons":[[0,2,3],[0,3,4],[0,1],[0,2],[0,3],[3],[0,1,2]],"joltages":[58,8,27,181,16]},{"target":[false,false,true,false,false,false,false],"buttons":[[2,3],[2,6],[2,3,5],[0,1,3,4,5],[4,6],[0,3,5,6],[0,6],[1,2,4,5,6]],"joltages":[19,26,59,29,26,44,49]},{"target":[true,true,false,false],"buttons":[[0,1,3],[3],[0],[0,1,2]],"joltages":[35,28,10,25]},{"target":[true,false,false,true,true,false,true],"buttons":[[0,2,3],[1,4],[1,2,3,5,6],[0,4],[2,3],[0,3,4],[4,6],[0,2,4,5,6],[0,3,4,6]],"joltages":[62,8,36,54,72,20,49]},{"target":[true,true,false,false,true,true,false,false,false],"buttons":[[0,2,3,4,8],[0,1,8],[0,1,3,4,5,6,7,8],[0,3,4,5,6,7,8],[2,5,7,8],[0,1,2,3,6,8],[0,6,7],[3,5,8],[2,7]],"joltages":[57,32,170,62,35,43,37,178,72]},{"target":[false,true,true,false,false,false,true],"buttons":[[0,2,3,5],[1,2,3,4,5],[0,1,2,5],[0,1,4,6],[0,5,6]],"joltages":[52,33,32,15,16,38,21]},{"target":[false,false,false,false,true,false],"buttons":[[0,2,3],[0,2],[3,5],[0,1,2,3,5],[1],[3,4]],"joltages":[12,17,12,24,5,17]},{"target":[false,false,false,false,true,false,false,true,false,false],"buttons":[[2,6],[0,2,3,4,5,6,7,8],[0,1,3,7,8,9],[3,4,9],[0,1,2,3,4,5,6,9],[1,3,5,7,8,9],[0,2,3,4,6,7,9],[0,1,8],[1,3,4,8],[0,1,3,4,6,7,8,9]],"joltages":[41,47,28,70,62,27,43,32,44,52]},{"target":[true,false,true,true,false,true,false],"buttons":[[1,2,4,6],[1,2,3,4],[0,2,3,5,6],[0,2],[0,1,3,4,6]],"joltages":[28,18,46,29,18,20,29]},{"target":[true,true,false,false,true,false],"buttons":[[1,2,4,5],[5],[0,2],[0,1,2,4],[0],[4,5],[1,3,4,5],[3,4,5]],"joltages":[33,34,37,192,225,221]},{"target":[true,true,false,false,false,true,true,false],"buttons":[[0,3,4],[2,5],[1,4],[2,4,6],[0,1,3,7],[0,2,4,6,7]],"joltages":[164,10,193,10,185,20,173,158]},{"target":[false,false,false,false,false,false,false,true],"buttons":[[4,5],[1,2,4,7],[0,5,7],[1,4],[1,2,3,4,5,6,7],[1,2,3,4,5,7],[0,3,5,6,7],[0,1,2,5,6,7]],"joltages":[44,63,52,44,62,80,38,85]},{"target":[true,true,true,true,false,false,true,false,true,true],"buttons":[[0,3,5,8,9],[0,2,9],[1,3,5,6,7,8,9],[7,8],[0,2,3,4,5,8,9],[4,8,9],[0,1,3,4,5,6,7,9],[0,1],[0,1,2,3,4,5,7,9],[0,2,4,5,6,7],[1,3,6,8],[0,1,4,9],[4,6]],"joltages":[178,69,47,175,63,177,53,67,149,185]},{"target":[false,true,true,false,false,true,true,true,true],"buttons":[[3,4,6],[0,3,4,5,6,7,8],[4,5,8],[0,1,2,3,5,6,7,8],[4,5],[1,2,4,7],[6],[1,3,7,8]],"joltages":[29,40,24,62,75,62,54,55,61]},{"target":[true,true,false,true,true,true,false],"buttons":[[0,1,2,3,4],[0,3,6],[0,3,5,6],[3,5],[0,4],[0,1,3,4,5]],"joltages":[249,205,200,242,214,25,35]},{"target":[true,true,false,false,false,false,true,true],"buttons":[[1,3,4,6],[1,2,4,5,6,7],[0,1,3,4,5,7],[0,1,2,3,5,6],[2,3,4,5,6,7],[0,3,4,6,7],[0,4,5]],"joltages":[43,37,32,45,52,55,46,22]},{"target":[true,true,false,false,false,false,true,true,true,false],"buttons":[[2,6,8,9],[3,9],[2,4,6],[5,6,7],[4,7],[0,1,2,3,7],[2],[1,5,6,9],[0,1,3,6,8,9],[3,4,5,6],[1,2,3,4,5,6,8],[0,1,3,4,6,8],[9]],"joltages":[37,51,76,53,52,23,82,42,55,55]},{"target":[false,false,true,true,false],"buttons":[[2,3],[0,2,3,4],[1,3,4],[1,2,3,4]],"joltages":[8,18,34,37,26]},{"target":[true,true,false,true,false,false,false,false,true],"buttons":[[2,5],[0,1,2,5,8],[3,4,5,6,8],[1,2,3,4,6,7,8],[0,1,3,4,5,6,8],[1,4,7],[2,3,5,7,8],[1,2,3,5,7]],"joltages":[29,65,46,36,47,40,32,38,54]},{"target":[true,true,true,false,true,false,true],"buttons":[[2,5],[0,4],[2,3],[1,2],[2],[0,3,6],[0,2,6],[0,3],[0,1,4,5,6]],"joltages":[88,25,56,42,38,32,51]},{"target":[true,false,false,true,true,true,false,true,true],"buttons":[[0,1,4,5,6],[0,1,3,4,5,6,7,8],[0,1,2,7,8],[1,2,3,4,5],[0,3,8],[1,3,4,5,6,7],[4,6],[0,1,3,5,6,7],[8],[0,2,3,4,5,6,7],[1,7]],"joltages":[175,196,12,182,43,176,171,187,52]},{"target":[false,true,false,true,true,true,false,false],"buttons":[[2,4,5],[2,6,7],[2,4,5,6,7],[3,4],[0,3,4,5,7],[1,2,3,4,5,7],[5],[2,5,6],[1,3,4,5,6,7],[0,2,4,6,7]],"joltages":[14,25,37,189,194,64,34,47]},{"target":[false,true,true,false],"buttons":[[0,1],[0,2,3],[0,1,2],[1,2]],"joltages":[35,31,38,20]},{"target":[true,false,true,false,false,false,true],"buttons":[[0,1,4,5],[1,2,4],[0,1,4,6],[1,2,4,5,6],[0,2,6],[1,2,3],[3,4]],"joltages":[42,60,34,19,63,35,39]},{"target":[false,true,true,true,false,false,false],"buttons":[[4],[0,2,3,4,6],[0,1,2,3,4,5],[0,2,4,5,6],[0,1,3,4,5],[1,2,3]],"joltages":[37,35,20,36,44,36,3]},{"target":[true,false,true,false,false],"buttons":[[0,3],[2,3],[3,4],[0,3,4],[2,4],[0,1,3]],"joltages":[200,3,39,227,212]},{"target":[true,false,true,false,true,false,false,false],"buttons":[[2],[1,7],[0,3,4,6],[3],[1,4,5,6,7],[0,2,3,5,6]],"joltages":[33,211,25,52,29,30,46,211]},{"target":[false,false,false,false,true,true],"buttons":[[0,1,4,5],[0,1,5],[2,3,4],[1,3],[0,1,3],[1,2,5],[0],[1,2,3,4]],"joltages":[36,41,20,34,21,16]},{"target":[false,true,true,false,true,true,true,false,true,false],"buttons":[[0,2,3,4,9],[1,7],[1,2,3,5,6,7,8,9],[0,1,2,4,5,7,9],[3,4,5,6,7],[4,6],[2],[0,1,2,3,6,7,9],[0,6,7,8,9]],"joltages":[138,163,164,156,25,29,162,172,22,157]},{"target":[false,false,true,false,true,false],"buttons":[[0,1,2,4,5],[0,2,3],[0,2,5],[0,4,5]],"joltages":[53,2,34,19,21,34]},{"target":[true,false,false,false,true,true],"buttons":[[1,2,3,4],[0,3,5],[1,5],[0,1,4,5],[0,2,3,4,5],[0,2,3],[0,1,2,3]],"joltages":[32,41,28,39,15,30]},{"target":[true,true,false,true,true,true,false,false],"buttons":[[0,2,5,6],[0,5,6,7],[4,5,7],[1,3,6,7],[0,2,5,7],[1],[3,4,6,7],[0,6],[1,2,3,5]],"joltages":[30,45,38,45,35,55,43,64]},{"target":[false,true,false,true,false,false,true,false,false,false],"buttons":[[3,7],[0,4,5,9],[3,4,6,8],[0,1,2,3,5,6,8,9],[2,3,4,5,6,7,8,9],[8,9],[0,1,2,3,4,6,8],[0,1,2],[0,1,2,4,5,7,8,9],[0,1,3,4,6],[0,1,3,7,9],[0,1,6,7,8,9]],"joltages":[263,243,67,237,236,61,224,76,91,99]},{"target":[false,true,true,false,true,true],"buttons":[[0,2,3,5],[1],[0,1,2,4,5],[4,5],[1,3],[0],[0,2,3]],"joltages":[44,31,42,42,15,35]},{"target":[true,true,true,false],"buttons":[[1,3],[1,2],[0,2],[2],[2,3]],"joltages":[9,155,45,146]},{"target":[true,false,true,false,false,false,true,false,true,false],"buttons":[[0,1,2,5,6],[0,1,2,5,7],[1,2,4,5,6],[0,1,3,5,7,8,9],[2,3,4,5,6,8],[4,6],[0,1,2,3,4,5,6,8],[0,3,4,5,9],[5,6,7,8],[1,4,6,7,8],[2,3,8,9],[2,3,4,9],[0,1,2,4,5,7,8]],"joltages":[76,79,96,73,82,86,58,63,80,61]},{"target":[false,false,false,true,true,true],"buttons":[[0,3,4],[3,4,5],[0,1,4,5],[0,2,3,4]],"joltages":[34,10,10,32,42,18]},{"target":[false,false,true,true,false],"buttons":[[1,2,4],[0,2,3],[2,3]],"joltages":[17,7,28,21,7]},{"target":[false,true,true,true],"buttons":[[1,2,3],[0,2]],"joltages":[4,19,23,19]},{"target":[true,true,true,false],"buttons":[[2,3],[0,1,3],[0,1],[1,2]],"joltages":[15,32,30,26]},{"target":[false,false,true,false,true,false],"buttons":[[0,2,4],[3,4],[0,1,2,4,5],[0,1,3],[1,2,3,5]],"joltages":[37,29,33,31,48,21]},{"target":[true,true,true,false,false,true,true,true],"buttons":[[1,3,6],[0,1,2,3,4,5,7],[0,2,4,5,6,7],[1,2,6],[0,3,6],[1,5,7]],"joltages":[27,26,20,16,20,37,36,37]},{"target":[false,true,true,false],"buttons":[[2,3],[1,2],[0,3]],"joltages":[14,1,1,14]},{"target":[false,true,false,true,true,false,false,false,true],"buttons":[[3,4,5,6,8],[1,2,3,6,7,8],[1,2,3,5,6,7],[3,7],[2,3,4,5,6,7,8],[0,1,2,8],[0,3,4,5,7,8]],"joltages":[153,46,47,212,158,173,51,196,189]},{"target":[true,false,true,true,true,false],"buttons":[[0,1,4,5],[0,1,2,5],[1,2,3],[1,2,3,4,5],[0,2,3,5],[0,3,4],[1,2],[2,3,4,5]],"joltages":[220,54,54,223,212,30]},{"target":[true,false,true,true,true,true],"buttons":[[1,2,3,5],[0,1,5],[1,2,3,4],[0,2,3,4],[2,3]],"joltages":[21,25,36,36,20,14]},{"target":[false,false,false,true,false,false,false,false,true,true],"buttons":[[0,9],[4,5,6],[0,2,4,6,7,9],[0,2,3,4,7,8,9],[0,1,4,7],[0,3,7,8],[8,9],[0,7,8],[0,1,2,5,6,7]],"joltages":[65,26,36,8,49,35,47,46,18,49]},{"target":[false,true,true,true,true,false,true,true],"buttons":[[1,2,3,5,6,7],[0,1,3,4,6,7],[1,2,3,4,5,6],[0,2,4,7],[1,3,5],[3,4,5,6,7],[4,7],[0,1,4,6,7],[0,7]],"joltages":[19,35,12,42,55,27,40,46]},{"target":[false,true,false,true,true,true],"buttons":[[0,2,3,5],[1,3,4,5],[0,1,2,4],[1,5],[1,2,3,5]],"joltages":[29,50,39,38,35,43]},{"target":[false,false,true,false,false,true,true,false,true],"buttons":[[2,3,8],[1,5],[1,4,5,6,7,8],[1,3,4,5,7,8],[2,3,4,5,7],[0,1,3,4],[0,1,3,4,6],[0,2,3,4,5,7,8]],"joltages":[28,173,36,70,64,171,30,46,60]},{"target":[false,true,true,false],"buttons":[[1],[0,2,3],[1,2]],"joltages":[3,11,10,3]},{"target":[true,false,true,false,false,false,false,true,true],"buttons":[[1,2,3,8],[1,2,3,4,5],[0,1,3,7],[0,1,2,3,6,7],[0,1,2,3,7,8],[4],[1,2,3,4,5,7,8]],"joltages":[27,49,45,49,31,19,6,42,35]},{"target":[true,true,false,false],"buttons":[[1],[0,1,2],[2,3],[0]],"joltages":[22,19,28,9]},{"target":[true,true,false,false,true,true,true],"buttons":[[1,2,3,4,5],[2,3,4,5],[0,2,4,5],[1,4],[0,2,4],[3],[0,1,3,6],[1,3,6]],"joltages":[37,171,27,179,33,24,158]},{"target":[false,true,true,true,true,false],"buttons":[[1,2,3,4],[0,4],[0,1,3],[1,2,3],[2,3,4,5],[1,2,3,4,5],[0,2]],"joltages":[44,38,47,45,44,21]},{"target":[false,true,true,false,true,false,false,false,true],"buttons":[[1,6,8],[2,3,4,5,8],[0,1,2,3,6,8],[0,2,3,4,7,8],[5,7],[0,1,2,3,4,5,8],[1,3,4,5],[0,1,4],[1,2,3,6,7,8],[4,5,6,7],[0,1,2,4,5,6,8]],"joltages":[59,172,61,70,85,56,141,54,164]},{"target":[false,true,true,false,false,false,false,false,false],"buttons":[[7,8],[3,5],[1,2],[1,3,5,6,8],[2,3,4,5,6],[0,4,7,8],[2,4],[1,2,3,4,5,6,7]],"joltages":[4,35,43,56,44,56,47,41,33]},{"target":[true,false,false,false,false,true,false,false,false,false],"buttons":[[0,1,2,3,4,5,7,8,9],[2,4,5,9],[3,5,6],[3,9],[0,3,5,9],[0,1,4],[0,1,3,5,6,8],[0,1,2,4,5,6,7,8],[0,2,5,6,7,8,9],[0,1,3,6,8,9],[4,6,8]],"joltages":[217,50,191,56,54,220,203,176,191,209]},{"target":[false,true,false,false,true,false],"buttons":[[0,2,4],[1,3],[1,3,5],[1,2,3,5],[0,1,2,3],[3],[0,3,4,5]],"joltages":[145,21,28,151,139,132]},{"target":[true,false,false,true,true,true],"buttons":[[3,4],[2],[1,3,5],[1,2,3,5],[0,1,2],[0,2,4,5],[0,2,3,4],[0,2,3]],"joltages":[42,19,63,44,38,13]},{"target":[true,false,true,false,false,false,false,false,false],"buttons":[[0,2,4,6,7],[0,3,4,6,8],[0,3,4,5,8],[0,1,4,6],[2,4,5],[2,3,5],[1,3,5,7],[3,8]],"joltages":[32,17,39,53,46,56,18,25,25]},{"target":[true,true,true,false,false,false,false,false,false,true],"buttons":[[0,1,2,5],[5,6,9],[0,2,8,9],[0,2,3,5],[2],[0,1,2,3,4,5,6,7],[0,1,2,3,5,6,7,9],[7],[0,3,4]],"joltages":[73,56,84,44,19,78,52,49,9,44]},{"target":[true,false,true,true],"buttons":[[1,2],[2],[0,1,3],[0,1,2]],"joltages":[21,27,190,4]},{"target":[false,false,false,true,false,false,true,false,true,true],"buttons":[[0,2,3,4,6,7,8,9],[0,2,3,4,8,9],[0,1,2,5,6,8,9],[2,3],[0,1,2,5,6,7,8],[1,2,5,8],[0,1,2,3,5,7,8,9],[2,7],[0,3,8,9],[2,4,9]],"joltages":[36,32,70,37,11,32,14,33,37,42]}];
280
281 let currentMode = 1; // 1 or 2
282 let currentMachineIndex = 0;
283 let currentState = [];
284 let buttonStates = []; // Track which buttons are "on" (pressed odd number of times)
285 let isPlaying = false;
286 let showingSolution = false;
287 let solutionSteps = [];
288 let currentStep = 0;
289 let solvedMachines = new Set(); // Track which machines have been solved
290 let animationSpeed = 200; // ms between button presses (default 5x)
291
292
293 function renderMachine() {
294 const machine = machines[currentMachineIndex];
295
296 // Update title based on mode
297 const titleEl = document.getElementById('displayTitle');
298 if (currentMode === 1) {
299 titleEl.textContent = 'Indicator Lights';
300 titleEl.style.color = '#89b4fa';
301 } else {
302 titleEl.textContent = 'Joltage Counters';
303 titleEl.style.color = '#f9e2af';
304 }
305
306 // Render lights or counters
307 const lightsDiv = document.getElementById('lights');
308 lightsDiv.innerHTML = '';
309
310 if (currentMode === 1) {
311 // Part 1: Indicator lights
312 machine.target.forEach((target, i) => {
313 const light = document.createElement('div');
314 const isOn = currentState[i];
315 light.className = `light ${isOn ? 'on' : 'off'} ${target ? 'target' : ''}`;
316 light.style.setProperty('--fill-height', isOn ? '100%' : '0%');
317 const label = document.createElement('div');
318 label.textContent = i;
319 light.appendChild(label);
320 lightsDiv.appendChild(light);
321 });
322 } else {
323 // Part 2: Joltage counters with fill animation
324 machine.joltages.forEach((target, i) => {
325 const counter = document.createElement('div');
326 const current = currentState[i] || 0;
327 const isTarget = current >= target;
328 const fillPercent = target > 0 ? Math.min(100, (current / target) * 100) : 0;
329
330 counter.className = `light ${isTarget ? 'on' : 'off'} ${true ? 'target' : ''}`;
331 counter.style.setProperty('--fill-height', `${fillPercent}%`);
332
333 const indexLabel = document.createElement('div');
334 indexLabel.style.fontSize = '7px';
335 indexLabel.style.opacity = '0.7';
336 indexLabel.textContent = `[${i}]`;
337
338 const valueLabel = document.createElement('div');
339 valueLabel.style.fontSize = '10px';
340 valueLabel.style.fontWeight = 'bold';
341 valueLabel.innerHTML = `${current}/<span style="color: #f9e2af;">${target}</span>`;
342
343 counter.appendChild(indexLabel);
344 counter.appendChild(valueLabel);
345 lightsDiv.appendChild(counter);
346 });
347 }
348
349 // Render buttons
350 const buttonsDiv = document.getElementById('buttons');
351 buttonsDiv.innerHTML = '';
352 machine.buttons.forEach((toggles, i) => {
353 const btn = document.createElement('div');
354 const pressCount = buttonStates[i] || 0;
355 const isPressed = currentMode === 1 ? (pressCount % 2 === 1) : (pressCount > 0);
356 btn.className = `button-display ${isPressed ? 'pressed' : ''}`;
357 btn.innerHTML = `
358 <div class="button-label">Button ${i}${currentMode === 2 ? ` (${pressCount})` : ''}</div>
359 <div class="button-toggles">Affects: ${toggles.join(', ')}</div>
360 `;
361 btn.addEventListener('click', () => toggleButton(i));
362 buttonsDiv.appendChild(btn);
363 });
364 }
365
366 function toggleButton(buttonIndex) {
367 const machine = machines[currentMachineIndex];
368
369 if (currentMode === 1) {
370 // Part 1: Toggle lights (XOR)
371 buttonStates[buttonIndex] = buttonStates[buttonIndex] ? 0 : 1;
372 machine.buttons[buttonIndex].forEach(lightIndex => {
373 currentState[lightIndex] = !currentState[lightIndex];
374 });
375 } else {
376 // Part 2: Increment counters
377 buttonStates[buttonIndex] = (buttonStates[buttonIndex] || 0) + 1;
378 machine.buttons[buttonIndex].forEach(counterIndex => {
379 currentState[counterIndex] = (currentState[counterIndex] || 0) + 1;
380 });
381 }
382
383 renderMachine();
384 updateStats();
385 }
386
387 function solveMachine(machine) {
388 const n = machine.target.length;
389 const m = machine.buttons.length;
390
391 const matrix = [];
392 for (let i = 0; i < n; i++) {
393 const row = [];
394 for (let j = 0; j < m; j++) {
395 row.push(machine.buttons[j].includes(i) ? 1 : 0);
396 }
397 row.push(machine.target[i] ? 1 : 0);
398 matrix.push(row);
399 }
400
401 const pivotCols = [];
402 for (let col = 0; col < m; col++) {
403 let pivotRow = -1;
404 for (let row = pivotCols.length; row < n; row++) {
405 if (matrix[row][col] === 1) {
406 pivotRow = row;
407 break;
408 }
409 }
410
411 if (pivotRow === -1) continue;
412
413 const targetRow = pivotCols.length;
414 if (pivotRow !== targetRow) {
415 [matrix[pivotRow], matrix[targetRow]] = [matrix[targetRow], matrix[pivotRow]];
416 }
417
418 pivotCols.push(col);
419
420 for (let row = 0; row < n; row++) {
421 if (row !== targetRow && matrix[row][col] === 1) {
422 for (let c = 0; c <= m; c++) {
423 matrix[row][c] ^= matrix[targetRow][c];
424 }
425 }
426 }
427 }
428
429 const solution = new Array(m).fill(0);
430 for (let i = pivotCols.length - 1; i >= 0; i--) {
431 const col = pivotCols[i];
432 solution[col] = matrix[i][m];
433 for (let j = col + 1; j < m; j++) {
434 if (matrix[i][j] === 1) {
435 solution[col] ^= solution[j];
436 }
437 }
438 }
439
440 return solution;
441 }
442
443 // Part 2 solver (copy of server-side logic)
444 function solveMachinePart2(machine) {
445 const n = machine.joltages.length;
446 const m = machine.buttons.length;
447 const target = machine.joltages;
448
449 const A = [];
450 for (let i = 0; i < n; i++) {
451 const row = [];
452 for (let j = 0; j < m; j++) {
453 row.push(machine.buttons[j].includes(i) ? 1 : 0);
454 }
455 A.push(row);
456 }
457
458 const matrix = [];
459 for (let i = 0; i < n; i++) {
460 matrix.push([...A[i], target[i]]);
461 }
462
463 const pivotCols = [];
464 for (let col = 0; col < m; col++) {
465 let pivotRow = -1;
466 for (let row = pivotCols.length; row < n; row++) {
467 if (matrix[row][col] !== 0) {
468 pivotRow = row;
469 break;
470 }
471 }
472
473 if (pivotRow === -1) continue;
474
475 const targetRow = pivotCols.length;
476 if (pivotRow !== targetRow) {
477 [matrix[pivotRow], matrix[targetRow]] = [matrix[targetRow], matrix[pivotRow]];
478 }
479
480 pivotCols.push(col);
481
482 const pivot = matrix[targetRow][col];
483 for (let c = 0; c <= m; c++) {
484 matrix[targetRow][c] /= pivot;
485 }
486
487 for (let row = 0; row < n; row++) {
488 if (row !== targetRow && matrix[row][col] !== 0) {
489 const factor = matrix[row][col];
490 for (let c = 0; c <= m; c++) {
491 matrix[row][c] -= factor * matrix[targetRow][c];
492 }
493 }
494 }
495 }
496
497 const isPivot = new Array(m).fill(false);
498 pivotCols.forEach(col => isPivot[col] = true);
499 const freeVars = [];
500 for (let j = 0; j < m; j++) {
501 if (!isPivot[j]) freeVars.push(j);
502 }
503
504 if (freeVars.length > 8) { // Reduced limit for browser
505 return new Array(m).fill(0);
506 }
507
508 let minPresses = Infinity;
509 let bestSolution = [];
510
511 const maxTarget = Math.max(...target);
512 const maxFreeValue = Math.min(maxTarget * 2, 100);
513
514 function searchFreeVars(idx, currentSol) {
515 if (idx === freeVars.length) {
516 const sol = [...currentSol];
517 let valid = true;
518 for (let i = pivotCols.length - 1; i >= 0; i--) {
519 const col = pivotCols[i];
520 let val = matrix[i][m];
521 for (let j = col + 1; j < m; j++) {
522 val -= matrix[i][j] * sol[j];
523 }
524 sol[col] = val;
525
526 if (val < -1e-9 || Math.abs(val - Math.round(val)) > 1e-9) {
527 valid = false;
528 break;
529 }
530 }
531
532 if (valid) {
533 const intSol = sol.map(x => Math.round(Math.max(0, x)));
534 const presses = intSol.reduce((sum, x) => sum + x, 0);
535 if (presses < minPresses) {
536 minPresses = presses;
537 bestSolution = intSol;
538 }
539 }
540 return;
541 }
542
543 for (let val = 0; val <= maxFreeValue; val++) {
544 currentSol[freeVars[idx]] = val;
545 searchFreeVars(idx + 1, currentSol);
546 }
547 }
548
549 searchFreeVars(0, new Array(m).fill(0));
550 return bestSolution;
551 }
552
553 function getCurrentSolution() {
554 const machine = machines[currentMachineIndex];
555 return currentMode === 1 ? solveMachine(machine) : solveMachinePart2(machine);
556 }
557
558 function showSolution() {
559 const machine = machines[currentMachineIndex];
560 const solution = getCurrentSolution();
561
562 if (currentMode === 1) {
563 currentState = new Array(machine.target.length).fill(false);
564 buttonStates = [...solution].map(v => v === 1);
565
566 solution.forEach((shouldPress, buttonIndex) => {
567 if (shouldPress === 1) {
568 machine.buttons[buttonIndex].forEach(lightIndex => {
569 currentState[lightIndex] = !currentState[lightIndex];
570 });
571 }
572 });
573 } else {
574 currentState = new Array(machine.joltages.length).fill(0);
575 buttonStates = [...solution];
576
577 solution.forEach((pressCount, buttonIndex) => {
578 for (let p = 0; p < pressCount; p++) {
579 machine.buttons[buttonIndex].forEach(counterIndex => {
580 currentState[counterIndex]++;
581 });
582 }
583 });
584 }
585
586 showingSolution = true;
587 renderMachine();
588 updateStats();
589 }
590
591 function updateStats() {
592 const machine = machines[currentMachineIndex];
593 const solution = getCurrentSolution();
594 const minPresses = solution.reduce((a, b) => a + b, 0);
595
596 let totalPressed;
597 if (currentMode === 1) {
598 totalPressed = buttonStates.filter(b => b).length;
599 } else {
600 totalPressed = buttonStates.reduce((sum, count) => sum + (count || 0), 0);
601 }
602
603 // Calculate accumulated total for solved machines
604 let accumulatedTotal = 0;
605 solvedMachines.forEach(idx => {
606 const m = machines[idx];
607 const sol = currentMode === 1 ? solveMachine(m) : solveMachinePart2(m);
608 accumulatedTotal += sol.reduce((a, b) => a + b, 0);
609 });
610
611 document.getElementById('statsInfo').textContent = `Buttons Pressed: ${totalPressed} | Target: ${minPresses} | Accumulated Total: ${accumulatedTotal}`;
612 document.getElementById('machineInfo').textContent = `Machine ${currentMachineIndex + 1} / ${machines.length}`;
613 }
614
615 document.getElementById('prev').addEventListener('click', () => {
616 if (currentMachineIndex > 0) {
617 isPlaying = false;
618 document.getElementById('play').textContent = '▶ Play';
619 currentMachineIndex--;
620 initMachine();
621 }
622 });
623
624 document.getElementById('next').addEventListener('click', () => {
625 if (currentMachineIndex < machines.length - 1) {
626 isPlaying = false;
627 document.getElementById('play').textContent = '▶ Play';
628 currentMachineIndex++;
629 initMachine();
630 }
631 });
632
633 document.getElementById('reset').addEventListener('click', initMachine);
634
635 document.getElementById('togglePart').addEventListener('click', () => {
636 currentMode = currentMode === 1 ? 2 : 1;
637 document.getElementById('togglePart').textContent = `Part ${currentMode}`;
638 solvedMachines.clear();
639 initMachine();
640 });
641
642 document.getElementById('play').addEventListener('click', () => {
643 isPlaying = !isPlaying;
644 document.getElementById('play').textContent = isPlaying ? '⏸ Pause' : '▶ Play';
645 if (isPlaying) {
646 animateSolution();
647 }
648 });
649
650 // Speed control
651 const speedSlider = document.getElementById('speed');
652 const speedValue = document.getElementById('speedValue');
653 speedSlider.addEventListener('input', (e) => {
654 const speed = parseInt(e.target.value);
655 speedValue.textContent = `${speed}x`;
656 // Faster speed = shorter delay (inverse relationship)
657 animationSpeed = 1000 / speed;
658 });
659
660 function animateSolution() {
661 if (!isPlaying) return;
662
663 if (currentStep < solutionSteps.length) {
664 // Toggle the next button in the solution
665 const buttonIndex = solutionSteps[currentStep];
666 toggleButton(buttonIndex);
667 currentStep++;
668
669 // Use 10x faster speed for Part 2 (more button presses)
670 const delay = currentMode === 2 ? animationSpeed / 10 : animationSpeed;
671 setTimeout(animateSolution, delay);
672 } else {
673 // Mark this machine as solved
674 const machine = machines[currentMachineIndex];
675 let isCorrect;
676 if (currentMode === 1) {
677 isCorrect = currentState.every((state, i) => state === machine.target[i]);
678 } else {
679 isCorrect = currentState.every((state, i) => state === machine.joltages[i]);
680 }
681
682 if (isCorrect) {
683 solvedMachines.add(currentMachineIndex);
684 updateStats();
685 }
686
687 // Current machine done, move to next with a brief pause
688 if (currentMachineIndex < machines.length - 1) {
689 if (isPlaying) {
690 // Add delay between machines (3x the normal animation speed)
691 setTimeout(() => {
692 currentMachineIndex++;
693 initMachine();
694 setTimeout(animateSolution, animationSpeed);
695 }, animationSpeed * 3);
696 }
697 } else {
698 // All done
699 isPlaying = false;
700 document.getElementById('play').textContent = '▶ Play';
701 setTimeout(() => {
702 currentMachineIndex = 0;
703 initMachine();
704 }, animationSpeed * 4);
705 }
706 }
707 }
708
709 function initMachine() {
710 const machine = machines[currentMachineIndex];
711 showingSolution = false;
712 currentStep = 0;
713
714 if (currentMode === 1) {
715 // Part 1
716 currentState = new Array(machine.target.length).fill(false);
717 buttonStates = new Array(machine.buttons.length).fill(0);
718
719 const solution = solveMachine(machine);
720 solutionSteps = [];
721 solution.forEach((shouldPress, idx) => {
722 if (shouldPress === 1) {
723 solutionSteps.push(idx);
724 }
725 });
726 } else {
727 // Part 2
728 currentState = new Array(machine.joltages.length).fill(0);
729 buttonStates = new Array(machine.buttons.length).fill(0);
730
731 const solution = solveMachinePart2(machine);
732 solutionSteps = [];
733 solution.forEach((pressCount, idx) => {
734 for (let i = 0; i < pressCount; i++) {
735 solutionSteps.push(idx);
736 }
737 });
738 }
739
740 renderMachine();
741 updateStats();
742 }
743
744 // Initialize
745 initMachine();
746 </script>
747</body>
748</html>