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
Mar 19, 2026 15:28Dominique GarmierDominique GarmierCPPg++13.3.0Success22,188
Mar 19, 2026 15:26Dominique GarmierDominique GarmierCPPg++13.3.0Success30,317
Mar 19, 2026 15:21Dominique GarmierDominique GarmierCPPg++13.3.0Success357,168
Mar 19, 2026 15:20Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 19, 2026 15:18Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 19, 2026 15:10Dominique GarmierDominique GarmierCPPg++13.3.0Success23,333
Mar 19, 2026 14:54Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 19, 2026 14:53Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 19, 2026 14:43Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,616
Mar 19, 2026 14:41Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,080
Mar 19, 2026 14:29Dominique GarmierDominique GarmierCPPclang++18.1.3Success20,087
Mar 19, 2026 14:22Dominique GarmierDominique GarmierCPPclang++18.1.3Success21,077
Mar 19, 2026 14:17Dominique GarmierDominique GarmierCPPclang++18.1.3Success30,213
Mar 19, 2026 14:15Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,332
Mar 19, 2026 14:05Dominique GarmierDominique GarmierCPPg++13.3.0Success25,232
Mar 19, 2026 14:01Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,141
Mar 19, 2026 13:47Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 19, 2026 13:19Dominique GarmierDominique GarmierCPPclang++18.1.3Success16,369+37.78 RP
Mar 19, 2026 12:24Dominique GarmierDominique GarmierCPPg++13.3.0Success20,193
Mar 19, 2026 12:24Dominique GarmierDominique GarmierCPPclang++18.1.3Success17,448+14.16 RP
Mar 19, 2026 12:17Dominique GarmierDominique GarmierCPPclang++18.1.3Success17,890+4.43 RP
Mar 19, 2026 11:47Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 19, 2026 11:47Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 19, 2026 11:41Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,254
Mar 19, 2026 11:36Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 19, 2026 11:30Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,230
Mar 19, 2026 11:24Dominique GarmierDominique GarmierCPPclang++18.1.3Success20,641
Mar 19, 2026 11:00Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,110
Mar 19, 2026 10:55Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,364
Mar 19, 2026 10:50Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,749
Mar 19, 2026 10:48Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,829
Mar 19, 2026 10:42Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,033+1.07 RP
Mar 19, 2026 10:02Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,707
Mar 19, 2026 09:37Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 19, 2026 09:24Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,043
Mar 19, 2026 09:24Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 19, 2026 09:23Dominique GarmierDominique GarmierCPPclang++18.1.3Success24,563
Mar 19, 2026 09:23Dominique GarmierDominique GarmierCPPg++13.3.0Success27,521
Mar 19, 2026 07:45Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,762
Mar 19, 2026 07:26Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,642
Mar 19, 2026 06:53Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,165
Mar 19, 2026 05:57Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,630
Mar 19, 2026 05:56Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,736
Mar 19, 2026 05:55Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,371
Mar 19, 2026 05:36Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,247
Mar 19, 2026 05:33Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,736
Mar 19, 2026 05:11Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,297
Mar 19, 2026 05:10Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,150
Mar 19, 2026 05:08Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,177
Mar 19, 2026 04:56Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,980
Mar 19, 2026 04:50Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,138
Mar 19, 2026 04:48Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,068+0.80 RP
Mar 19, 2026 04:43Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,913
Mar 19, 2026 04:38Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,367
Mar 19, 2026 04:33Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,065
Mar 19, 2026 04:32Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,189
Mar 19, 2026 04:31Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,363
Mar 19, 2026 04:27Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,934
Mar 19, 2026 04:22Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,212
Mar 19, 2026 04:02Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,294
Mar 19, 2026 04:01Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,328
Mar 19, 2026 03:58Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,294
Mar 19, 2026 03:55Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,094+11.16 RP
Mar 19, 2026 03:53Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,671
Mar 19, 2026 03:52Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,018
Mar 19, 2026 03:48Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,441
Mar 19, 2026 03:45Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,381
Mar 19, 2026 03:40Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,414
Mar 19, 2026 03:16Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,846
Mar 19, 2026 03:06Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,138
Mar 19, 2026 03:03Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,491
Mar 19, 2026 02:37Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,094
Mar 19, 2026 02:34Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,079
Mar 19, 2026 02:27Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,143
Mar 19, 2026 02:11Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,467+31.72 RP
Mar 19, 2026 02:01Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 19, 2026 00:42Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,860
Mar 19, 2026 00:35Dominique GarmierDominique GarmierCPPclang++18.1.3Success21,594
Mar 19, 2026 00:15Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 18:33Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 17, 2026 18:31Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 17, 2026 18:27Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 17, 2026 18:23Dominique GarmierDominique GarmierCPPclang++18.1.3Success124,232
Mar 17, 2026 18:16Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 17, 2026 18:13Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 17, 2026 18:05Dominique GarmierDominique GarmierCPPclang++18.1.3Success164,239
Mar 17, 2026 18:05Dominique GarmierDominique GarmierCPPg++13.3.0Success249,566
Mar 17, 2026 18:02Dominique GarmierDominique GarmierCPPclang++18.1.3Success20,853
Mar 17, 2026 18:02Dominique GarmierDominique GarmierCPPclang++18.1.3Success23,096
Mar 17, 2026 18:00Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,912
Mar 17, 2026 17:59Dominique GarmierDominique GarmierCPPclang++18.1.3Success20,150+7.16 RP
Mar 17, 2026 17:59Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,616+13.51 RP
Mar 17, 2026 17:58Dominique GarmierDominique GarmierCPPclang++18.1.3Success20,445+25.79 RP
Mar 17, 2026 13:46Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 13:46Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 13:44Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 13:44Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 13:26Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 13:10Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 17, 2026 13:10Dominique GarmierDominique GarmierCPPg++13.3.0Error