Guides · Prep timelines and study plans

Online assessment tomorrow: how to prepare in one evening

2026 · ~9 min read · OfferPilot AI

An online assessment is graded by hidden tests and a clock, not by a person who watches you think. So tonight is not for new algorithms. Spend three hours on the four things that actually decide an OA score: a paste-ready input template in the language you will submit in, two full-length timed problems, a written edge-case sweep, and the logistics that eat your first ten minutes tomorrow if you leave them until then.

An OA takes away three things a live round gives you

Most last-minute advice is written for a 45-minute conversation with an engineer. An OA removes the engineer, and every removal changes what you should practise tonight.

What changesLive roundOnline assessmentSo tonight, practise
Course correction A raised eyebrow or "what if the array is huge?" pulls you back within a minute of a wrong turn. Silence. A bad approach chosen in minute three is still costing you in minute thirty. Writing the approach and its complexity in a comment before typing code, then re-reading that comment once.
Credit for reasoning Clear thinking out loud scores even when the code is unfinished. Hidden tests score bytes, not intent. Elegant and wrong is zero. Making something pass the samples early, then improving it, never the reverse order.
The clock Soft. The interviewer stretches or trims scope. Hard, and often fixed per problem, so a 70-minute rabbit hole is unrecoverable. A 35-minute timer that you obey even when you feel close.
The environment Usually a shared editor with a friendly human on the other end. A browser editor, weak or absent autocomplete, and stdin parsing you write yourself. Typing your template from memory into a plain text box, twice.
Edge cases You can ask whether the input can be empty. You cannot. The empty case is often a hidden test on its own. The checklist further down, run before every submit.

One nuance worth flagging rather than asserting: scoring differs by platform. Some award partial credit per passing test, others want every test green. If your invitation email does not say, assume partial credit exists and submit early and often, because that assumption is cheap when wrong and expensive when right.

The three-hour evening plan

Offsets from the moment you sit down. Do both problems in the exact language you will submit in tomorrow. Not the language you are learning. Not the one that benchmarks faster. The one where you can write a hashmap, a custom sort and a queue without pausing to remember the syntax.

0:00 to 0:20, build the template and prove it runs

Paste the template below into a plain editor, fill solve() with a sum, and feed it input from a file. If the assessment offers a practice or sample question, run the template there instead, because that tells you whether the platform wants a full stdin program or only a function body. Getting that wrong tomorrow costs five minutes of confusion at the worst possible moment.

0:20 to 0:55, problem one, 35 minutes, hard timer

Pick something implementation-heavy with messy input rather than a clever one-trick puzzle. Subarray Sum Equals K, Group Anagrams or Meeting Rooms II are the right shape. No editorials, no autocomplete, no second tab. When the timer ends, stop typing mid-line if that is where you are.

0:55 to 1:15, post-mortem one

Run the edge-case checklist against what you wrote. Every case it breaks on is a case a hidden test would have caught for free. Write down the minute at which you committed to your approach, and whether that decision was the thing that cost you.

1:15 to 1:25, off the machine

Stand up, no screen. Consolidation is doing real work in this block and you cannot buy it back later tonight.

1:25 to 2:00, problem two, 35 minutes

This one should be constraint-driven, where the naive answer is obviously correct and obviously too slow. Koko Eating Bananas, Longest Substring Without Repeating Characters or Number of Islands. The skill being rehearsed is reading the constraints first and letting them pick the complexity for you.

2:00 to 2:20, post-mortem two

Same sweep. If you were stuck for more than fifteen minutes on either problem, that is the signal to read a worked solution now rather than tomorrow. A tool such as Code Copilot shortens that lookup, since Ctrl+Alt+S captures the problem off the screen and returns the intuition, a dry run and the Big-O, with Gemini as the model to read for coding questions. Then close it and re-derive the solution on paper, because reading a solution feels like learning and is not.

2:20 to 2:45, rebuild the template from memory

Blank file. Type the whole harness again with nothing to copy from. Then write your edge-case card by hand, on one side of one card. The compression is the revision, which is why a card someone else wrote is worth nothing to you.

2:45 to 3:00, logistics, then sleep

Charger in. Wired network if you have one. Confirm the deadline time zone, the length of the window once you open it, the browser the platform asks for, and whether the link is single use. Silence every notification source. Then stop, because tired judgement on an unhinted problem is the expensive failure.

The template you paste before reading the first problem

Fast input parsing is worth having ready because it is pure overhead: it earns no points, and improvised under a clock it fails the same way every time. Python first.

import sys
from collections import defaultdict, deque, Counter
import heapq, bisect, math

def solve(n, a):
    # one line here first: the approach and its complexity
    return 0

def main():
    data = sys.stdin.buffer.read().split()
    pos = 0
    def ni():
        nonlocal pos
        pos += 1
        return int(data[pos - 1])
    def ns():
        nonlocal pos
        pos += 1
        return data[pos - 1].decode()

    n = ni()
    a = [ni() for _ in range(n)]
    sys.stdout.write(str(solve(n, a)) + "\n")

def selftest():
    for case in ([], [7], [3, 3, 3], [-4, 0, 9], list(range(200000))):
        print(len(case), solve(len(case), case))

if __name__ == "__main__":
    sys.setrecursionlimit(300000)
    main()

Two notes on that. Reading sys.stdin.buffer.read() once, rather than calling input() inside a loop, is the difference between passing and timing out on the largest hidden test in Python. And deep recursion is the classic Python OA failure: if your solution recurses over a long linked list or a 1000 by 1000 grid, convert it to an explicit stack rather than trusting a raised limit, because the interpreter can still die on the real stack instead of raising something you can catch. The selftest function is the harness for the checklist below, and it is also the thing you delete before you submit.

The Java equivalent, since browser editors rarely give you completion worth using:

import java.io.*;
import java.util.*;

public class Main {
    static StreamTokenizer in = new StreamTokenizer(new BufferedInputStream(System.in));
    static PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out));

    static int ni() throws IOException { in.nextToken(); return (int) in.nval; }

    static long solve(int n, long[] a) {
        // approach and complexity in one line, before any code
        return 0L;
    }

    public static void main(String[] args) throws IOException {
        int n = ni();
        long[] a = new long[n];
        for (int i = 0; i < n; i++) a[i] = ni();
        out.println(solve(n, a));
        out.flush();
    }
}

Note the deliberate long[] for the values and the long return type even when the problem looks like it fits in an int. That one choice prevents the most common silent OA failure, described below. A caveat on StreamTokenizer: it parses numbers through a double, so if the constraints permit magnitudes beyond about nine quadrillion, read tokens as strings with a BufferedReader and Long.parseLong instead. Also remember the out.flush(). Buffered output that is never flushed produces an empty submission and a score of zero on code that was correct.

Let the constraints choose the complexity

In a live round you can ask. In an OA the constraint line is the hint, and it is the only one you get. Read it before the story about warehouses and robots.

Constraint on nWhat is safeWhat it usually signals
n up to 20ExponentialA bitmask or a full search over subsets is intended.
n up to 2,000QuadraticTwo nested loops or a simple DP table is fine.
n up to 200,000n log nSort, heap, binary search on the answer, or one pass with a map.
n up to 1,000,000LinearA single pass. If you are reaching for a sort, question it.
Values up to 1,000,000,000Watch the totalEach value fits in 32 bits. Their sum does not.

The edge cases hidden tests love

Run this list before every submit. It takes about ninety seconds and it is the highest-scoring ninety seconds in the assessment, because these are the cases a test author adds on purpose.

  1. Empty input. n equals zero, an empty string, an empty list. What does your loop return? Plenty of solutions return something sensible by luck, and plenty crash on a[0].
  2. A single element. Any two-pointer, sliding window or pairwise comparison that quietly assumes two items breaks here.
  3. All elements identical. The killer for two-pointer duplicate skipping, and for anything that used a set where a multiset was meant.
  4. Duplicates where the story implied uniqueness. The prompt says "user IDs" and you assume they are distinct. The constraints never said so.
  5. Integer overflow. Two hundred thousand values of up to a billion sum to 2 times 10 to the 14, which wraps silently in a 32-bit int in Java, C++ or C#. The three usual sites are running sums, products, and the midpoint in a binary search. Python is immune here, which is one honest reason to pick it.
  6. Negatives and zero. Prefix sums, division, the modulo of a negative number, and any greedy that assumed values only ever grow.
  7. Already sorted and reverse sorted input. The pathological case for a naive partition and for anything that early-exits on the first comparison.
  8. The maximum size the constraints allow. Generate it locally with a one-line loop and time it. Correct plus too slow scores what wrong scores.
  9. Off-by-one on indexing. Problems that describe positions as 1-indexed while your array is 0-indexed give answers that are the right shape and wrong by one, which is exactly the failure that passes the samples.
  10. Output format. A trailing space, a missing newline, a float printed where an integer was expected, an unsorted answer for a result the grader compares in order. String comparison forgives none of it.

Where this plan stops working

This is a sharpening plan and it assumes a base. If you have never written a breadth-first search or a hashmap counting solution, one evening will not create that, and the realistic goal shifts to passing the visible sample tests on both problems rather than clearing every hidden one. Nothing above helps a domain assessment either. A SQL round, a front-end build task or a language-specific quiz needs its own rehearsal.

Be equally clear-eyed about tooling, ours included. OfferPilot AI runs on Windows 10 and 11 only, with no macOS, Linux, mobile or browser version, so if you are taking the assessment on a MacBook tomorrow, tonight's practice hours are the only place it fits at all. Its overlay is excluded from screen capture at the operating-system level, which means it does not appear in Zoom, Teams, Meet or a screen recording. That statement is about screen sharing and nothing else. It does nothing about webcam monitoring, a lockdown browser, a proctor watching you in person, eye tracking, or a second-device camera, and online assessments commonly use exactly those. Where an assessment's rules forbid outside assistance, the honest place for any tool is the evening before, not the assessment window. If you are unsure what your platform monitors, the invitation email and the platform's own candidate FAQ are the sources to trust, not a forum thread.

Tomorrow morning

Read your edge-case card twice. Paste the template into a scratch file so it is one keystroke away. Open the assessment with two hours of clear runway rather than twenty minutes before the deadline, because a browser or network problem at that point costs the whole score. Then read the constraints first, write the approach line, and start.

One last thing that is easy to skip: decide in advance what you do when a problem is not falling. Fifteen minutes, then the brute force gets written and submitted, then you move on and come back if the clock allows. Deciding that now is worth more tomorrow than any pattern you could still cram tonight.

Related guides

Rehearse tonight, not during the assessment.

Capture a practice problem, read the intuition, the dry run and the Big-O, then close it and re-derive it yourself.