Proy01: Quién quiere ser millonario

Escriba un programa que permita jugar "Quién quiere ser millonario" con una base de preguntas construida para el curso. El siguiente podría ser un ejemplo de uso, aunque su equipo está en libertad de cambiar la interfaz con el programa.

Ejemplo de interacción

Interacción hipotética de ejemplo con el programa:

$ py src/millonario.py general.tsv 30000000
Escalera:
  15: 30,000,000 (1/1)
  14: 15,000,000 (1/2)
  13: 10,000,000 (1/3)
  12:  7,500,000 (1/4)
  11:  5,000,000 (1/6)
  --------------
  10:  3,000,000 (1/10)
   9:  2,000,000 (1/15)
   8:  1,500,000 (1/20)
   7:  1,000,000 (1/30)
   6:    750,000 (1/40)
  --------------
   5:    500,000 (1/60)
   4:    400,000 (1/75)
   3:    300,000 (1/100)
   2:    200,000 (1/150)
>  1:    100,000 (1/300)

Comodines:
   1. 50:50: elimina dos opciones incorrectas
   2. 2opcion: permite responder dos veces
   3. op_publico: presenta resultados de una encuesta al público

1 2 3 4 5 | 6 7 8 9 10 | 11 12 13 14 15 [1=50:50|2=2opcion|3=op_publico]
^ 0 -> 100,000

1. Según el trabalenguas ¿qué comieron los tres tristes tigres?
   A. Helado
   B. Trigo
   C. Arroz
   D. Maíz
Respuesta: B
Definitiva? S
Correcto!

1 2 3 4 5 | 6 7 8 9 10 | 11 12 13 14 15 [1=50:50|2=2opcion|3=op_publico]
  ^ 100,000 -> 200,000

2. ¿Cuántas vidas tiene el gato?
   A. Una
   B. Dos
   C. Siete
   D. Nueve
Respuesta: 1
Aplicar comodín 50:50? S
Comodín 50:50 aplicado

2. ¿Cuántas vidas tiene el gato?
   A. Una
   B. Dos
   C. ---
   D. ---
Respuesta: a
Correcto!

1 2 3 4 5 | 6 7 8 9 10 | 11 12 13 14 15 [---|2=2opcion|3=op_publico]
    ^ 200,000 -> 300,000
3. ¿En cuáles de los siguientes países se conduce por el lado izquierdo de la vía?
   A. Estados Unidos
   B. Francia
   C. Inglaterra
   D. España
Respuesta: C
Definitiva? S
Correcto!

1 2 3 4 5 | 6 7 8 9 10 | 11 12 13 14 15 [---|2=2opcion|3=op_publico]
      ^ 300,000 -> 400,000
4. ¿Cuál de las siguientes no es una fruta?
   A. Aguacate
   B. Banano
   C. Camote
   D. Durazno
Respuesta: C
Definitiva? S
Correcto!

1 2 3 4 5 | 6 7 8 9 10 | 11 12 13 14 15 [---|2=2opcion|3=op_publico]
        ^ 400,000 -> 500,000

5. ¿Cuántos estómagos tiene una gallina?
   A. Uno
   B. Dos
   C. Tres
   D. Cuatro
Respuesta: A
Definitiva? N
Respuesta: B
Definitiva? S
Correcto!

Escalera:
  15: 30,000,000 (1/1)
  14: 15,000,000 (1/2)
  13: 10,000,000 (1/3)
  12:  7,500,000 (1/4)
  11:  5,000,000 (1/6)
  --------------
  10:  3,000,000 (1/10)
   9:  2,000,000 (1/15)
   8:  1,500,000 (1/20)
   7:  1,000,000 (1/30)
>  6:    750,000 (1/40)
  --------------
   5:    500,000 (1/60)
   4:    400,000 (1/75)
   3:    300,000 (1/100)
   2:    200,000 (1/150)
   1:    100,000 (1/300)

Comodines:
   2. 2opcion: permite responder dos veces
   3. op_publico: presenta resultados de una encuesta al público

1 2 3 4 5 | 6 7 8 9 10 | 11 12 13 14 15 [---|2=2opcion|3=op_publico]
            ^ 500,000 -> 750,000

6. ¿En cuál campeonato mundial de fútbol Costa Rica alcanzó los cuartos de final?
   A. Italia 90
   B. Alemania 2006
   C. Brasil 2014
   D. Catar 2022
Respuesta: C
Definitiva? s
Correcto!

1 2 3 4 5 | 6 7 8 9 10 | 11 12 13 14 15 [---|2=2opcion|3=op_publico]
              ^ 750,000 -> 1,000,000

7. ¿Al polímata Charles Babbage se le conoce como el padre de?
   A. La computación
   B. La ingeniería mecánica
   C. La ingeniería eléctrica
   D. La industria textilera
Respuesta: 3
Aplicar comodín Opinión del público?: S

Opinión del público:
   A. 45%
   B. 25%
   C. 10%
   D. 20%

7. ¿Al polímata Charles Babbage se le conoce como el padre de?
   A. La computación
   B. La ingeniería mecánica
   C. La ingeniería eléctrica
   D. La industria textilera
Respuesta: A
Definitiva? s
Correcto!

1 2 3 4 5 | 6 7 8 9 10 | 11 12 13 14 15 [---|2=2opcion|---]
                ^ 1,000,000 -> 1,500,000

8. ¿En qué país se inauguró la primera línea ferroviaria del mundo?
   A. Estados Unidos
   B. Alemania
   C. Rusia
   D. Inglaterra
Respuesta: D
Definitiva? S
Correcto!

1 2 3 4 5 | 6 7 8 9 10 | 11 12 13 14 15 [---|2=2opcion|---]
                  ^ 1,500,000 -> 2,000,000

9. La unidad de potencia "caballo de fuerza" fue acuñada por:
   A. Alessandro Volta
   B. James Watt
   C. André-Marie Ampère
   D. Michael Faraday
Respuesta: E

Escalera:
  15: 30,000,000 (1/1)
  14: 15,000,000 (1/2)
  13: 10,000,000 (1/3)
  12:  7,500,000 (1/4)
  11:  5,000,000 (1/6)
  --------------
  10:  3,000,000 (1/10)
>  9:  2,000,000 (1/15)
   8:  1,500,000 (1/20)
   7:  1,000,000 (1/30)
   6:    750,000 (1/40)
  --------------
   5:    500,000 (1/60)
   4:    400,000 (1/75)
   3:    300,000 (1/100)
   2:    200,000 (1/150)
   1:    100,000 (1/300)

Comodines:
   2. 2opcion: permite responder dos veces

9. La unidad de potencia "caballo de fuerza" fue acuñada por:
   A. Alessandro Volta
   B. James Watt
   C. André-Marie Ampère
   D. Michael Faraday
Respuesta: 2
Aplicar comodín 2opcion? S
Comodín 2opcion aplicado

9. La unidad de potencia "caballo de fuerza" fue acuñada por:
   A. Alessandro Volta
   B. James Watt
   C. André-Marie Ampère
   D. Michael Faraday
Respuesta: D
Definitiva? S
Incorrecto!!!
Respuesta: B
Definitiva? S
Correcto!

1 2 3 4 5 | 6 7 8 9 10 | 11 12 13 14 15 [---|---|---]
                    ^ 2,000,000 -> 3,000,000

10. El artista costarricense Evangelista Blanco Brenes fue conocido por su obra
   A. Topiarios del parque de Zarcero
   B. Alegoría del café y el banano
   C. La vaca de Marito Mortadela
   D. El monumento al agricultor
Respuesta: A
Definitiva? S
Correcto!

Escalera:
  15: 30,000,000 (1/1)
  14: 15,000,000 (1/2)
  13: 10,000,000 (1/3)
  12:  7,500,000 (1/4)
> 11:  5,000,000 (1/6)
  --------------
  10:  3,000,000 (1/10)
   9:  2,000,000 (1/15)
   8:  1,500,000 (1/20)
   7:  1,000,000 (1/30)
   6:    750,000 (1/40)
  --------------
   5:    500,000 (1/60)
   4:    400,000 (1/75)
   3:    300,000 (1/100)
   2:    200,000 (1/150)
   1:    100,000 (1/300)

Sin comodines

1 2 3 4 5 | 6 7 8 9 10 | 11 12 13 14 15 [---|---|---]
                         ^ 3,000,000 -> 5,000,000

11. ¿Cuál es el vertebrado que puede vivir más años?
   A. La tortuga gigante de Seychelles
   B. El elefante asiático
   C. El loro gris africano
   D. El tiburón de Groenlandia
Respuesta: D
Definitiva? S
Correcto!

1 2 3 4 5 | 6 7 8 9 10 | 11 12 13 14 15 [---|---|---]
                            ^ 5,000,000 -> 7,500,000

12. ¿Quién salvó más de 62,000 judíos de morir en campos de concentración?
   A. Carl Lutz Weg
   B. Nicholas Winton
   C. Desmond Doss
   D. Job Maseko
Respuesta: R
Se retira? S
Cuál habría sido su respuesta? B
La respuesta correcta es A. Carl Lutz Weg

Su premio: 5,000,000 ¡Felicidades!
Ha sido un honor tenerle en la silla caliente

Otro posible escenario final: jugador(a) falla una pregunta.

1 2 3 4 5 | 6 7 8 9 10 | 11 12 13 14 15 [---|---|---]
                            ^ 5,000,000 -> 7,500,000

12. ¿Quién salvó más de 62,000 judíos de morir en campos de concentración?
   A. Carl Lutz Weg
   B. Nicholas Winton
   C. Desmond Doss
   D. Job Maseko
Respuesta: B
Definitiva? S
Incorrecto!
La respuesta correcta es A. Carl Lutz Weg

Su premio: 3,000,000 ¡Felicidades!
Ha sido un honor tenerle en la silla caliente

Otro posible escenario final: jugador(a) contesta todas las preguntas.

1 2 3 4 5 | 6 7 8 9 10 | 11 12 13 14 15 [---|---|---]
                            ^ 5,000,000 -> 7,500,000

12. ¿Quién salvó más de 62,000 judíos de morir en campos de concentración?
   A. Carl Lutz Weg
   B. Nicholas Winton
   C. Desmond Doss
   D. Job Maseko
Respuesta: A
Definitiva? S
Correcto!

1 2 3 4 5 | 6 7 8 9 10 | 11 12 13 14 15 [---|---|---]
                               ^ 7,500,000 -> 10,000,000

13. ¿Cuál ingeniero comercializó sonido grabado en discos en lugar de cilindros?
   A. Thomas Alva Edison
   B. David Edward Hughes
   C. Emile Berliner
   D. James Russell
Respuesta: C
Definitiva? S
Correcto!

1 2 3 4 5 | 6 7 8 9 10 | 11 12 13 14 15 [---|---|---]
                                  ^ 10,000,000 -> 15,000,000

14. ¿En qué año se creó la Wikipedia?
   A. 1995
   B. 1997
   C. 1999
   D. 2001
Respuesta: D
Definitiva? S
Correcto!

1 2 3 4 5 | 6 7 8 9 10 | 11 12 13 14 15 [---|---|---]
                                     ^ 15,000,000 -> 30,000,000

15. ¿Cuál de las siguientes islas desapareció a causa del cambio climático?
   A. Tuvalu
   B. Maldivas
   C. Kale
   D. Carteret
Respuesta: C
Definitiva? S
Correcto!

¡HA CONTESTADO TODAS LAS PREGUNTAS CORRECTAMENTE!
Su premio: 15,000,000 ¡Felicidades!
Ha sido un honor tenerle en la silla caliente

Acciones

Las siguientes son las letras con que la persona jugadora puede responder en las preguntas, sin importar si las ingresa en mayúscula o minúscula:

  • A, B, C, D: Escoge una opción para responder la pregunta

  • 1, 2, 3: Aplica el comodín con ese número (si está disponible)

  • E: Ver la escalera

  • R: Rendirse, ver la respuesta, y salir del juego

  • Q: Salir del juego inmediatamente

Ante cualquier otra letra repite la pregunta. A excepción de la opción Q, ante todas las acciones el programa debe solicitar confirmación, culturalmente con la pregunta "¿Definitivo/a?". La persona usuaria puede responder con S para confirmar con un "Sí" o N para indicar que cambió de opinión con un "No". También se deben aceptar sus correspondientes s y n en minúsculas.

Comodines

Como es habitual en este juego, el programa debe proveer tres comodines a quien juega. Su equipo puede escoger hasta un máximo de 2 comodines "tradicionales", listados a continuación.

  1. 50:50

  2. Votación del público (encuesta con clickers)

  3. Pregúntele al público (una persona da su opinión)

  4. Videollamada (el progama simula la llamada y provee una respuesta)

  5. Cambio de pregunta (cambia por otra pregunta de igual dificultad)

  6. Segunda opción (si falla la primera opción, puede escoger una segunda)

Su equipo debe implementar al menos un comodín de inventiva propia, de tal manera que todos los equipos del grupo ofrezcan al menos un comodín distinto. Esto provee nuevas experiencias de juego.

Avance 1 (19-jun)

Para el primer avance su equipo debe presentar los siguientes entregables:

  1. [5%] Un repositorio de control de versiones para el proyecto, con ambos miembros, docente y asistente.

  2. [25%] Un documento de análisis (readme) en la raíz del repositorio que exponga:

    1. el problema a resolver

    2. un ejemplo de interacción (al menos 3 preguntas)

    3. un manual de usuario (cómo se corre y se juega con el programa)

    4. los comodines y sus efectos, detallar los de invención propia

    5. cómo crear nuevas preguntas para el juego en un archivo .tsv

    6. enlace al documento de diseño (ver más adelante)

    7. los/as integrantes del equipo (autores/as)

  3. [10%] Crear al menos 15 preguntas de dificultad 1 a 15 en el libro de cálculo compartido para el grupo. Exportar las hojas de cálculo completas con preguntas a archivos .tsv, por ejemplo, general.tsv y guardarlas en una carpeta data/ en su repositorio de control de versiones.

  4. [30%] Algoritmo en pseudocódigo que permita jugar 15 preguntas de conocimiento general y de dificultad creciente sin comodines y sin premios. Simplemente permite saber si la persona jugadora acierta o no las respuestas. Escoge preguntas al azar del archivo general. Pide confirmación para responder cada una de ellas ("Definitiva?"). En caso de respuesta fallida o rendirse, muestra la respuesta correcta y termina la ejecución del juego. El algoritmo deberá estar en archivo con extensión .pseudo en una carpeta design/ de su repositorio de control de versiones. En esta carpeta agregue un documento design/readme.adoc que incruste el pseudocódigo. Cree un enlace desde el readme del repositorio hacia la carpeta design/. Esto facilitará la navegabilidad en el servicio de alojamiento de control de versiones (ej.: git.ucr.ac.cr).

  5. [30%] Implementación en Python del algoritmo del punto anterior. Sugerencia: implemente en Python sólo las subrutinas de pseudocódigo que ya hayan discutido con el docente. Su implementación debe estar en uno o varios archivos con extensión .py en una carpeta src/ de su repositorio de control de versiones.

Avance 2 (03-jul)

Para el segundo avance su equipo debe aumentar tanto el pseudocódigo como el código en Python para permitir la siguiente funcionalidad:

  1. [10%] Permitir a quien usa el programa escoger el archivo de preguntas (por ejemplo, general.tsv, compu.tsv, videojuegos.tsv, …​). Puede hacer una pregunta al inicio del programa o preferiblemente usar argumento de línea de comandos.

  2. [30%] Implementar las escaleras de premios.

    1. Permitir a quien juega establecer el monto del premio mayor (puede hacer una pregunta al inicio del programa o recibirlo como argumento de línea de comandos).

    2. Crear la escalera de premios usando las fracciones indicadas en el ejemplo de ejecución.

    3. Permite ver en todo momento la escalera vertical con la opción E (no es necesario mostrar las fracciones).

    4. Muestra automáticamente la escalera cuando se encuentra en zona segura.

    5. En la escalera indica en qué peldaño se encuentra quien está jugando y las zonas seguras.

  3. [10%] Implementar la escalera resumida (horizontal) que indica la pregunta donde se encuentra quien juega, su dinero actual, dinero que obtendría si acertara la pregunta, y comodines disponibles. Muestra la escalera horizontal al inicio de cada pregunta.

  4. [45%] Implementa los tres comodines.

    1. Agrega comodines disponibles a las escaleras vertical y horizontal.

    2. Al final de la escalera vertical explica los comodines disponibles con una frase.

    3. Permite a la persona jugadora activar los comodines por número.

    4. Aplica su efecto sobre las preguntas o el estado del juego.

    5. Retira comodines aplicados de las escaleras.

    6. Impide activar comodines deshabilitados.

  5. [5%] Indica el premio ganado y despide a la persona jugadora cuando:

    1. Falla una pregunta (premio de última zona segura o cero)

    2. Se retira (premio acumulado actual)

    3. Responde correctamente las 15 preguntas.

Se recomienda discutir con el docente cada funcionalidad en pseudocódigo antes de implementarla en Python.

Revisiones

Las revisiones del primer proyecto serán mediante una presentación. Primero los miembros del equipo hacen una presentación del producto, corriendo el programa y jugando entre todas las personas en la reunión. Los miembros del equipo cargan el proyecto en un ambiente de desarrollo (ej.: VSCode). La persona que revisa puede solicitar explicaciones de cualquier parte del producto (ej.: una funcionalidad en el pseudocódigo o código) a cualquiera de los miembros del equipo. Ambos miembros deben estar en capacidad de explicar bien cualquier parte del producto.

Proy02: El servidor físico

Proyecto que consta de una secuencia de avances elaborados durante las lecciones, idealmente de forma individual o en parejas en función de la cantidad de recursos disponibles en la ECCI. Avances:

  1. [20%] Arma la máquina física.

  2. [20%] Instala un sistema operativo.

  3. [10%] Configura sistema operativo para acceso remoto.

  4. [20%] De forma remota a través de red virtual privada, usa comandos para clonar repositorios, correr aplicaciones en Python, entre otros.

  5. [10%] De forma remota a instala y configura un servidor web.

  6. [20%] Crea un sitio web personal en su repositorio personal a partir de documentos en AsciiDoc o Markdown, y lo publica en el servidor web.