v2.1.3
LatestAdded
- Wired real keyboard shortcuts across the algorithm visualizer — Space (play/pause), arrow keys (step), R (reset), C (compare mode), Q (quiz mode), and ? for the shortcut help panel, which is now actually mounted and controlled; race mode shares the same playback keys.
- Added replay behavior: pressing play on the final step restarts the trace from step 1 in both the run panel and race mode.
- Added generic scrubber event markers (first find, pass boundaries, cost updates) for the six categories that previously had none — strings, compression, number theory, data structures, optimization, and approximation — with larger, easier-to-click marker dots.
- Added a compact current-pseudocode-line strip under the visualization for viewports where the full pseudocode block is off-screen, plus a mobile metric strip and a swipe-to-step gesture hint.
- Added component tests covering keyboard stepping, replay, and the final-step run summary.
Changed
- Moved the run panel (playback controls, scrubber, chart, explanations, pseudocode) directly under the page header on visualizer pages; session controls, scenario presets, and dataset controls now follow the visualization instead of preceding it.
- The run summary now appears only when the trace reaches its final step, instead of spoiling the outcome above the current-step explanation.
- Adapted Liquid Glass refraction to element geometry with geometry-aware displacement maps ported from the upstream standard rendering pipeline, and removed the obsolete fixed displacement map.
Fixed
- Fixed Boyer-Moore string matching: corrected the strong good-suffix shift, skipped zero-Z entries in table construction, added missing-occurrence sentinels to the good-suffix and bad-character tables, restricted the Galil bound to shifts proven by the matched-prefix rule, and fixed an empty-suffix over-shift plus a window bound that skipped matches at index 0 — verified with 500,000 randomized trials against brute force.
- Fixed the simplex visualizer performing an invalid pivot: the minimum-ratio test now takes the correct degenerate pivot on the zero-RHS row, reaching the true optimum z = 6 at (0, 3) instead of an infeasible solution that violated a constraint.
- Fixed counting sort and radix sort corrupting output for negative values by indexing with a min-value offset.
- Fixed merge sort comparison highlights pointing at overwritten snapshot positions, and quick sort counting no-op self-swaps in its swap metric.
- Fixed the B-tree delete-16 narration describing a merge that never happens (the actual trace is a case 3a borrow plus case 2b successor replacement) and rebuilt the Fibonacci heap cut diagram to respect the roots-are-never-marked invariant.
- Fixed the metric TSP 2-approximation reporting the doubled walk's cost for the final compressed cycle, and Dijkstra/Prim painting undiscovered nodes as frontier.
- Fixed the Burrows-Wheeler transform complexity annotation (O(n log n) for prefix-doubling construction) and wrong pseudocode line highlights across KMP, Boyer-Moore, Ukkonen, BWT, Huffman, Elias omega, LZ77, Miller-Rabin, and Prim.
- Fixed persisted or URL-supplied datasets with fewer than 3 values bypassing input validation and producing degenerate two-step traces.
- Fixed duplicate React keys in the step breadcrumb after a reset.