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 19, 2026 15:45Dominique GarmierDominique GarmierScore: 20,293Success
Source Code

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

Challenge History

No challenges yet.

Run Statistics
#DateScoreWall TimeCPU UserCPU SystemMemoryError
1Mar 19, 2026 15:4217,057247,871,577214,746,0006,991,0002,318,336
2Mar 19, 2026 15:3517,347252,548,963212,478,00013,029,0002,347,008
3Mar 19, 2026 15:5217,393250,140,371216,106,00010,004,0002,269,184
4Mar 19, 2026 17:1517,465254,133,030221,039,0006,001,0002,379,776
5Mar 19, 2026 16:1117,565250,784,945216,325,00012,018,0002,400,256
6Mar 19, 2026 16:2917,674258,936,587221,771,0007,991,0002,510,848
7Mar 19, 2026 16:2917,947257,416,083227,303,0006,008,0002,461,696
8Mar 19, 2026 15:3918,007256,299,382225,092,0009,003,0002,498,560
9Mar 19, 2026 16:4818,081255,302,646225,055,00010,002,0002,371,584
10Mar 19, 2026 15:4918,525270,658,747231,829,0008,993,0002,310,144
11Mar 19, 2026 16:1118,599266,348,895233,793,0007,992,0002,506,752
12Mar 19, 2026 15:3018,673273,736,595237,755,0004,994,0002,297,856
13Mar 19, 2026 16:5018,709271,848,696231,211,00012,011,0002,318,336
14Mar 19, 2026 15:4818,747275,124,154235,724,0007,990,0002,396,160
15Mar 19, 2026 15:5018,828276,354,610232,770,00011,988,0002,289,664
16Mar 19, 2026 15:4818,853270,252,995237,084,0008,002,0002,482,176
17Mar 19, 2026 17:2218,861272,707,234241,191,0004,003,0002,347,008
18Mar 19, 2026 15:2818,926282,417,997235,032,00011,001,0002,318,336
19Mar 19, 2026 17:1518,978275,576,351239,727,0006,992,0002,289,664
20Mar 19, 2026 16:2319,064273,043,787232,844,00014,990,0002,478,080
21Mar 19, 2026 15:3319,080274,396,985233,038,00015,002,0002,301,952
22Mar 19, 2026 16:5019,157274,830,132235,035,00014,002,0002,453,504
23Mar 19, 2026 15:5719,173272,774,448235,230,00014,013,0002,322,432
24Mar 19, 2026 16:3519,220282,593,089238,870,00010,994,0002,285,568
25Mar 19, 2026 16:2119,423281,709,638244,487,0008,015,0002,371,584
26Mar 19, 2026 16:5119,457284,913,227242,942,0009,997,0002,367,488
27Mar 19, 2026 16:3219,486277,067,106248,307,0005,006,0002,330,624
28Mar 19, 2026 16:2719,517277,640,017246,733,0006,992,0002,441,216
29Mar 19, 2026 15:2919,602281,189,978242,833,00011,991,0002,338,816
30Mar 19, 2026 16:2519,752289,889,634245,783,00010,990,0002,379,776
31Mar 19, 2026 16:3519,769280,330,373249,997,0006,999,0002,355,200
32Mar 19, 2026 15:2819,862284,069,541244,191,00014,010,0002,420,736
33Mar 19, 2026 16:3219,887286,779,927247,507,00011,022,0002,457,600
34Mar 19, 2026 15:2819,927284,707,521247,048,00012,002,0002,412,544
35Mar 19, 2026 15:5220,029294,767,852247,364,00013,019,0002,351,104
36Mar 19, 2026 16:3220,078293,939,410251,014,00010,000,0002,482,176
37Mar 19, 2026 15:5020,106287,239,342253,362,0008,011,0002,379,776
38Mar 19, 2026 16:2120,120289,559,262252,581,0008,985,0002,265,088
39Mar 19, 2026 16:4820,128288,451,948250,674,00010,985,0002,326,528
40Mar 19, 2026 15:2920,129288,408,146247,696,00013,982,0002,351,104
41Mar 19, 2026 17:1820,210291,758,214250,739,00011,987,0002,265,088
42Mar 19, 2026 15:3520,240289,728,732256,116,0007,003,0002,412,544
43Mar 19, 2026 17:1820,293286,284,901253,822,0009,992,0002,437,120
44Mar 19, 2026 15:4820,347291,203,772257,498,0007,013,0002,412,544
45Mar 19, 2026 16:2520,393290,940,024255,106,00010,004,0002,498,560
46Mar 19, 2026 16:1120,404284,334,889259,253,0006,005,0002,457,600
47Mar 19, 2026 14:0620,408296,084,304256,294,0009,010,0002,408,448
48Mar 19, 2026 16:2720,413298,535,105254,348,00011,015,0002,383,872
49Mar 19, 2026 15:4920,438298,906,425256,710,0008,989,0002,506,752
50Mar 19, 2026 16:2320,439300,164,291257,711,0007,991,0002,293,760
51Mar 19, 2026 16:3520,516294,393,480257,715,0008,990,0002,441,216
52Mar 19, 2026 16:5120,523296,241,882256,806,0009,992,0002,371,584
53Mar 19, 2026 17:2220,599294,259,027257,800,0009,992,0002,482,176
54Mar 19, 2026 15:5720,631296,933,347258,198,00010,007,0002,355,200
55Mar 19, 2026 15:5720,897299,514,234265,673,0005,992,0002,371,584
56Mar 19, 2026 15:3021,097297,868,190260,253,00014,013,0002,457,600
57Mar 19, 2026 14:0621,105305,000,306268,363,0006,008,0002,289,664
58Mar 19, 2026 16:2721,113303,312,211264,452,00010,017,0002,457,600
59Mar 19, 2026 17:1521,345307,767,490271,479,0006,010,0002,461,696
60Mar 19, 2026 15:5221,367306,820,664267,784,0009,991,0002,486,272
61Mar 19, 2026 16:2921,378307,396,399265,922,00011,996,0002,494,464
62Mar 19, 2026 16:2521,401305,799,339268,211,00010,007,0002,469,888
63Mar 19, 2026 14:0621,422307,294,776270,475,0008,014,0002,265,088
64Mar 19, 2026 15:3321,445308,787,709263,803,00014,988,0002,351,104
65Mar 19, 2026 15:5021,497313,719,822264,434,00015,024,0002,433,024
66Mar 19, 2026 15:3921,608309,577,669269,909,00010,996,0002,260,992
67Mar 19, 2026 15:4221,669311,698,747269,712,00011,987,0002,510,848
68Mar 19, 2026 17:1821,699313,387,060270,085,00012,003,0002,306,048
69Mar 19, 2026 15:2921,742310,387,491268,670,00013,982,0002,396,160
70Mar 19, 2026 15:4521,746312,798,330273,704,0008,990,0002,498,560
71Mar 19, 2026 16:4821,823310,132,768276,707,0006,992,0002,301,952
72Mar 19, 2026 16:5021,826315,137,659273,751,0009,990,0002,392,064
73Mar 19, 2026 15:3021,831308,076,493271,816,00011,991,0002,371,584
74Mar 19, 2026 15:4921,867309,229,507273,267,00011,010,0002,506,752
75Mar 19, 2026 15:3921,985313,210,499279,811,0005,995,0002,293,760
76Mar 19, 2026 15:4222,100319,351,447273,285,00014,014,0002,326,528
77Mar 19, 2026 16:5122,100314,487,918273,291,00014,014,0002,359,296
78Mar 19, 2026 16:2122,212312,284,450280,760,0007,993,0002,482,176
79Mar 19, 2026 16:2322,234318,631,267286,042,0003,000,0002,453,504
80Mar 19, 2026 15:3522,275316,623,923281,561,0008,015,0002,490,368
81Mar 19, 2026 15:4522,474317,832,497286,158,0006,003,0002,379,776
82Mar 19, 2026 17:2222,693317,285,816287,013,0008,000,0002,453,504
83Mar 19, 2026 15:4523,060328,081,168291,785,0007,994,0002,273,280
84Mar 19, 2026 15:3323,567335,525,491297,365,0009,011,0002,383,872