HeroCTF - DataScience


In this challenge, we had to sort data and calculate specific values. After several attempts, I arrived at the following code:

import pandas as pd  
import math  

df = pd.read_csv("orders.csv", parse_dates=["date"])  

df = df[df["date"] < "2023-01-01"]  

initial_balance = 10000  
user_balances = {}  

unique_users = pd.concat([df["buyer_id"], df["seller_id"]]).unique()  
user_balances = {}
for user_id in unique_users:
    user_balances[user_id] = initial_balance

total_discount_spared = 0  

for _, row in df.iterrows():  
    buyer_id = row["buyer_id"]  
    seller_id = row["seller_id"]  
    price = row["price"]  
    discount = row["discount"]  

    discounted_price = price * (1 - discount / 100)  
    amount_spared = price - discounted_price  
    total_discount_spared += amount_spared  

    user_balances[buyer_id] -= discounted_price  
    user_balances[seller_id] += discounted_price  

# resp 1  
richest_user = max(user_balances, key=user_balances.get)  

# resp 2  
total_discount_spared = math.floor(total_discount_spared)  

# resp 3  
negative_balance_count = 0
for balance in user_balances.values():
    if balance < 0:
        negative_balance_count += 1

#print the flag  
flag = f"Hero{{{richest_user}_{total_discount_spared}_{negative_balance_count}}}"  
print(flag)
Hero{732669_188098001_3468}