Cross-Margin Liquidation Engine yenw0d

Simulate a cross-margin derivatives engine: process trades, track account equity, and liquidate undercollateralized accounts as fast as possible.

Accounts are funded with a USD deposit and trade instruments whose prices change over time. When a price update causes an account’s equity to fall below 1% of its total position notional, the account must be liquidated.

Definitions

  • Account equity = balance + Σ(size_i * price_i) - Σ(total_paid_i)
  • Total position notional = Σ(|size_i| * price_i)
  • Total paid for instrument i = signed sum of trade_size * price_at_trade_time across all trades
  • Margin rule: liquidate if equity < total_notional / 100 after any price update

Input

One command per line on STDIN:

  • a <balance> – create account with USD balance (IDs start at 0, incrementing)
  • p <instrument_idx> <price> – set/update instrument price (0-indexed)
  • t <account_idx> <instrument_idx> <size> – trade size (signed) at current price
  • Final line: <account_idx> – query this account and terminate

Output

On each price update, liquidate all accounts violating the margin rule. For each liquidation, print:

liquidate <account_id> <equity> <position_notional>

Liquidation order: largest total position notional first, then account ID descending as tie-breaker. Liquidated accounts have their balance and positions cleared.

For the final query, print <equity> <notional> for the requested account.

Constraints

  • Accounts: <= 100,000
  • Instruments: <= 1,000
  • Price range: 100 to 1,000,000
  • Trade size range: 1 to 10,000

Example

a 100
p 0 100
t 0 0 10
p 0 90
0

Output:

liquidate 0 0 900
0 0
Back to listMar 15, 2026 03:59Josu San MartinJosu San MartinScore: 3,636Success
Source Code

Source code access is restricted. Log in to request access.

Challenge History

No challenges yet.

Run Statistics
#DateScoreWall TimeCPU UserCPU SystemMemoryError
1Mar 15, 2026 03:593,08372,155,66936,073,0004,008,0002,387,968
2Dec 31, 2025 23:473,09970,607,30237,260,0003,021,0002,424,832
3Mar 15, 2026 05:013,16864,919,24937,165,0004,017,0002,289,664
4Mar 15, 2026 03:593,17871,070,69039,304,0002,015,0002,433,024
5Jan 5, 2026 04:533,22270,125,91338,893,0002,991,0002,445,312
6Jan 5, 2026 04:543,24366,807,74838,144,0004,015,0002,387,968
7Mar 15, 2026 05:013,27570,512,05740,542,0002,027,0002,445,312
8Mar 15, 2026 04:233,28168,597,70940,617,0002,030,0002,473,984
9Mar 15, 2026 04:063,28572,378,98739,659,0003,050,0002,490,368
10Mar 15, 2026 04:303,29767,827,57040,873,0001,993,0002,433,024
11Mar 15, 2026 04:043,31767,748,25041,121,0002,005,0002,342,912
12Mar 15, 2026 04:063,35465,698,82439,543,0004,055,0002,527,232
13Mar 15, 2026 04:363,38176,506,45542,954,000998,0002,289,664
14Jan 5, 2026 04:543,39571,021,94440,119,0004,011,0002,449,408
15Mar 15, 2026 04:043,39772,698,97742,148,0002,007,0002,527,232
16Jan 7, 2026 05:313,46267,503,77040,007,0005,000,0002,449,408
17Mar 15, 2026 05:013,47766,761,87142,194,0003,013,0002,449,408
18Jan 5, 2026 04:533,47870,341,97643,209,0002,009,0002,437,120
19Jan 5, 2026 04:543,49370,569,54743,391,0002,018,0002,420,736
20Mar 15, 2026 04:303,50571,475,15842,525,0003,037,0002,412,544
21Jan 5, 2026 04:543,52871,313,82838,886,0006,979,0002,416,640
22Mar 15, 2026 04:363,53170,716,62742,913,0002,993,0002,322,432
23Mar 15, 2026 05:013,54274,350,70844,041,0002,001,0002,441,216
24Dec 31, 2025 23:473,55874,618,79541,222,0005,027,0002,428,928
25Jan 7, 2026 05:313,56770,935,20243,342,0003,023,0002,469,888
26Mar 15, 2026 04:043,58373,415,58444,557,0002,025,0002,367,488
27Mar 15, 2026 03:593,58975,278,68442,597,0004,056,0002,465,792
28Jan 5, 2026 04:543,60673,238,38743,887,0002,992,0002,330,624
29Jan 5, 2026 04:543,60774,318,88542,896,0003,990,0002,453,504
30Mar 15, 2026 04:043,61672,930,23345,003,0002,000,0002,404,352
31Jan 7, 2026 05:313,63573,152,27943,229,0004,021,0002,363,392
32Mar 15, 2026 05:013,63673,284,18042,240,0005,028,0002,498,560
33Mar 15, 2026 04:033,64275,005,62844,324,0003,022,0002,441,216
34Dec 31, 2025 23:573,64568,383,28245,371,0002,016,0002,383,872
35Mar 15, 2026 04:233,64678,819,59643,366,0004,034,0002,498,560
36Mar 15, 2026 04:303,64779,221,65644,386,0003,026,0002,375,680
37Mar 15, 2026 04:063,65076,641,17042,404,0005,048,0002,428,928
38Dec 31, 2025 23:513,65572,084,51044,487,0003,033,0002,486,272
39Mar 15, 2026 05:013,66878,091,81244,639,0003,043,0002,506,752
40Mar 15, 2026 04:043,71573,956,40141,255,0007,043,0002,404,352
41Mar 15, 2026 04:033,72174,337,28944,348,0004,031,0002,531,328
42Mar 15, 2026 03:593,72674,670,04344,396,0004,036,0002,424,832
43Mar 15, 2026 04:233,77081,580,02544,012,0005,001,0002,371,584
44Jan 5, 2026 04:533,77279,304,71747,031,0002,001,0002,441,216
45Mar 15, 2026 04:233,77671,813,32647,082,0002,003,0002,379,776
46Mar 15, 2026 04:303,78378,114,89046,172,0003,011,0002,342,912
47Dec 31, 2025 23:473,79672,051,14147,333,0002,014,0002,412,544
48Dec 31, 2025 23:513,79872,754,03346,349,0003,022,0002,416,640
49Mar 15, 2026 04:233,81172,931,14745,499,0004,044,0002,486,272
50Mar 15, 2026 04:063,86173,351,30146,180,0004,015,0002,482,176
51Mar 15, 2026 04:303,87474,039,80746,330,0004,028,0002,338,816
52Dec 31, 2025 23:513,88278,398,18343,404,0007,065,0002,453,504
53Mar 15, 2026 04:303,88480,122,62449,481,0001,009,0002,441,216
54Mar 15, 2026 04:363,89680,575,52549,641,0001,013,0002,416,640
55Dec 31, 2025 23:573,94078,848,85045,200,0006,026,0002,441,216
56Dec 31, 2025 23:573,96073,027,46546,435,0005,047,0002,351,104
57Mar 15, 2026 03:593,96785,759,57349,553,0002,022,0002,367,488
58Mar 15, 2026 04:063,97676,671,34249,657,0002,026,0002,387,968
59Mar 15, 2026 04:033,99083,096,16548,882,0002,992,0002,314,240
60Mar 15, 2026 04:043,99677,576,68348,956,0002,997,0002,408,448
61Mar 15, 2026 04:234,03072,666,63349,370,0003,022,0002,539,520
62Mar 15, 2026 03:594,06775,765,32650,880,0001,995,0002,420,736
63Mar 15, 2026 04:064,10582,279,78547,322,0006,041,0002,510,848