advent of code 2025 in ts and nix
at main 53 kB view raw
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>