| # | Call | Expected | Result | Run |
|---|
| ← → | step back / forward |
| Space | play / pause |
| R | restart playback from step 0 |
| L | toggle loop (wrap at the end) |
| O / U | step over / step out (by stack depth) |
| [ / ] | jump to previous / next milestone |
| T / F | answer a branch question True / False |
| Enter / Esc | submit / skip a predict question |
| . after a name | typed member completions (seen. → dict methods) |
| ( after a callable | signature help — enumerate(, nums.sort(, your own helper( |
| Ctrl+Space | word completion in the editor |
| Tab / Shift+Tab | indent / dedent selection |
| ? | this help |
class Solution template (write your own from scratch).#x=my:…) and saving again updates it.[2,7,11,15], 9 and the app builds the real call (trees/lists/graphs included). Fill Expected for pass/fail.dp[i] = …), swaps, appends, pointer chases (slow = nums[slow]), computes (mid = (lo+hi)//2), branches (True/False), and prints.i, lo, left…) pointing at their cell — drawn only into arrays the code actually indexes with that variable.i") — column i reads vertically across them.dp[i] = dp[i-1] + cost[i]).ε = the empty prefix at 0).⇒ chips on a dict mean its values are positions in another structure (seen: 'b': 1 ⇒ s[1]='b').out[i] = nums[i], res.append(arr[i])).None. Hover reads a cell; click a row to jump.[[0]*n]*m warning.2i+1 / 2i+2.⋯n⋯ in big arrays marks elided ranges (head + tail + pointer neighborhoods are captured).r - l + 1, len(heap), gcd(a, b)); sparklines plot them per step. Expressions are JavaScript over the current variables, with helpers: aggregates len, sum, avg, min, max, abs; sequence probes first, last, count(x, v), distinct, contains(x, v), isSorted; math floor, ceil, round, sqrt, sign, log2, pow(a, b), gcd(a, b), bitCount. Loaded problems suggest chips from their known techniques.isSorted(a), lo <= hi, sum(bucket) == n). A green/red strip shows where it holds vs breaks, and the first break flags the scrubber — this is how you check why an algorithm is correct, not just what it does.Call fib(3), dp[i] = dp[i-1] + dp[i-2] = 5, x > 5 → true), highlighting the current one and letting you click any line to jump.grid = [[0]*n]*m shows every row-arrow hitting one shared box — the classic mutable-default trap made visible.
Dear Fellow Coder,
I built this tool with a simple goal: to help you sharpen your coding skills, build confidence, and grow through meaningful, hands-on practice. Whether you're learning your first concepts, preparing for an interview, or taking the next step in your engineering career, I'm cheering you on and wishing you every success along the way.
The platform currently supports Python, but this is only the beginning. More features, challenges, and improvements are already on the horizon.
Your feedback is an important part of this journey. Please share what you enjoy, what feels unclear, and what you'd love to see next. Every suggestion helps shape the platform into a more useful and inspiring place for learners and engineers like you.
Keep learning, keep building, and never stop being curious.
Warmly,
Each row in the table is one test case. In the Call column, enter the input one of two ways:
1 · Just the arguments (LeetCode style)
CodeViz reads each parameter's type from your solution and builds the call for you:
Bracket values convert by the parameter's type:
[1,2,3] → list[3,null,4] → binary tree (TreeNode)[[2,4],[1,3]] → graph / 2-D grid2 · Or write the full call (with the class / method name)
null / true / false are accepted (they become Python None / True / False). Fill Expected for a pass/fail check, click a row or ▶ to run just that case, and + Case adds a row.