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
Date AuthorLanguageStatus Score
Jun 28, 2026 01:57Victor MerckléVictor MerckléRUSTrust-1.95.0Success1,425+87.54 RP
Jun 28, 2026 01:41Victor MerckléVictor MerckléGOgo1.26.2Success1,556
Jun 27, 2026 10:17Victor MerckléVictor MerckléGOgo1.26.2Success1,540+62.64 RP
Jun 27, 2026 05:49Victor MerckléVictor MerckléRUSTrust-1.95.0Success1,451
Jun 27, 2026 05:44Victor MerckléVictor MerckléRUSTrust-1.95.0Success1,443+90.06 RP
Jun 27, 2026 05:39Victor MerckléVictor MerckléRUSTrust-1.95.0Success1,462+213.04 RP
Jun 26, 2026 18:51A_ShamanA_ShamanCPPg++10.5.0Success115,277
Jun 26, 2026 18:47A_ShamanA_ShamanCPPg++10.5.0Success113,495
Jun 26, 2026 18:42A_ShamanA_ShamanCPPg++10.5.0Success106,876
Jun 26, 2026 18:35A_ShamanA_ShamanCPPg++10.5.0Success119,562
Jun 26, 2026 18:32A_ShamanA_ShamanCPPg++10.5.0Success103,299
Jun 21, 2026 13:31Zhou180Zhou180CPPclang++20.1.2Success1,971+1'468.66 RP
Jun 21, 2026 10:26Zhou180Zhou180CPPclang++20.1.2Success2,774+25.80 RP
Jun 21, 2026 10:26Zhou180Zhou180CPPg++14.2.0Success3,042
Jun 21, 2026 10:24Zhou180Zhou180CPPg++10.5.0Success2,851
Jun 21, 2026 10:22Zhou180Zhou180CPPg++10.5.0Success2,794+136.76 RP
Jun 21, 2026 10:18Zhou180Zhou180CPPg++10.5.0Success2,905+10.63 RP
Jun 21, 2026 10:15Zhou180Zhou180CPPg++10.5.0Success2,914+40.73 RP
Jun 21, 2026 10:12Zhou180Zhou180CPPg++10.5.0Success3,055
Jun 21, 2026 10:08Zhou180Zhou180CPPg++10.5.0Success3,094
Jun 21, 2026 10:03Zhou180Zhou180CPPg++10.5.0Success3,133
Jun 21, 2026 10:00Zhou180Zhou180CPPg++10.5.0Success3,026
Jun 21, 2026 08:25Zhou180Zhou180CPPg++10.5.0Success2,949+63.19 RP
Jun 21, 2026 08:23Zhou180Zhou180CPPg++10.5.0Success3,011
Jun 21, 2026 08:21Zhou180Zhou180CPPg++10.5.0Success3,129
Jun 21, 2026 08:19Zhou180Zhou180CPPg++10.5.0Success3,005+66.21 RP
Jun 21, 2026 08:17Zhou180Zhou180CPPg++14.2.0Success3,066+175.16 RP
Jun 21, 2026 08:16Zhou180Zhou180CPPclang++18.1.3Success3,240+1'850.17 RP
Jun 21, 2026 08:12Zhou180Zhou180CPPclang++18.1.3Success8,089+138.07 RP
Jun 21, 2026 08:07Zhou180Zhou180CPPclang++18.1.3Error
Jun 21, 2026 08:02Zhou180Zhou180CPPclang++18.1.3Success9,106+1'023.26 RP
Jun 21, 2026 07:45Zhou180Zhou180CPPclang++18.1.3Success133,486+74.91 RP
Jun 20, 2026 16:16A_ShamanA_ShamanCPPg++10.5.0Success121,450
Jun 20, 2026 16:13A_ShamanA_ShamanCPPg++10.5.0Success129,541
Jun 20, 2026 16:11A_ShamanA_ShamanCPPg++10.5.0Success114,684
Jun 20, 2026 16:07A_ShamanA_ShamanCPPg++10.5.0Success123,196
Jun 20, 2026 16:04A_ShamanA_ShamanCPPg++10.5.0Success118,713
Jun 20, 2026 11:20A_ShamanA_ShamanCPPg++10.5.0Success103,823
Jun 20, 2026 11:17A_ShamanA_ShamanCPPg++10.5.0Success110,439
Jun 20, 2026 11:11A_ShamanA_ShamanCPPg++10.5.0Success150,637
Jun 20, 2026 11:06A_ShamanA_ShamanCPPg++10.5.0Success100,773+3.70 RP
Jun 20, 2026 11:04A_ShamanA_ShamanCPPg++10.5.0Success104,681+95.53 RP
Jun 20, 2026 07:41A_ShamanA_ShamanCPPg++10.5.0Error
Jun 19, 2026 11:41Victor MerckléVictor MerckléCPPclang++18.1.3Success1,444
Jun 19, 2026 11:36Victor MerckléVictor MerckléCPPclang++18.1.3Success1,613
Jun 19, 2026 11:31Victor MerckléVictor MerckléCPPclang++18.1.3Success1,467
Jun 19, 2026 11:22Victor MerckléVictor MerckléCPPclang++18.1.3Success1,577
Jun 19, 2026 11:12Victor MerckléVictor MerckléCPPclang++18.1.3Success3,683
Jun 19, 2026 03:23Victor MerckléVictor MerckléCPPclang++18.1.3Success1,503
Jun 19, 2026 03:17Victor MerckléVictor MerckléCPPclang++18.1.3Success2,387
Jun 19, 2026 03:10Victor MerckléVictor MerckléCPPclang++18.1.3Success1,536
Jun 19, 2026 02:59Victor MerckléVictor MerckléCPPclang++18.1.3Success1,490
Jun 19, 2026 02:53Victor MerckléVictor MerckléCPPclang++18.1.3Success1,488
Jun 19, 2026 02:48Victor MerckléVictor MerckléCPPclang++18.1.3Success1,467
Jun 19, 2026 02:43Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 18, 2026 19:12Victor MerckléVictor MerckléCPPclang++18.1.3Success1,473
Jun 18, 2026 19:07Victor MerckléVictor MerckléCPPclang++18.1.3Success1,423
Jun 18, 2026 19:02Victor MerckléVictor MerckléCPPclang++18.1.3Success1,447
Jun 18, 2026 18:57Victor MerckléVictor MerckléCPPclang++18.1.3Success1,470
Jun 18, 2026 18:52Victor MerckléVictor MerckléCPPclang++18.1.3Success1,472
Jun 18, 2026 18:47Victor MerckléVictor MerckléCPPclang++18.1.3Success1,537
Jun 18, 2026 18:42Victor MerckléVictor MerckléCPPclang++18.1.3Success1,524
Jun 18, 2026 18:37Victor MerckléVictor MerckléCPPclang++18.1.3Success1,383+356.94 RP
Jun 18, 2026 18:31Victor MerckléVictor MerckléCPPclang++18.1.3Success1,483
Jun 18, 2026 11:28Victor MerckléVictor MerckléCPPclang++18.1.3Success1,472
Jun 18, 2026 11:23Victor MerckléVictor MerckléCPPclang++18.1.3Success1,418+301.74 RP
Jun 18, 2026 11:18Victor MerckléVictor MerckléCPPclang++18.1.3Success1,449+365.83 RP
Jun 18, 2026 10:58Victor MerckléVictor MerckléCPPclang++18.1.3Success1,508
Jun 18, 2026 01:11Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 18, 2026 01:04Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 18, 2026 00:59Victor MerckléVictor MerckléCPPclang++18.1.3Success1,533
Jun 18, 2026 00:54Victor MerckléVictor MerckléCPPclang++18.1.3Success1,603
Jun 18, 2026 00:49Victor MerckléVictor MerckléCPPclang++18.1.3Success1,605
Jun 17, 2026 13:06Victor MerckléVictor MerckléCPPclang++18.1.3Success1,616
Jun 17, 2026 13:01Victor MerckléVictor MerckléCPPclang++18.1.3Success1,564
Jun 17, 2026 12:56Victor MerckléVictor MerckléCPPclang++18.1.3Success1,584
Jun 17, 2026 12:51Victor MerckléVictor MerckléCPPclang++18.1.3Success1,505
Jun 17, 2026 12:46Victor MerckléVictor MerckléCPPclang++18.1.3Success1,515
Jun 17, 2026 12:41Victor MerckléVictor MerckléCPPclang++18.1.3Success1,541
Jun 17, 2026 12:36Victor MerckléVictor MerckléCPPclang++18.1.3Success1,546
Jun 17, 2026 12:31Victor MerckléVictor MerckléCPPclang++18.1.3Success1,502
Jun 17, 2026 12:19Victor MerckléVictor MerckléCPPclang++18.1.3Success1,497+4.46 RP
Jun 17, 2026 12:14Victor MerckléVictor MerckléCPPclang++18.1.3Success1,530
Jun 17, 2026 12:09Victor MerckléVictor MerckléCPPclang++18.1.3Success1,597
Jun 17, 2026 12:04Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 13, 2026 18:19Victor MerckléVictor MerckléZIG0.16.0Success1,480+860.66 RP
Jun 13, 2026 18:10Victor MerckléVictor MerckléZIG0.16.0Success1,782
Jun 13, 2026 17:16Victor MerckléVictor MerckléCSHARP10.0.7Success1,544+139.55 RP
Jun 13, 2026 17:11Victor MerckléVictor MerckléCSHARP10.0.7Success1,612
Jun 13, 2026 16:47Victor MerckléVictor MerckléCSHARP10.0.7Success1,578+703.33 RP
Jun 13, 2026 15:39Victor MerckléVictor MerckléGOgo1.26.2Success1,557
Jun 13, 2026 15:32Victor MerckléVictor MerckléGOgo1.26.2Success1,555+41.09 RP
Jun 13, 2026 15:14Victor MerckléVictor MerckléGOgo1.26.2Success1,565+167.00 RP
Jun 13, 2026 15:08Victor MerckléVictor MerckléGOgo1.26.2Success1,607+364.54 RP
Jun 11, 2026 23:45Victor MerckléVictor MerckléCPPclang++18.1.3Error
Jun 11, 2026 23:40Victor MerckléVictor MerckléCPPclang++18.1.3Success1,581
Jun 11, 2026 23:35Victor MerckléVictor MerckléCPPclang++18.1.3Success1,527
Jun 11, 2026 23:30Victor MerckléVictor MerckléCPPclang++18.1.3Success1,500
Jun 11, 2026 23:25Victor MerckléVictor MerckléCPPclang++18.1.3Success1,505
Jun 11, 2026 23:19Victor MerckléVictor MerckléCPPclang++18.1.3Success1,581