XP and levels, a dashboard profile, primers on every Tier I category
- changelog
XP and levels
Every accepted first solve earns XP: 40 for a core problem, 75 for bronze, 150 for silver, 300 for gold. Themed variants pay a quarter of that. On top of the solve itself:
- Clearing a category pays 25% of everything in its ladder as a bonus, and clearing a whole tier pays 25% again on every problem in the tier.
- First solve in each language pays 50, up to eight languages. Solving a problem you have already solved in a language it has not seen before pays 10.
- Streak milestones at 3, 7, 14, 30, 60, 100, 200 and 365 days, and solved-count milestones at 10, 25, 50, 100 and 250 problems.
- The daily challenge on its day, the first solve of each day, and study-group rooms: a quarter of base per solve, a bonus for clearing a room and for a podium finish, capped per day so two friends cannot farm it.
There is no cap on solve XP and no level cap. The ladder has twelve ranks, each a span of five levels: Lil' Bit, Bogo Rookie, Brute Enforcer, Hash Slinger, Deque Hand, Stack Overlord, Trie Hard, Divide and Conqueror, Dynamo Programmer, Graphmaster, Optimal Prime, and Algo Blazer from level 55 up, with every level past that costing the same. Each rank has its own insignia.
Your history was backfilled, so everything you have solved already counts and you start at the level you have earned.
Where you see it:
- The status bar has a level chip between the streak and the rank: the insignia, "12 ยท Brute Enforcer", a slim XP bar and "740 / 800 to 13". It links to the ladder.
- The result panel on an accepted submission shows a "+175 XP" pill with the breakdown by source and a bar toward the next level. Crossing a level adds a banner, and crossing a rank names the new rank in its colour.
- The /levels page lists the whole ladder with the XP per level and the XP to enter each rank, a guide to every way XP is earned, and your own row highlighted. Quests are on the guide as coming soon, and perks per rank are planned.
- Your profile carries the rank as a title line under your name, with the emblem, the XP bar and a faint emblem watermark on the banner, and a Total XP tile with this week's gain.
The profile page, rebuilt
The old profile was a header and a list. The new one is a dashboard, and every number on it is real.
The header is a dark banner with your avatar and name, your bio and chips under it, and a standing strip: global rank, followers, following, and fires received. Fires count the ๐ฅ reactions on your public shared solutions; the cell lights orange once you have one.
Below the header sit stat tiles for problems solved, current streak, total XP, acceptance rate and submissions, each with a line saying how it moved this week. A problem counts as solved this week only by its first accepted submission, so re-solving does not inflate the number.
Then the panels:
- Category progress lists every category, grouped by tier, with a bar of tiny cells, one per problem. A cell is lit when you have solved it, and hovering shows the title. It is a map of the whole ladder at a glance.
- Breakdown is difficulty rings plus a language bar.
- Leaderboard has two tabs. Following ranks you against the people you follow by distinct problems solved. Global shows the top five and your own row after a gap.
- Activity calendar spans the full width, with a year-summary row: submissions, active days and busiest day.
- Recent activity sits on the last row so the map and calendar come first.
The page is a little wider than the rest of the site to fit the grid.
Primers on the category pages
Each Learn category page now opens with a primer: a short lesson on the topic before the problem ladder. The shape is the same everywhere. One paragraph on what the structure or technique is, a small table (the type per language for a data structure, the variants for a technique), a paragraph on the key nuance, a complexity table, when to use it, and a line on how the ladder below progresses. About two hundred words. Tables render as compact cards.
Primers are live on all of Tier I (Hash Maps, Stacks & Queues, Two Pointers, Sliding Window, Binary Search) and on Prefix Sums, Intervals, Greedy, Heaps, Trie, BFS I and II and DFS I and II in Tier II. The remaining six Tier II categories are coming.
Four primers carry an animation. Two Pointers, Sliding Window, Binary Search and Prefix Sums each show the basic algorithm walking over a small array: labeled pointers, the active range, ruled-out cells faded, and a one-line caption per frame. There are play, pause and step controls, and the live arithmetic (the sum at the two ends, the window total, the middle value and its comparison) pops on each frame. Autoplay respects the reduced-motion setting. The Intervals primer has a static figure of the four two-interval cases with the overlap test marked on every start and end.
The animations and the figure are drawn as marker sketches rather than flat boxes: wobbly cells, arrows that get drawn on under the cells they point at, a cross through ruled-out cells, a ring around the answer, and handwriting for digits and captions. Each shape is one continuous stroke, so a box draws in pen order and an arrow grows its shaft before its head. The strokes tremble a little, like ink, and hold still under the reduced-motion setting.
Ladder rows are one line
The "Lesson" / "Solve โ" line under every problem is gone. A ladder row is now marker, title, difficulty, online count and a chevron. Clicking the row shows the problem statement and constraints first, the category lesson is behind a Show lesson toggle in the panel, and the Solve button sits in the panel's action bar. The header spans the full width of the page, the primer keeps a reading width, and the ladder is capped at that same width so it lines up.
BFS and DFS split in two
BFS and DFS were each one ladder that started on binary trees, moved to grids, and ended on state spaces. They are now two ladders each. Part I is binary trees, where a traversal needs no visited mark. Part II is everything that does: parent-array trees, 2D grids, explicit graphs and hidden state graphs. Part II takes part I as its prerequisite, and categories that pointed at BFS or DFS now point at the matching half. The old category links redirect to the part I pages.
Stacks & Queues also moved up to sit right after Hash Maps, so Tier I reads Hash Maps, Stacks & Queues, Two Pointers, Sliding Window, Binary Search.
Fixes
- Tree outputs showed -1000000007 for missing nodes. A problem that returns a tree, such as Prune Zero Subtrees, printed its result as
[1,-1000000007,2]in Your Output while Expected read[1,null,2], even on an accepted run. The judge represents null with a sentinel internally because typed arrays cannot hold null, and the raw form was stored and displayed as-is. Missing nodes now show as null in the live result, in the revealed hidden case on a failure, and in submission history, including submissions made before the fix. Verdicts were never affected. - Maximum XOR Pair rejected a per-node Python trie with a timeout, which is the approach its own lesson teaches. The judge runs the whole test suite as one process with a fixed CPU budget, and the suite had too many maximum-size cases for a Python trie to fit. The suite is resized: the length cap is halved, there is one maximum-size full-range case and the rest taper. A class-based trie, a dict trie and a list trie all pass now, with margin.
- Trapped Volume Between Heights had its description shortened to "water fills up the dips", which dropped the rule the problem is about. It states again, in one sentence, that a dip holds water only with a taller bar on both sides, up to the shorter one, and that water reaching either end runs off.