StripeOA #19
Process List of Commands
估计中等评测数据准备中,可先阅读题面
考点(AI 标注)模拟/实现迭代器设计
The system simulates a transaction intent management tool to handle the process from initialization to completion and calculate the final balances of merchants' accounts. Transaction states include: PENDING: The transaction is created and awaiting processing. IN_PROGRESS: The transaction is being processed. DONE: The transaction is completed, and the balance is updated. Core Features:
START <account_id> <initial_balance> <refund_limit>(optional): Initializes a merchant account with an initial balance and an optional refund limit.NEW <transaction_id> <account_id> <amount>: Creates a transaction intent for the specified account with the given amount in the PENDING state.PROCESS <transaction_id>: Moves a transaction from PENDING to IN_PROGRESS.COMPLETE <transaction_id>: Moves a transaction from IN_PROGRESS to DONE and adds the amount to the merchant's balance.
Extended Features:
MODIFY <transaction_id> <new_amount>: Updates the amount for a PENDING transaction intent.CANCEL <transaction_id>: Reverts a transaction from IN_PROGRESS to PENDING.RETURN <transaction_id>: Processes a refund for a DONE transaction and deducts the amount from the account's balance.
Time-Limited Refunds:
Each command includes a <time> marker indicating the timestamp.
Merchants can set a refund time limit; transactions can only be refunded within this limit.
If no limit is set, refunds are allowed indefinitely.
A limit of 0 means no refunds are allowed.
Task Objective:
Process a list of commands to manage transaction intents and output the final balances of all accounts.
Input Format:
A time-ordered list of commands.
Output Format:
A list of account balances in ascending order by account ID.
Example 1
Input:
commands = ["START account1 0", "NEW txn1 account1 50", "PROCESS txn1", "COMPLETE txn1"]
Output:
["account1 50"]
Explanation: The commands are processed as follows:
- START account1 0: Initializes account1 with a balance of 0.
- NEW txn1 account1 50: Creates a new transaction intent txn1 for account1 with an amount of 50 in PENDING state.
- PROCESS txn1: Moves txn1 to IN_PROGRESS state.
- COMPLETE txn1: Moves txn1 to DONE state and adds the amount to account1's balance, resulting in a final balance of 50. The final balance for account1 is 50.
Example 2
Input:
commands = ["START account1 0", "NEW txn1 account1 50", "PROCESS txn1", "CANCEL txn1", "PROCESS txn1", "COMPLETE txn1", "RETURN txn1"]
Output:
["account1 0"]
Explanation: The commands are processed as follows:
- START account1 0: Initializes account1 with a balance of 0.
- NEW txn1 account1 50: Creates a new transaction intent txn1 for account1 with an amount of 50 in PENDING state.
- PROCESS txn1: Moves txn1 to IN_PROGRESS state.
- CANCEL txn1: Reverts txn1 to PENDING state.
- PROCESS txn1: Moves txn1 back to IN_PROGRESS state.
- COMPLETE txn1: Moves txn1 to DONE state and adds the amount to account1's balance, resulting in a balance of 50.
- RETURN txn1: Processes a refund for txn1 and deducts the amount from account1's balance, resulting in a final balance of 0. The final balance for account1 is 0.
Example 3
Input:
commands = ["1 START account1 0 5", "2 NEW txn1 account1 100", "8 COMPLETE txn1", "11 RETURN txn1", "16 RETURN txn1"]
Output:
["account1 100"]
Explanation: The commands are processed as follows:
- 1 START account1 0 5: Initializes account1 with a balance of 0 and a refund limit of 5.
- 2 NEW txn1 account1 100: Creates a new transaction intent txn1 for account1 with an amount of 100 in PENDING state.
- 8 COMPLETE txn1: Moves txn1 to DONE state and adds the amount to account1's balance, resulting in a balance of 100.
- 11 RETURN txn1: Processes a refund for txn1 within the refund limit and deducts the amount from account1's balance, resulting in a balance of 0.
- 16 RETURN txn1: The refund is not processed because it is outside the refund limit, so the balance remains 100. The final balance for account1 is 100.