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 21, 2026 15:07Dominique GarmierDominique GarmierRUSTrust-1.94.0Success18,160
Mar 21, 2026 15:06Dominique GarmierDominique GarmierRUSTrust-1.94.0Success17,604
Mar 21, 2026 15:04Dominique GarmierDominique GarmierRUSTrust-1.94.0Success18,180
Mar 21, 2026 15:02Dominique GarmierDominique GarmierRUSTrust-1.94.0Success141,137
Mar 21, 2026 15:00Dominique GarmierDominique GarmierRUSTrust-1.94.0Success160,060
Mar 21, 2026 14:58Dominique GarmierDominique GarmierRUSTrust-1.94.0Success106,998
Mar 21, 2026 14:25Dominique GarmierDominique GarmierCPPg++13.3.0Success24,608
Mar 21, 2026 14:24Dominique GarmierDominique GarmierCPPclang++18.1.3Success20,925
Mar 21, 2026 14:20Dominique GarmierDominique GarmierCPPclang++18.1.3Success160,739
Mar 21, 2026 14:11Dominique GarmierDominique GarmierCPPg++13.3.0Success23,896
Mar 21, 2026 14:11Dominique GarmierDominique GarmierCPPg++13.3.0Success23,451
Mar 21, 2026 13:18Dominique GarmierDominique GarmierZIG0.13.0Success2,182,635
Mar 21, 2026 13:08Dominique GarmierDominique GarmierZIG0.13.0Error
Mar 21, 2026 13:04Dominique GarmierDominique GarmierZIG0.13.0Error
Mar 21, 2026 13:03Dominique GarmierDominique GarmierZIG0.13.0Error
Mar 21, 2026 13:01Dominique GarmierDominique GarmierZIG0.13.0Error
Mar 21, 2026 12:56Dominique GarmierDominique GarmierZIG0.13.0Error
Mar 21, 2026 12:47Dominique GarmierDominique GarmierCSHARP9.0.14Success509,682
Mar 21, 2026 12:45Dominique GarmierDominique GarmierCSHARP9.0.14Error
Mar 21, 2026 12:36Dominique GarmierDominique GarmierGOgo1.26.1Success435,846
Mar 21, 2026 01:59Dominique GarmierDominique GarmierCPPclang++18.1.3Success16,906
Mar 21, 2026 00:32Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,533
Mar 21, 2026 00:31Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 21, 2026 00:29Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 20, 2026 21:16Josu San MartinJosu San MartinCPPclang++18.1.3Success2,179+628.87 RP
Mar 20, 2026 21:16Josu San MartinJosu San MartinRUSTrust-1.94.0Success2,287+1'032.54 RP
Mar 20, 2026 20:30Josu San MartinJosu San MartinRUSTrust-1.94.0Success2,722+438.57 RP
Mar 20, 2026 20:10Yuriy LyfenkoYuriy LyfenkoCPPclang++18.1.3Success2,394+137.30 RP
Mar 20, 2026 20:03Yuriy LyfenkoYuriy LyfenkoCPPclang++18.1.3Success2,576
Mar 20, 2026 19:57Yuriy LyfenkoYuriy LyfenkoCPPclang++18.1.3Success2,434+150.77 RP
Mar 20, 2026 19:38Yuriy LyfenkoYuriy LyfenkoCPPclang++18.1.3Success2,645
Mar 20, 2026 19:36Yuriy LyfenkoYuriy LyfenkoCPPclang++18.1.3Success2,483+136.34 RP
Mar 20, 2026 19:16Yuriy LyfenkoYuriy LyfenkoCPPclang++18.1.3Success2,622
Mar 20, 2026 18:59Josu San MartinJosu San MartinCPPg++13.3.0Success2,476+1'234.90 RP
Mar 20, 2026 16:52Dominique GarmierDominique GarmierRUSTrust-1.94.0Success167,463
Mar 20, 2026 16:46Dominique GarmierDominique GarmierRUSTrust-1.94.0Success152,788
Mar 20, 2026 15:04Dominique GarmierDominique GarmierCPPclang++18.1.3Success16,493
Mar 20, 2026 14:55Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 20, 2026 14:54Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 20, 2026 14:27Dominique GarmierDominique GarmierRUSTrust-1.94.0Success198,300
Mar 20, 2026 13:21Dominique GarmierDominique GarmierCPPclang++18.1.3Success17,001
Mar 20, 2026 13:21Dominique GarmierDominique GarmierCPPclang++18.1.3Success16,646
Mar 20, 2026 13:18Dominique GarmierDominique GarmierCPPclang++18.1.3Success17,933
Mar 20, 2026 13:18Dominique GarmierDominique GarmierCPPclang++18.1.3Success16,132+1.99 RP
Mar 20, 2026 13:18Dominique GarmierDominique GarmierCPPclang++18.1.3Success16,765
Mar 20, 2026 13:18Dominique GarmierDominique GarmierCPPclang++18.1.3Success17,216
Mar 20, 2026 13:16Dominique GarmierDominique GarmierCPPclang++18.1.3Success16,184+6.98 RP
Mar 20, 2026 13:16Dominique GarmierDominique GarmierCPPg++13.3.0Success21,900
Mar 20, 2026 13:16Dominique GarmierDominique GarmierCPPclang++18.1.3Success16,726
Mar 20, 2026 12:59Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,887
Mar 20, 2026 12:50Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,771
Mar 20, 2026 12:27Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,624
Mar 20, 2026 12:21Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,109
Mar 20, 2026 11:47Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 20, 2026 11:45Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 20, 2026 11:40Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,923
Mar 20, 2026 11:35Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,158
Mar 20, 2026 08:01Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,954
Mar 20, 2026 07:47Dominique GarmierDominique GarmierCPPclang++18.1.3Success20,705
Mar 20, 2026 05:57Yuriy LyfenkoYuriy LyfenkoCPPclang++18.1.3Success2,570+1'484.88 RP
Mar 20, 2026 05:37Yuriy LyfenkoYuriy LyfenkoCPPclang++18.1.3Success3,176+344.84 RP
Mar 20, 2026 05:22Yuriy LyfenkoYuriy LyfenkoCPPclang++18.1.3Success3,360+92.97 RP
Mar 20, 2026 05:22Yuriy LyfenkoYuriy LyfenkoCPPclang++18.1.3Success3,439+58.82 RP
Mar 20, 2026 04:59Yuriy LyfenkoYuriy LyfenkoCPPclang++18.1.3Success3,510+35.27 RP
Mar 20, 2026 04:57Yuriy LyfenkoYuriy LyfenkoCPPg++13.3.0Success3,913
Mar 20, 2026 04:47Yuriy LyfenkoYuriy LyfenkoCPPclang++18.1.3Success3,554+102.23 RP
Mar 20, 2026 04:32Yuriy LyfenkoYuriy LyfenkoCPPclang++18.1.3Success3,688+743.38 RP
Mar 20, 2026 04:25Yuriy LyfenkoYuriy LyfenkoCPPclang++18.1.3Success5,081+117.64 RP
Mar 20, 2026 04:19Yuriy LyfenkoYuriy LyfenkoCPPg++13.3.0Success5,404+181.03 RP
Mar 20, 2026 04:10Yuriy LyfenkoYuriy LyfenkoCPPclang++18.1.3Success6,217
Mar 20, 2026 04:03Yuriy LyfenkoYuriy LyfenkoCPPclang++18.1.3Success6,699
Mar 20, 2026 03:05Dominique GarmierDominique GarmierCPPclang++18.1.3Success17,864
Mar 20, 2026 02:28Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,825
Mar 20, 2026 02:25Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 20, 2026 02:17Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,858
Mar 19, 2026 22:19Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,286
Mar 19, 2026 21:56Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,164
Mar 19, 2026 20:13Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,979
Mar 19, 2026 20:10Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,349
Mar 19, 2026 20:08Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,989
Mar 19, 2026 20:07Dominique GarmierDominique GarmierCPPclang++18.1.3Success17,955
Mar 19, 2026 19:58Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,209
Mar 19, 2026 19:45Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,013
Mar 19, 2026 19:37Dominique GarmierDominique GarmierCPPclang++18.1.3Success17,596
Mar 19, 2026 19:27Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,141
Mar 19, 2026 19:04Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,957
Mar 19, 2026 18:58Dominique GarmierDominique GarmierCPPclang++18.1.3Success19,015
Mar 19, 2026 16:46Dominique GarmierDominique GarmierCPPclang++18.1.3Success20,158
Mar 19, 2026 16:46Dominique GarmierDominique GarmierCPPg++13.3.0Success22,131
Mar 19, 2026 16:40Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 19, 2026 16:39Dominique GarmierDominique GarmierCPPg++13.3.0Success23,528
Mar 19, 2026 16:39Dominique GarmierDominique GarmierCPPg++13.3.0Success21,915
Mar 19, 2026 16:14Dominique GarmierDominique GarmierCPPclang++18.1.3Success18,793
Mar 19, 2026 16:14Dominique GarmierDominique GarmierCPPg++13.3.0Success21,749
Mar 19, 2026 16:13Dominique GarmierDominique GarmierCPPg++13.3.0Success21,181
Mar 19, 2026 16:13Dominique GarmierDominique GarmierCPPclang++18.1.3Success17,460
Mar 19, 2026 16:06Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 19, 2026 16:03Dominique GarmierDominique GarmierCPPg++13.3.0Error
Mar 19, 2026 16:03Dominique GarmierDominique GarmierCPPclang++18.1.3Error
Mar 19, 2026 15:45Dominique GarmierDominique GarmierCPPclang++18.1.3Success20,293