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
Aug 18, 2026 16:02Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 18, 2026 15:47Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 18, 2026 15:07Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 18, 2026 14:55Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 18, 2026 14:41Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 18, 2026 14:10Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 18, 2026 13:51Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 18, 2026 13:33Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 18, 2026 12:53Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 18, 2026 12:31Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 18, 2026 12:24Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 18, 2026 12:11Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 18, 2026 11:36Victor MerckléVictor MerckléCPPg++14.2.0Error+294.70 RP
Aug 18, 2026 11:17Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 18, 2026 11:03Victor MerckléVictor MerckléCPPg++14.2.0Error+33.73 RP
Aug 18, 2026 10:49Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 18, 2026 04:28Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 18, 2026 04:24Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 18, 2026 04:21Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 18, 2026 04:16Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 18, 2026 04:11Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 18, 2026 04:07Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 18, 2026 03:50Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 18, 2026 03:20Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 18, 2026 02:17Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 18, 2026 00:51Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 23:52Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 23:02Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 22:50Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 22:41Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 22:13Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 22:04Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 21:52Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 21:41Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 21:26Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 21:18Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 21:14Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 21:05Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 15:20Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 15:15Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 15:10Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 15:03Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 14:57Victor MerckléVictor MerckléCPPg++14.2.0Error+99.56 RP
Aug 17, 2026 14:53Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 14:48Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 14:43Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 14:40Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 14:35Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 14:27Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 14:22Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 14:17Victor MerckléVictor MerckléCPPg++14.2.0Error
Aug 17, 2026 14:09Victor MerckléVictor MerckléCPPclang++18.1.3Error
Aug 17, 2026 14:01Victor MerckléVictor MerckléCPPclang++18.1.3Error
Aug 17, 2026 13:51Victor MerckléVictor MerckléCPPclang++18.1.3Error
Aug 17, 2026 13:26Victor MerckléVictor MerckléCPPclang++18.1.3Error
Aug 17, 2026 13:16Victor MerckléVictor MerckléCPPclang++18.1.3Error
Aug 17, 2026 13:08Victor MerckléVictor MerckléCPPclang++18.1.3Error
Aug 17, 2026 12:59Victor MerckléVictor MerckléCPPclang++18.1.3Error
Aug 17, 2026 12:41Victor MerckléVictor MerckléCPPclang++18.1.3Error
Aug 17, 2026 12:18Tomislav TunkovicTomislav TunkovicZIG0.15.1Error+123.66 RP
Aug 17, 2026 12:16Tomislav TunkovicTomislav TunkovicRUSTrust-1.95.0Error+42.80 RP
Aug 17, 2026 11:57Tomislav TunkovicTomislav TunkovicCSHARP9.0.15Error
Aug 17, 2026 11:46Tomislav TunkovicTomislav TunkovicGOgo1.26.2Error+98.21 RP
Aug 17, 2026 00:53marko1597marko1597CSHARP9.0.15Success2,865
Aug 16, 2026 23:20marko1597marko1597CSHARP9.0.15Success3,182
Aug 16, 2026 23:14marko1597marko1597GOgo1.26.2Error
Aug 16, 2026 23:10marko1597marko1597ZIG0.15.1Error
Aug 16, 2026 23:06marko1597marko1597RUSTrust-1.80.1Error
Aug 16, 2026 23:05marko1597marko1597RUSTrust-1.90.0Error
Aug 16, 2026 23:03marko1597marko1597ZIG0.16.0Error
Aug 16, 2026 23:03marko1597marko1597GOgo1.26.2Error
Aug 16, 2026 23:03marko1597marko1597GOgo1.23.12Error
Aug 16, 2026 23:02marko1597marko1597GOgo1.25.13Error
Aug 16, 2026 23:01marko1597marko1597GOgo1.26.6Error
Aug 16, 2026 22:59Tomislav TunkovicTomislav TunkovicZIG0.15.1Error
Aug 16, 2026 22:59Tomislav TunkovicTomislav TunkovicGOgo1.26.2Success2,370
Aug 16, 2026 22:58Tomislav TunkovicTomislav TunkovicRUSTrust-1.95.0Error
Aug 16, 2026 22:46marko1597marko1597CSHARP8.0.30Success3,486
Aug 16, 2026 22:45marko1597marko1597CSHARP10.0.11Success3,220
Aug 16, 2026 22:45marko1597marko1597CSHARP9.0.15Success3,183
Aug 16, 2026 22:36marko1597marko1597CSHARP9.0.15Error
Aug 16, 2026 19:53marko1597marko1597GOgo1.26.2Error
Aug 16, 2026 19:53marko1597marko1597GOgo1.26.2Error
Aug 16, 2026 19:49marko1597marko1597RUSTrust-1.97.1Error
Aug 16, 2026 19:49marko1597marko1597RUSTrust-1.97.1Error
Aug 16, 2026 19:49marko1597marko1597RUSTrust-1.97.1Error
Aug 16, 2026 19:35marko1597marko1597ZIG0.15.1Error
Aug 16, 2026 19:35marko1597marko1597ZIG0.15.1Error
Aug 16, 2026 19:35marko1597marko1597ZIG0.15.1Error
Aug 16, 2026 18:42marko1597marko1597CPPg++14.2.0Error
Aug 16, 2026 18:42marko1597marko1597CPPg++14.2.0Error
Aug 16, 2026 18:33marko1597marko1597CPPg++14.2.0Error
Aug 16, 2026 18:33marko1597marko1597CPPg++14.2.0Error
Aug 16, 2026 18:10marko1597marko1597CPPg++14.2.0Error+203.83 RP
Aug 16, 2026 18:07marko1597marko1597CPPg++14.2.0Error+47.85 RP
Aug 16, 2026 18:04marko1597marko1597CPPclang++14.0.6Error
Aug 16, 2026 18:03marko1597marko1597CPPclang++15.0.7Error
Aug 16, 2026 18:03marko1597marko1597CPPclang++16.0.6Error
Aug 16, 2026 18:03marko1597marko1597CPPclang++17.0.6Error
Aug 16, 2026 18:03marko1597marko1597CPPclang++18.1.8Error