File size: 2,295 Bytes
c2ac7eb
 
 
38a5299
c2ac7eb
 
 
 
 
 
 
 
 
 
 
398e488
 
 
c2ac7eb
398e488
 
 
 
 
 
 
 
 
 
 
 
c2ac7eb
 
 
 
398e488
 
 
 
 
 
 
 
 
 
 
 
 
 
c2ac7eb
398e488
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import time
import numpy as np

class FactorizationGame:
    def __init__(self):
        self.score = 0
        self.start_time = None
        self.numbers = list(range(2, 11))
        self.target_number = None
        self.user_input = None

    def generate_target(self):
        self.target_number = np.random.choice(self.numbers)

    def check_answer(self, factor):
        if self.target_number is None:
            return "Select a number first!", 0, self.target_number, int(150 - (time.time() - self.start_time)) if self.start_time else 150

        # Simple factorization check
        if self.target_number % factor == 0:
            feedback = f"✅ Correct! {factor} is a factor of {self.target_number}"
            self.score += 1
        else:
            feedback = f"❌ Wrong! {factor} is NOT a factor of {self.target_number}"
        
        self.generate_target()
        elapsed = int(time.time() - self.start_time) if self.start_time else 0
        time_left = max(0, 150 - elapsed)
        
        return feedback, self.score, self.target_number, time_left

    def start_game(self):
        self.start_time = time.time()
        self.score = 0
        self.generate_target()
        return 0, 150, self.target_number

game = FactorizationGame()

with gr.Blocks(title="Factorization Game") as demo:
    gr.Markdown("# 🎮 Factorization Trainer")
    gr.Markdown("Select a factor of the target number!")
    
    with gr.Row():
        with gr.Column():
            target = gr.Number(label="Target Number", interactive=False)
            score = gr.Number(label="Score", interactive=False)
            time_left = gr.Number(label="Time Left (s)", interactive=False)
        
        with gr.Column():
            feedback = gr.Textbox(label="Feedback", interactive=False)
    
    with gr.Row():
        for num in range(2, 11):
            gr.Button(str(num)).click(
                fn=lambda x=num: game.check_answer(x),
                outputs=[feedback, score, target, time_left]
            )
    
    with gr.Row():
        reset_btn = gr.Button("Start/Reset Game", variant="primary")
        reset_btn.click(
            fn=game.start_game,
            outputs=[score, time_left, target]
        )

if __name__ == "__main__":
    demo.launch()