Respuestas modelo
Consulta aquí las respuestas correctas y explicaciones de las autoevaluaciones y los tests del manual. Ideal para repasar antes de un test o aclarar dudas.
B4 · Boss Final 4 — Editor de Texto con Undo/Redo
10 preguntas con respuesta en este tema.
🎯 Autoevaluación (2)
¿Qué estructuras se usan en un editor de texto con Undo/Redo?
- A. Array simple
- B. Dos pilas: una para el historial de acciones, otra para redo ✓ CORRECTA
- C. Solo una pila
- D. Una lista enlazada
Undo/Redo clásico: pila de undo (acciones realizadas) y pila de redo (deshechas). Al deshacer, mueves de undo a redo.
¿Qué operaciones deben ser O(1) en undo/redo?
- A. Buscar texto
- B. Push y pop de las pilas de undo/redo ✓ CORRECTA
- C. Renderizar
- D. Compilar
Las pilas tienen push/pop O(1). Cada acción del usuario se pushea; undo hace pop de una y push a la otra.
📝 Test · Sección A · Opción múltiple (5)
¿Qué estructuras se usan en un editor con Undo/Redo?
- A. Una sola pila
- B. Dos pilas: undo y redo ✓ CORRECTA
- C. Solo array
- D. Hash
Undo: pila de acciones. Redo: pila de acciones deshechas. Mover entre ellas.
¿Qué operación de undo/redo es O(1)?
- A. Buscar texto
- B. push y pop de las pilas ✓ CORRECTA
- C. Renderizar
- D. Compilar
Pila: push/pop O(1). Cada acción del usuario se pushea; undo hace pop de una y push a la otra.
¿Cómo manejar memoria en undo/redo?
- A. Variables globales
- B. Smart pointers o struct con copia del estado ✓ CORRECTA
- C. Comentarios
- D. Prints
Cada acción guarda el estado o delta. RAII con smart pointers.
Para un editor con archivos grandes:
- A. Cargar todo en RAM
- B. Buffers + paginación + solo deltas en undo ✓ CORRECTA
- C. Solo strings
- D. Solo memoria
Para archivos grandes: no cargar todo, trabajar con chunks. Undo: guardar diffs, no copias completas.
Undo/redo se puede implementar con:
- A. Solo if
- B. Command pattern: cada acción es un objeto con execute() y undo() ✓ CORRECTA
- C. Solo switch
- D. Solo while
Command pattern: encapsula acción como objeto. Permite undo/redo genérico.
✍️ Test · Sección B · Preguntas abiertas (3)
¿Cómo implementarías undo/redo para un editor de texto? Da un esquema.
Dos pilas: undoStack (acciones realizadas), redoStack (deshechas). Cada acción: push a undoStack, clear redoStack. Undo: pop de undoStack, ejecutar la inversa, push a redoStack. Redo: pop de redoStack, ejecutar la acción, push a undoStack.
¿Qué desafíos tiene implementar undo/redo para operaciones de texto como copiar y pegar?
Copiar: no modifica el documento, no necesita undo. Pegar: inserta texto en posición, undo debe eliminarlo. Cortar: combinación de copiar+eliminar. Eliminar: necesita guardar el texto eliminado y la posición para restaurarlo. Reemplazar: combinación de eliminar+insertar.
Diseña la estructura de datos para almacenar el estado del editor que permita undo/redo eficiente.
struct Accion { string tipo; // insert, delete, replace size_t posicion; string texto; // insertado o eliminado Accion* inversa; }; O mejor: guardar el estado completo (snapshot) si la memoria lo permite, o deltas (diff) si es muy grande.
📝 ¿Listo para evaluarte?
Regístrate o inicia sesión para tomar la autoevaluación o el test de este tema y registrar tu puntaje.