Mock interviews with replay, filters on saved lists, and a fairer study group draw
- changelog
Mock interviews
Mock interview is a blank shared editor for up to 3 people. Start one from the new tile on the dashboard (or the Interview destination on phones); you get an invite link, and whoever opens it joins the room. Bring your own question. The host picks the language, everyone types in the same buffer, and Ctrl+Enter runs it as a plain program: no harness, no expected output, nothing graded. The Input tab is stdin, and the starter code in every language already reads each line of it into lines and echoes them back with a count, so the plumbing is in place before anyone writes a line.
The interviewer gets two tools the candidate never sees during the session. Notes is a private scratchpad in a tab beside the chat, autosaved as you type and still editable on the ended screen. Once the interview has ended, everyone who was in the room can read every author's notes, so the candidate opens the finished interview and finds the write-up. The stopwatch sits in the toolbar with Start, Pause and Reset, survives a refresh, and is never sent to anyone.
The room has the same drawing canvas as problem collab sessions: a pencil toggle over the editor with pen, eraser, palette, undo mine and clear. Hiding the drawing hides it for the whole room, so an interviewer can put the sketch away for everyone and either side can bring it back. The output panel and the chat sidebar drag to resize, and each size is remembered per browser.
/interview lists your active interviews and, under "Past interviews", every interview you ran or sat with who ran it and a preview of the notes you can read.
Replay
Every mock interview is recorded; the room shows a REC chip and the page says so. Once it has ended, anyone who was in it can watch it back from the ended screen or the history list. The replay rebuilds the code as it was typed by everyone, the shared drawing, the room chat, the interviewer's notes as they were written, each Run with its status and output, language switches, joins and leaves, and the end. Play and pause, 1x to 8x, a skip-idle clock that plays any quiet stretch over ten seconds as one second, a scrubber with a tick per chat message, run, note, language switch and join, and Space and the arrow keys for transport. Replays are kept for 90 days; the session, its participants and the notes stay.
Saved lists get the catalog's filters
/lists and shared list pages render the same controls as All Problems: a search box, topic and tag menus built from what the list actually contains, solved and attempted status when you are signed in, difficulty chips, and a sort picker that can order by the date each problem was saved. A remembered "Show tags" switch reveals topic tags on the cards; it is off by default because tags are spoilers, and filtering by a tag reveals it on the matching cards the way the catalog does.
A fairer study group draw
The random and topics modes used to pick only problems no participant had unlocked in a study group, then fall back to the whole pool once those ran out. Practice solves did not count, so a problem the whole room had cleared on the site still looked fresh, and once the pool ran short every problem was equal again.
Every problem now stays eligible but is drawn with a weight that falls from 1 when nobody has solved it to a quarter when every participant has. An accepted submission anywhere on the site counts. Unsolved problems dominate the session without being guaranteed, so a well-played catalog still varies.
Problem wording and difficulty
Count Enclosed Regions and its four themed variants now say which island a lake belongs to. A reader built a grid where an outer ring island encloses a water ring around an inner ring island and expected two lakes; the reference answer is zero, because the water ring borders both islands. The statement defines island, body of water and lake separately and adds the rule: a lake belongs to an island only if every land cell 4-adjacent to it is on that island, and a lake that borders two islands belongs to neither. The nested case is now pinned by hidden tests.
Difficulty tiers moved on feedback and solve data. Count Enclosed Regions, All Dictionary Segmentations, Trapped Volume Between Heights, Maximum of Each Window and Count Intervals Covering Points are silver instead of gold. Binary Tree Level Order Traversal and Anagram Index Groups are bronze instead of silver. Trapped Volume Between Heights also loses the "Formally, let maxLeft(i) ..." paragraph, which handed over the solution.
Fixes
- Frozen tabs stayed online for hours. Chrome freezes a hidden tab after about five minutes, and Memory Saver or a sleeping laptop do the same. The WebSocket stayed open because the browser answers protocol pings without running any JavaScript, so the idle tracker never fired and the user sat "online" in practice rooms, the site-wide count and Following. The server now tracks when each connection last sent a frame its page produced and marks it idle after about 90 seconds of silence; any later frame lifts it. The page also reports idle the instant Chrome fires its freeze event.
- A blank editor for spectators after a token refresh. When the session token refreshed, the practice room swapped its socket without treating the swap as a disconnect, so the code snapshot was never re-sent and the server held an empty document for that user. Spectators saw nothing, and the fresh connection counted as active regardless of the tab's idle state. The swap is now a disconnect and reconnect.
- Characters vanishing in the chat composer. The composer inherited the code font, which ships ligatures: typing
->,!=,==,<=,--or...rendered one merged glyph, and it looked as if a character had been eaten. Nothing was lost on send, where messages already rendered in the regular font. The composer now uses the regular font too. - Saved list cards. The solved check and the corner remove button had never met before, and overlapped. The card pads for the button now, and the running count line, which duplicated the page header's list size, appears only while a filter narrows the view.