CodeArena / app.py
Elfsong's picture
Update
d2654c4
raw
history blame
2.51 kB
# coding: utf-8
# Author: Du Mingzhe (mingzhe@nus.edu.sg)
# Date: 2025-04-01
import json
import random
import pandas as pd
import streamlit as st
from datasets import load_dataset
st.title("Code Arena")
with st.spinner("Loading data...", show_time=True):
problem_dict = dict()
ds = load_dataset("Elfsong/leetcode_data", split='train')
for problem in ds:
problem_id = problem["problem_id"]
problem_dict[problem_id] = problem
if "problem" in st.query_params:
problem_id = int(st.query_params["problem"])
problem_instance = problem_dict[problem_id]
with st.container(border=True):
st.write(f"Problem [{problem_id}]")
with st.expander("Problem Description"):
st.markdown(problem_instance["question_content"])
with st.expander("Test Cases"):
test_cases = json.loads(problem_instance["test_cases"])
df = pd.DataFrame(
{
"input": [test_case['input'] for test_case in test_cases],
"output": [test_case['output'] for test_case in test_cases],
}
)
st.dataframe(
df,
column_config={
"input": st.column_config.TextColumn("Input"),
"output": st.column_config.TextColumn("Output"),
},
column_order=("input", "output"),
)
else:
with st.spinner("Loading Framework...", show_time=True):
df = pd.DataFrame(
{
"problem_id": [int(problem['problem_id']) for problem in ds],
"problem_link": ["https://huggingface.co/spaces/Elfsong/CodeArena/?problem=" + str(problem['problem_id']) for problem in ds],
"dynamic_point": [[random.randint(0, 5000) for _ in range(30)] for problem in ds],
}
)
tab_problem, tab_submission, tab_model = st.tabs(["Problems", "Submissions", "Models"])
with tab_problem:
st.dataframe(
df,
column_config={
"problem_id": st.column_config.NumberColumn("Problem ID"),
"dynamic_point": st.column_config.LineChartColumn("Dynamic Point", y_min=0, y_max=5000),
"problem_link": st.column_config.LinkColumn("Link", display_text="Open"),
},
column_order=("problem_id", "dynamic_point", "problem_link"),
hide_index=True,
)
with tab_submission:
st.header("Submissions")
with tab_model:
st.header("Models")