Worst Trade Reporter Hackerrank Solution – Full Guide!


Level up your financial skills! Unlock the "Worst Trade Reporter Hackerrank Solution" & become a data analysis pro. Simple explanation, big impact.

Welcome, aspiring financial analysts and coding enthusiasts!

Today, we delve into the exciting world of HackerRank, a platform renowned for sharpening your coding skills through engaging challenges.

We’ll specifically conquer the “Worst Trade Reporter Hackerrank Solution” challenge, where you’ll build a powerful tool that identifies the worst trade (highest loss per lot) for a given instrument (stock, etc.).

Buckle up, as we’ll dissect the problem, design an efficient solution, and explore valuable takeaways beyond the challenge.

What is HackerRank?

Crack the code on tech job assessments: Does HackerRank Record Screen? Find out now!

HackerRank is a one-stop shop for honing your programming prowess.

HackerRank offers a variety of coding challenges, including “Worst Trade Reporter,” that test and improve your programming skills.

It simulates real-world scenarios like financial data analysis, allowing you to practice problem-solving and algorithm design.

By solving challenges like “Worst Trade Reporter,” you gain valuable experience with data structures (dictionaries, min-heaps) and algorithms (efficient trade analysis).

HackerRank helps you develop essential skills for technical careers, including coding proficiency, problem-solving approaches, and understanding of data structures and algorithms.

What is Worst Trade Reporter on HackerRank?

Stop struggling with "Worst Trade Reporter Hackerrank Solution"! Our clear explanation & efficient code implementation will have you conquering the challenge in no time.

Imagine yourself as a financial analyst tasked with building a tool to pinpoint the worst trades investors are making.

This is precisely the challenge “Worst Trade Reporter” throws at you. You’ll receive a stream of instructions:

  • Trades: Each trade details an instrument (stock, bond, etc.), whether it’s a buy or sell order, the price at the time of the trade, and the volume (quantity) traded.
  • Price Updates: These updates keep you informed of the latest price changes for each instrument.

The crux of the challenge lies in identifying the worst trade (highest loss per lot) for any given instrument.

A “loss per lot” is the difference between the buy price (for a buy order) or sell price (for a sell order) compared to the current price of the instrument.

The worst trade will have the highest loss per lot.

Worst Trade Reporter Hackerrank Solution

Cracking the Code: Your "Worst Trade Reporter Hackerrank Solution" Starts Here! Master trade analysis with this step-by-step guide and efficient code implementation.

Fear not, for we’ll break down the solution into manageable chunks:

1. Data Structures:

  1. prices Dictionary: This dictionary stores the latest price for each instrument, making it easy to retrieve the current price when needed.
  2. trades Dictionary with Min-Heaps: We’ll utilize min-heaps within this dictionary. A min-heap is a special data structure that efficiently keeps track of the top 3 worst trades (handling ties) for each instrument. Each element in the min-heap is a tuple containing the loss_per_lot and the corresponding Trade object.

2. Solution Breakdown:

  1. Trade Class: This class acts as a blueprint for each trade, encapsulating attributes like TradeID, InstrumentID, BUY/SELL, Price, and Volume.
  2. WorstTradeReporter Class: Here’s the heart of the solution:

__init__: Initializes the prices dictionary and the trades dictionary (with empty min-heaps).

process_trade (Handle Trade Updates):

  • Skips trades with no corresponding price update (ensures accuracy).
  • Calculates loss_per_lot based on buy/sell and current price.
  • Creates a new entry (loss_per_lot, Trade object) for the min-heap if the instrument’s min-heap doesn’t exist.
  • Appends the entry to the min-heap for the instrument.
  • Maintains min-heap size at 3 (efficiently tracks top 3 worst trades).

process_price_update (Handle Price Updates):

  • Updates the price in the prices dictionary for the given instrument.
  • Iterates through existing trades for the instrument.
  • Recalculates loss_per_lot based on the new price.
  • Updates the loss_per_lot attribute of the corresponding Trade object within the min-heap (in-place update).
  • Re-heaps the min-heap to maintain the correct order of worst trades.

output_worst_trade (Return Worst Trade ID):

  • Checks if the instrument’s min-heap exists and has elements.
  • If empty, returns “NO BAD TRADES” (no losing trades for that instrument).
  • Otherwise, retrieves the trade with the highest loss (top of the min-heap) and returns its TradeID.

3. Python Code:

					import heapq

class Trade:
    def __init__(self, trade_id, instrument_id, buy_sell, price, volume):
        self.trade_id = trade_id
        self.instrument_id = instrument_id
        self.buy_sell = buy_sell
        self.price = price
        self.volume = volume
        self.loss_per_lot = None  # Initialize loss_per_lot for price updates

class WorstTradeReporter:
    def __init__(self):
        self.prices = {}  # Map instrument ID to latest price
        self.trades = {}  # Map instrument ID to a min-heap of (loss_per_lot, trade)

    def process_trade(self, trade):
        instrument_id = trade.instrument_id
        if instrument_id not in self.trades:
            self.trades[instrument_id] = []  # Create an empty min-heap

        latest_price = self.prices.get(instrument_id)
        if latest_price is None:
            return  # No price update yet, so ignore trade

        trade.loss_per_lot = (latest_price - trade.price) if trade.buy_sell == 'BUY' else (trade.price - latest_price)
        heapq.heappush(self.trades[instrument_id], (trade.loss_per_lot, trade))

        # Maintain min-heap size (3 elements) for efficiency
        if len(self.trades[instrument_id]) > 3:

    def process_price_update(self, instrument_id, price):
        self.prices[instrument_id] = price

        # Re-evaluate worst trades after price update
        if instrument_id in self.trades:
            for trade in self.trades[instrument_id]:
                trade.loss_per_lot = (price - trade.price) if trade.buy_sell == 'BUY' else (trade.price - price)
            heapq.heapify(self.trades[instrument_id])  # Re-heapify to maintain order

    def output_worst_trade(self, instrument_id):
        if instrument_id not in self.trades or not self.trades[instrument_id]:
            return "NO BAD TRADES"

        worst_loss, worst_trade = self.trades[instrument_id][0]
        return worst_trade.trade_id

reporter = WorstTradeReporter()



Congratulations! You’ve just unlocked a powerful tool for financial analysis by conquering the “Worst Trade Reporter Hackerrank Solution.”

We delved into the inner workings of the challenge, crafting a solution that efficiently tracks the worst trades (highest loss per lot) for any instrument.

We built this tool using clever data structures like dictionaries and min-heaps, ensuring you can handle trade updates and price fluctuations with ease.

Now, armed with this knowledge, you can confidently identify those losing trades and impress others with your financial savvy.

Don’t forget, the journey to coding mastery is paved with practice.

Keep exploring the diverse challenges on HackerRank, and you’ll witness your problem-solving and coding skills reach new heights!


Q1. What’s the “Worst Trade Reporter” challenge on HackerRank?

This challenge asks you to build a tool that identifies the worst trade (highest loss per lot) for an instrument (stock, etc.) based on trades and price updates. You’ll use data structures like dictionaries and min-heaps to keep track of information efficiently.

Q2. Why are dictionaries and min-heaps important in this solution?

Dictionaries help us store the latest price for each instrument, making it easy to calculate loss per lot. Min-heaps, on the other hand, allow us to quickly track the top 3 worst trades for each instrument, even when there are ties.

Q3. What happens if there’s no price update for an instrument before a trade?

The solution skips such trades because we need the current price to calculate the loss per lot accurately.

Q4. What does “NO BAD TRADES” mean in the output?

If an instrument doesn’t have any losing trades (all trades have a profit or no loss), the solution will return “NO BAD TRADES” when you query for the worst trade.

Q5. How can I practice more after solving this challenge?

HackerRank offers a vast collection of coding challenges in various domains. Explore challenges related to finance, data structures, and algorithms to further enhance your coding skills and problem-solving abilities.

Related Articles

Leave a Comment

Your email address will not be published. Required fields are marked *

Featured Articles

Scroll to Top


These AI strategies will flood your business with as many customers as you could barely handle.💯