Spaces:
Sleeping
Sleeping
| 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) |