Fundamentals
Free practice on the building blocks. The systems are where the real work is.
Arrays & Strings
Solve most array and string problems in linear or log time without brute force.
5 challenges · ~4 h
Linear Structures & Bits
Build the containers every other structure is made from, and the bit tricks that make them fast.
4 challenges · ~4 h
Graphs
Model dependencies and networks, and find orders, components and cheapest routes through them.
6 challenges · ~6 h
Recursion, Greedy & DP
Break a hard problem into subproblems and choose between divide-and-conquer, greedy and DP.
4 challenges · ~4 h
Make It Pluggable
Swap an algorithm, a step or a backend without touching the code that uses it.
4 challenges · ~4 h
Actions as Objects
Turn actions and state into objects you can undo, replay, inspect and evaluate.
4 challenges · ~4 h
Decouple Events
Let components react to each other without holding references to each other.
4 challenges · ~4 h
Wrap & Extend
Add behavior to, or simplify, an object you don't own without changing its interface.
4 challenges · ~4 h
Create & Share Objects
Control how objects are created, configured, cloned and shared across an app.
6 challenges · ~6 h