billmary50 / app.py
gauntlet173's picture
Create app.py
3503b7f verified
import gradio as gr
leaderboard = {}
def make_leaderboard(scores):
import pandas as pd
global leaderboard
# Convert scores to DataFrame if not already
if not isinstance(scores, pd.DataFrame):
df = pd.DataFrame(scores)
else:
df = scores
# Ensure correct columns
table_names = [f"Table {i}" for i in range(1, 10)]
leaders = []
# Count matches for each table
scores_dict = {}
for table in table_names:
# Compare each row: table value == Bill and Mary value
matches = (df[table] == df["Bill and Mary"]).sum()
scores_dict[table] = matches
# Sort by score descending
sorted_teams = sorted(scores_dict.items(), key=lambda x: x[1], reverse=True)
# Assign positions with golf scoring
leaders = []
last_score = None
last_position = 0
skip = 0
for idx, (team, score) in enumerate(sorted_teams, start=1):
if score == last_score:
position = last_position
skip += 1
else:
position = last_position + skip + 1
skip = 0
leaders.append({"team": team, "score": int(score), "position": position})
last_score = score
last_position = position
leaderboard = {"leaders": leaders}
return {"leaders": leaders}
with gr.Blocks() as demo:
gr.Markdown("# Score")
scores = gr.DataFrame(headers=["Round","Bill and Mary", "Table 1", "Table 2", "Table 3","Table 4","Table 5","Table 6","Table 7","Table 8","Table 9"],col_count=11,row_count=20,datatype=["number","bool","bool","bool","bool"],interactive=True,)
calculate = gr.Button("Update Scores")
leaderboard = gr.JSON()
ignore = gr.Button("Ignore")
calculate.click(make_leaderboard, [scores], leaderboard)
def get_global_leaderboard():
global leaderboard
return leaderboard
ignore.click(get_global_leaderboard, [], leaderboard)
demo.launch(share=True)