File size: 2,859 Bytes
19945b2
b96d093
3985635
b96d093
 
 
 
 
 
 
19945b2
b96d093
 
 
19945b2
b96d093
 
 
 
 
 
 
 
 
 
 
19945b2
 
 
b96d093
 
 
 
0ee3f96
b96d093
0ee3f96
b96d093
19945b2
b96d093
a26a9aa
b96d093
 
 
 
 
19945b2
b96d093
19945b2
b96d093
 
 
 
 
 
 
 
0ee3f96
b96d093
 
a26a9aa
3985635
b96d093
0ee3f96
b96d093
a26a9aa
19945b2
a26a9aa
 
19945b2
b96d093
19945b2
0ee3f96
 
 
 
 
b96d093
 
 
 
 
19945b2
 
 
b96d093
 
 
 
 
 
19945b2
b96d093
3985635
b96d093
 
 
 
 
 
 
0ee3f96
b96d093
 
 
 
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
from shiny import App, ui, render, reactive
import random

# =========================
# Diccionario del juego UNTREF
# =========================
acertijos = {
    1: {
        "pista": "Universidad pública argentina con fuerte enfoque en inclusión y territorio",
        "respuesta": "untref"
    },
    2: {
        "pista": "Modalidad que combina instancias presenciales y virtuales en UNTREF",
        "respuesta": "sied"
    },
    3: {
        "pista": "Carrera vinculada al comercio exterior y redes globales",
        "respuesta": "relaciones comerciales internacionales"
    },
    4: {
        "pista": "Sistema institucional que regula la educación a distancia",
        "respuesta": "sied"
    },
    5: {
        "pista": "Tipo de universidad: pública, gratuita y con compromiso social",
        "respuesta": "publica"
    }
}

# =========================
# Estados reactivos
# =========================
acertijo_actual = reactive.Value(1)
resultado_estado = reactive.Value("")
puntaje = reactive.Value(0)

# =========================
# Interfaz
# =========================
app_ui = ui.page_fluid(
    ui.h2("🎓 Desafío UNTREF"),
    ui.p("Respondé los acertijos sobre la universidad"),
    ui.hr(),

    ui.h4("📌 Pista"),
    ui.output_text("pista"),

    ui.input_text("respuesta", "Tu respuesta"),
    
    ui.input_action_button("verificar", "✅ Verificar respuesta"),
    ui.input_action_button("siguiente", "➡️ Siguiente desafío"),

    ui.hr(),
    ui.h4("🧠 Resultado"),
    ui.output_text("resultado"),

    ui.hr(),
    ui.h4("⭐ Puntaje"),
    ui.output_text("puntaje_actual")
)

# =========================
# Servidor
# =========================
def server(input, output, session):

    @output
    @render.text
    def pista():
        return acertijos[acertijo_actual()]["pista"]

    @output
    @render.text
    def resultado():
        return resultado_estado()

    @output
    @render.text
    def puntaje_actual():
        return f"Puntaje: {puntaje()}"

    @reactive.effect
    @reactive.event(input.verificar)
    def verificar_respuesta():
        respuesta_usuario = input.respuesta().lower().strip()
        respuesta_correcta = acertijos[acertijo_actual()]["respuesta"]

        if respuesta_usuario == respuesta_correcta:
            resultado_estado.set("✅ Correcto! Sumás 1 punto.")
            puntaje.set(puntaje() + 1)
        else:
            resultado_estado.set(f"❌ Incorrecto. Respuesta esperada: {respuesta_correcta}")

    @reactive.effect
    @reactive.event(input.siguiente)
    def siguiente_acertijo():
        nuevo = random.choice(list(acertijos.keys()))
        acertijo_actual.set(nuevo)
        resultado_estado.set("")
        session.send_input_message("respuesta", {"value": ""})

# =========================
# App
# =========================
app = App(app_ui, server)