File size: 2,687 Bytes
0ef03ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fd0fa88
 
 
 
 
 
 
0ef03ea
 
fd0fa88
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import os
import json
import threading
import gradio as gr
import statistics
from scipy import stats

DATA_DIR = './storage'
DATA_FILE = os.path.join(DATA_DIR, 'guesses.json')
lock = threading.Lock()

def ensure_data_directory():
    os.makedirs(DATA_DIR, exist_ok=True)

def load_guesses():
    ensure_data_directory()
    if not os.path.exists(DATA_FILE):
        with open(DATA_FILE, 'w') as f:
            json.dump([], f)
    with open(DATA_FILE, 'r') as f:
        return json.load(f)

def save_guesses(guesses):
    with open(DATA_FILE, 'w') as f:
        json.dump(guesses, f)

def add_guess(guess):
    with lock:
        guesses = load_guesses()
        guesses.append(guess)
        save_guesses(guesses)
        
        n = len(guesses)
        average = sum(guesses) / n
        
        if n >= 2:
            # Calculate sample standard deviation
            s = statistics.stdev(guesses)
            # Calculate standard error
            SE = s / (n ** 0.5)
            # Degrees of freedom
            df = n - 1
            # Confidence level (e.g., 95%)
            confidence_level = 0.95
            alpha = 1 - confidence_level
            # Calculate critical t-value
            t_value = stats.t.ppf(1 - alpha/2, df)
            # Calculate margin of error
            ME = t_value * SE
            # Calculate confidence interval
            ci_lower = average - ME
            ci_upper = average + ME
            # Prepare output message
            return (
                f"Your guess has been recorded.\n"
                f"Current average of all guesses: {average:.2f}\n"
                f"95% confidence interval: ({ci_lower:.2f}, {ci_upper:.2f})"
            )
        else:
            # Not enough data to compute confidence interval
            return (
                f"Your guess has been recorded.\n"
                f"Current average of all guesses: {average:.2f}\n"
                f"Not enough data to compute confidence interval."
            )

#demo = gr.Interface(
#    fn=add_guess,
#    inputs=gr.Number(label="Enter your guess"),
#    outputs="text",
#    title="Collective Guessing Game",
#    description="Submit your guess and contribute to the global average!"
#)


with gr.Blocks() as demo:
    gr.Markdown("# Collective Guessing Game")
    gr.Markdown("Submit your guess and contribute to the global average!")

    guess_input = gr.Number(label="Enter your guess")
    submit_button = gr.Button("Submit Guess")

    with gr.Accordion("View Current Results!", open=False):
        output_text = gr.Textbox(label="Results", lines=10)

    submit_button.click(fn=add_guess, inputs=guess_input, outputs=output_text)

demo.launch()