Untitled

mail@pastecode.io avatarunknown
plain_text
a month ago
2.8 kB
2
Indexable
Never
Programming challenge description:
When a trader buys or sells an asset, that trade is said to have a certain amount of "edge" defined as the difference between the trade price and a theoretical value. Theoretical value is what the Trader or Firm thinks the asset is worth, and can change throughout the day.


Edgebuy=TheoreticalValue−TradePrice 
Edgesell=TradePrice−TheoreticalValue

Traders typically want to execute trades that have positive edge, that is buying an asset for lower than the theoretical value, or selling an asset for higher than the theoretical value.

For example: TradePrice = 95, TheoreticalValue = 100, Edge = 100-95 = 5

As a Firm, we want to track which traders are making the best decisions, so we calculate a score for each trade.

Score=SignOfEdge(Edge^2∗∣Quantity∣)

Notice that negative edge will result in a negative score, indicating a bad trade.

Task
Given a series of trades, print the trader with the highest cumulative score after each trade.

Additional Details
A "Buy" trade will have positive quantity, and "Sell" trades will be denoted by negative (-) quantity.

Theoretical Values can be updated periodically. Your solution should use the most recent theoretical value when calculating edge. If an asset does not have an available theoretical value at the time of trade, assume Edge = 0 and save the trade price as the theoretical value. Theo Updates are not retroactive, so any existing trade for that asset should NOT be updated

Trades may happen with negative edge. They are valid and should be included in a traders cumulative score.

If more than one trader has the highest cumulative score, use lexicographical ordering of TraderName to break the tie.

Input:
A number trade lines in the following format:

Trade <TraderName> <Asset> <Quantity> <Price>

Interlaced with 1 or more theo update lines in the following format:

TheoUpdate <Asset> <Value>

Example:

TheoUpdate 1 100
Trade Alice 1 1 95
Trade Bob 1 1 94
Trade Alice 1 -1 107
Output:
A line of output for each trade in the input, in the format

<TraderName> <Score>

Example:

Alice 25
Bob 36
Alice 74
Test 1
Test Input
Download Test 1 Input
TheoUpdate 1 100
Trade Alice 1 1 95
Trade Bob 1 1 94
Trade Alice 1 -1 107
Expected Output
Download Test 1 Output
Alice 25.00
Bob 36.00
Alice 74.00
Test 2
Test Input
Download Test 2 Input
TheoUpdate 1 100
Trade Alice 1 -2 101
Trade Bob 1 -2 99
Expected Output
Download Test 2 Output
Alice 2.00
Alice 2.00
Test 3
Test Input
Download Test 3 Input
TheoUpdate 1 100
Trade Alice 1 400 99
Trade Bob 1 5 90
Expected Output
Download Test 3 Output
Alice 400.00
Bob 500.00
Test 4
Test Input
Download Test 4 Input
TheoUpdate 1 100
TheoUpdate 2 200
Trade Alice 1 1 98
Trade Bob 2 1 199
Expected Output
Download Test 4 Output
Alice 4.00
Alice 4.00