Launching user-contributed problems
- changelog
Launching user-contributed problems
You can now write coding problems and publish them for everyone on AlgoBlazer to solve. Anyone at rank Brute Enforcer (level 10) or above can start one from Contribute in the user menu.
Writing a problem
- A six-step editor. Problem, signature, test cases, reference solution, details, review. You can jump to any step at any time.
- One reference solution is enough. Write it in the language you like. Starter code for all eight languages is generated from your signature.
- BlazerBot can help. It can draft a statement from an idea, generate test cases, write and cross-check a reference solution, and look for mistakes your tests would miss. Its suggestions are only added when you accept them. Free accounts get 20 actions a day and Pro gets 100.
- Say where you were asked it. On the Details step you can pick the companies that asked you the problem, or name one that isn't listed yet for the team to add. Picks show as Asked at links once the problem is published.
Publishing it
- Your first problem gets a review. Send it in and the team reads it, then accepts it or asks for changes.
- After that, you publish on your own schedule. Release now or at a set time up to 90 days ahead, as public, unlisted or private, up to three releases a day. Publish finishes the test suite for you, adding whatever it still needs.
- You can keep editing. Changes go live when you publish them. Once someone else has submitted, the signature is fixed and test cases can only be added.
- Your followers hear about it. Each public release notifies them.
Solving one
- The Community page. The new Community menu in the nav bar, which opens on hover, leads to a page of public community problems, sorted by Newest, Top rated or Most solved. Your own show on your profile.
- All Problems too. Public community problems are also listed on All Problems, with a Community badge and the author's name. Random still picks only from the main catalog.
- Problems start in beta. Solvers vote on them, and good ones become stable.
- XP comes with stable. A community problem pays no XP until it is stable and public. When it gets there, earlier solves are paid back. Authors don't earn XP from solving their own problems.
Diagrams in problem statements
Some problems are hard to picture from text alone: a tree written as a level-order array, a grid of walls and open cells, a set of overlapping intervals. Fifty-seven statements now include a diagram of their example:
- Trees are drawn with their nodes and edges, and the path or subtree the example is about is highlighted.
- Grids show their walls, sources and shaded cells, often with the step or value each cell ends up with.
- Bars, intervals and number lines show heights, trapped water, covered ranges and gaps.
- Lists and graphs show their links and the order things happen in.
A diagram of a specific example sits inside that example's section. The diagrams follow the site theme, so they read the same in light and dark. Each one has a caption and a text description for screen readers.
Every number in a diagram is recomputed from the example, and that check turned up a few example explanations that had a value or a direction wrong. Those statements are corrected.
Grids read as grids
A 2D array used to print on one line, like [[1,0,1],[0,1,0],[1,1,1]], which is hard to read once a grid has more than a few rows. Now:
- Test cases and results lay out a 2D array one row per line, with the columns lined up and numbers right-aligned. That covers the sample panel and the details of a Run or Submit.
- Statement examples that hold a grid get the same layout: one
name = valueline per parameter, with each grid printed as aligned rows.
Change your username
Your username used to be fixed once you picked it. Settings → Account now lets you change it:
- One rename every 30 days. Changing only the letter case (
alicetoAlice) is always allowed and doesn't count. - Settings tells you when you can rename again, once the 30 days are running.
- Old links keep working. A link to your profile under an old name redirects to your current one.
- Your old name is held for you for 30 days, so nobody else can take it the moment you let it go, and you can change your mind and take it back.
Display names in chat
If you've set a display name, chat now shows it, followed by your @username in a lighter colour. If you haven't set one, chat shows your username as before. Mentions still use the username.
Some older accounts that signed up through another sign-in provider got that provider's full name copied in as their display name automatically. Those copies are cleared, so nobody's full name shows up in chat unless they typed it in themselves. Set one in Settings if you want it.
Leave a test case out of a Run
Every test case you can open from the tabs now has an Include in Run checkbox: samples, your own custom cases and cases you pinned for a re-check. Untick one and Run skips it. It's handy when one case prints a flood of debug output or you only want to look at the case that's failing.
- A skipped case shows as a dashed square, with its tab struck through.
- Your choices are kept for each problem, and Reset turns them all back on.
- You can't skip the last case left, so a Run always has something to run.
- Submit still runs every case.
Shared solutions
- Following filter. The Solutions tab has a Following toggle that shows only solutions from people you follow. It works together with the Approaches filters.
- Technique and complexity chips. Each shared solution card now shows the same technique and time and space labels as your own submissions.
- Techniques outside a problem's tags. The labeller used to consider only the techniques a problem is tagged with, so a solution that took another route, like binary search on a problem tagged heap and greedy, got no label and didn't count in Show approaches. It now considers every technique, and needs more confidence before showing one the problem isn't tagged with. Every existing solution has been relabelled. If a label looks wrong on your own solution, Wrong label? now has a More techniques search.
On discussions, the Most fires and Fastest sorts used to appear only on the Solutions filter. They're offered on every filter now. Picking one switches you to Solutions, since posts don't have fires or a runtime.
Practice room chat
- @-autocomplete. Type
@in a practice room's chat and it suggests the people in the room, active members first, then anyone from the recent history. - Date dividers. Messages from different days are separated by a date line, the way global chat already did, on desktop and in the mobile chat tab.
Time limits count every thread
Time per case used to be measured on the wall clock, so a solution that split its work across many threads or processes could finish a too-slow approach inside the limit. That no longer works:
- A case is timed on the larger of wall-clock time and CPU time across all its threads, plus child processes that have exited, where the language exposes them.
- Each run has a per-language cap on processes and threads. A worker pool that goes past the cap is refused, which shows up as a runtime error.
Single-threaded C++, Rust, Swift and Python read the same as before. Java's small cases read about 30 to 40 ms higher and garbage-heavy JavaScript about 25% higher, because the runtime's own helper threads now count.
Also new
- Streamers in the nav bar. The streamers page could only be reached from a strip on the dashboard that shows only while someone is live. It now has a link in the new Community menu, and a row in the mobile menu.
- Source links on beta problems. A beta problem adapted from a public post now links to it, next to the badges above the statement. The release date beside it drops its "Released" prefix; hover it to see what the date means.
- New Runs board. The Trail Blaze New Runs tab now opens on the last 30 days instead of the last 7.
- One beta tag. The All Problems page labelled beta three different ways. It now uses one purple βeta tag throughout.
Fixes
- Trail Blaze repeats. A problem from an earlier stage could come back later in the same attempt, with your old code still in the editor. A draw now never hands out a problem the attempt already holds.
- Study group time. The time on your results added up each solve's time from the session start, so three solves in a 30-minute room could read as 54 minutes and look like a hidden penalty. It now shows when you finished: your latest solve. Past rooms are recomputed. Time is still only a tiebreak after score.
- Go time limits. A Go solution that ran out of time on a case was reported as "Program exited before this test case was reported". It now reports Time Limit Exceeded.
- Difficulty tiers. After user reports, two problems move from Bronze to Silver (one with its themed version) and one from Silver to Gold.
- A statement that gave away the answer. One problem statement spelled out the key step of its solution. That passage is gone.
- Trail Blaze runs no longer show the Live feed. A Trail Blaze node shares its problem's room, so the side panel listed other people's practice solves of the same problem, each one link away from an answer. The feed is hidden during a run, and you still see who's around.
- Rust input parsing. When a string in the input matched the name of a later parameter, the Rust harness could mistake it for that parameter and crash. It now reads the input's top-level keys properly, the way the other languages already did.
- Profile difficulty rings. The By difficulty card had room for three rings, so Platinum wrapped onto a second line. All four fit on one line now.
- Chat in narrow panels. A sender's name and the timestamp no longer wrap onto two lines when the chat panel is narrow.