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 13:19Dominique GarmierDominique GarmierScore: 16,369Success
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 13:0413,753197,984,882171,803,0006,992,0002,326,528
2Mar 19, 2026 13:0414,004207,136,652173,055,0009,002,0002,297,856
3Mar 19, 2026 13:2414,077206,753,509169,999,00012,999,0002,392,064
4Mar 19, 2026 12:4414,137212,286,664174,793,0008,989,0002,269,184
5Mar 19, 2026 12:3614,215210,544,671172,808,00011,986,0002,486,272
6Mar 19, 2026 12:4314,661218,144,437181,561,0009,027,0002,260,992
7Mar 19, 2026 13:0614,870221,327,440182,294,00011,017,0002,314,240
8Mar 19, 2026 12:5914,909218,108,964180,829,00012,987,0002,273,280
9Mar 19, 2026 13:2414,956223,990,393185,403,0009,019,0002,445,312
10Mar 19, 2026 13:0415,021225,138,054188,263,0007,009,0002,277,376
11Mar 19, 2026 12:2615,178223,735,070190,300,0007,011,0002,441,216
12Mar 19, 2026 12:5915,194224,815,724189,499,0008,021,0002,416,640
13Mar 19, 2026 12:3215,212226,540,944189,770,0007,990,0002,400,256
14Mar 19, 2026 12:3215,232227,960,161185,016,00013,001,0002,326,528
15Mar 19, 2026 13:0815,245221,071,004184,172,00014,013,0002,363,392
16Mar 19, 2026 13:3015,265225,129,398190,432,0008,018,0002,461,696
17Mar 19, 2026 13:3015,336228,676,979184,335,00015,027,0002,265,088
18Mar 19, 2026 12:5415,461231,824,288189,992,00010,999,0002,486,272
19Mar 19, 2026 13:1315,463220,344,260190,014,00011,000,0002,469,888
20Mar 19, 2026 13:1315,508233,480,599190,566,00011,032,0002,428,928
21Mar 19, 2026 12:2615,531232,579,068189,914,00011,994,0002,265,088
22Mar 19, 2026 13:0415,579226,241,926194,512,0008,021,0002,416,640
23Mar 19, 2026 12:2615,619228,737,699191,050,00012,003,0002,396,160
24Mar 19, 2026 12:4815,630232,458,316195,185,0008,007,0002,351,104
25Mar 19, 2026 12:2615,736233,868,474200,552,0004,011,0002,506,752
26Mar 19, 2026 12:4415,738232,939,776196,567,0008,023,0002,260,992
27Mar 19, 2026 13:0415,768228,554,087196,985,0007,999,0002,461,696
28Mar 19, 2026 12:2615,784228,512,518195,188,00010,009,0002,342,912
29Mar 19, 2026 13:0815,809230,471,198195,490,00010,025,0002,449,408
30Mar 19, 2026 13:1715,842234,209,925194,946,00010,996,0002,260,992
31Mar 19, 2026 13:2015,854228,363,991196,097,00010,004,0002,351,104
32Mar 19, 2026 12:5415,865234,071,916197,240,0009,010,0002,371,584
33Mar 19, 2026 13:2415,874235,938,214199,349,0007,012,0002,330,624
34Mar 19, 2026 12:5715,915230,975,475201,901,0004,997,0002,408,448
35Mar 19, 2026 13:2815,916232,963,347202,909,0003,998,0002,277,376
36Mar 19, 2026 12:3215,978234,388,859198,730,0008,987,0002,342,912
37Mar 19, 2026 13:2816,144234,649,103199,882,0009,994,0002,351,104
38Mar 19, 2026 12:5716,150238,039,634207,952,0001,999,0002,416,640
39Mar 19, 2026 13:0616,153235,868,625200,985,0008,999,0002,334,720
40Mar 19, 2026 12:5016,164233,242,350202,122,0008,004,0002,293,760
41Mar 19, 2026 13:1716,289236,295,136198,774,00012,985,0002,273,280
42Mar 19, 2026 12:5716,369234,915,053204,804,0007,992,0002,486,272
43Mar 19, 2026 12:2616,369236,312,642203,810,0008,991,0002,306,048
44Mar 19, 2026 12:2816,443249,340,062203,770,0009,988,0002,297,856
45Mar 19, 2026 12:5916,560247,359,312207,264,0008,010,0002,387,968
46Mar 19, 2026 13:0416,562248,520,612205,287,00010,014,0002,318,336
47Mar 19, 2026 12:3216,580243,481,964203,512,00012,030,0002,445,312
48Mar 19, 2026 12:5616,643243,881,193203,332,00013,021,0002,437,120
49Mar 19, 2026 12:4816,670247,637,049207,727,0008,988,0002,392,064
50Mar 19, 2026 12:5416,674246,902,217207,772,0008,990,0002,441,216
51Mar 19, 2026 13:0416,699245,526,198206,088,00011,004,0002,375,680
52Mar 19, 2026 13:1916,737248,256,709210,561,0007,018,0002,338,816
53Mar 19, 2026 12:2916,750248,134,444205,760,00011,986,0002,273,280
54Mar 19, 2026 12:2616,764241,629,510209,932,0007,997,0002,404,352
55Mar 19, 2026 12:3216,795247,555,355208,326,00010,015,0002,510,848
56Mar 19, 2026 13:2816,796246,681,736208,332,00010,015,0002,342,912
57Mar 19, 2026 12:4316,801245,778,072207,390,00011,020,0002,478,080
58Mar 19, 2026 13:0416,835246,759,098208,865,0009,993,0002,293,760
59Mar 19, 2026 12:5616,837244,604,910212,879,0005,996,0002,437,120
60Mar 19, 2026 13:1316,919248,552,551211,946,0007,997,0002,478,080
61Mar 19, 2026 13:2017,120251,695,046209,533,00013,033,0002,437,120
62Mar 19, 2026 12:2917,134247,057,125207,764,00014,983,0002,437,120
63Mar 19, 2026 13:0617,149251,395,245212,941,0009,997,0002,265,088
64Mar 19, 2026 12:4417,256254,141,240216,312,0008,011,0002,310,144
65Mar 19, 2026 12:2617,260252,401,570207,346,00017,028,0002,428,928
66Mar 19, 2026 12:3617,307249,262,258213,998,00010,999,0002,486,272
67Mar 19, 2026 12:2817,379250,193,493212,936,00012,996,0002,392,064
68Mar 19, 2026 13:0417,392256,346,145220,096,0006,002,0002,404,352
69Mar 19, 2026 12:5017,516255,869,647220,712,0006,990,0002,338,816
70Mar 19, 2026 13:2017,549260,351,151219,132,0009,005,0002,519,040
71Mar 19, 2026 12:2817,562257,496,753218,296,00010,013,0002,465,792
72Mar 19, 2026 12:4317,610251,730,332218,936,0009,997,0002,437,120
73Mar 19, 2026 12:2617,657254,208,226220,518,0009,021,0002,289,664
74Mar 19, 2026 13:1717,749258,852,972221,749,0008,989,0002,478,080
75Mar 19, 2026 12:3217,761255,924,174225,890,0004,997,0002,277,376
76Mar 19, 2026 13:1917,800262,983,109222,385,0009,015,0002,334,720
77Mar 19, 2026 12:5617,925253,114,826223,019,00010,000,0002,351,104
78Mar 19, 2026 12:2918,004259,046,919219,046,00015,003,0002,416,640
79Mar 19, 2026 12:3618,175261,205,157226,266,00010,011,0002,473,984
80Mar 19, 2026 12:4818,184265,234,989229,377,0007,011,0002,404,352
81Mar 19, 2026 12:5018,285269,910,999228,716,0008,988,0002,289,664
82Mar 19, 2026 13:0818,288274,356,979229,747,0007,991,0002,494,464
83Mar 19, 2026 13:1918,330260,529,461231,280,0007,008,0002,428,928
84Mar 19, 2026 13:3018,780278,199,033236,140,0008,004,0002,383,872