Introducción
Imagina una ciudad futurista cuyos edificios solo son visibles a determinadas horas del día. Los arquitectos y urbanistas del mañana necesitan un sistema que les permita saber cuántos edificios están visibles en un momento dado… y tú vas a crear esa lógica.
Bienvenido a «La Ciudad Intermitente», una kata para ejercitar la mente, practicar buenas prácticas de programación y aplicar técnicas como TDD, separación de responsabilidades y modelado orientado al dominio.
El Desafío
Dada una lista de edificios, cada uno con una hora de aparición y desaparición, crea una función que determine cuántos edificios están visibles en una hora determinada.
Reglas
- Cada edificio tiene una hora de inicio (inclusive) y una hora de fin (exclusiva).
- Las horas están en formato entero de 0 a 23.
- Pueden existir edificios con horarios solapados.
- Una hora puede tener más de un edificio visible.
Entrada
Una lista de edificios con su horario de visibilidad, y una hora concreta.
const edificios = [ { nombre: "Torre A", inicio: 10, fin: 14 }, { nombre: "Torre B", inicio: 13, fin: 18 }, { nombre: "Torre C", inicio: 8, fin: 11 }, ]; const horaActual = 13;
Salida esperada
2 // Torre A y Torre B están visibles a las 13
Requisitos adicionales (nivel intermedio)
- Devuelve además los nombres de los edificios visibles en esa hora.
- Valida que el rango horario de cada edificio sea correcto (
inicio < fin
y entre 0 y 23). - Aplica TDD y diseño orientado a dominio.
Desafío extra (nivel avanzado)
Implementa una función que, dada una franja de horas (por ejemplo, de 8 a 20), indique cuál es la hora con más edificios visibles.
const horaPico = calcularHoraPico(edificios, 8, 20); // Devuelve: 13 (si es la hora con más edificios visibles)
¿Por qué es una buena kata?
- Requiere modelar el dominio correctamente (edificios, horas, rango).
- Permite practicar principios como SRP, OCP y TDD.
- Se puede escalar fácilmente a versiones más complejas (ciudades, mapas, zonas, prioridades, etc.).
- Es divertida y visual: puedes incluso hacer una versión en frontend que represente la ciudad intermitente.
Sugerencias para implementarla
- Crea una clase
Edificio
o estructura similar. - Crea funciones puras para hacer la lógica testable.
- Usa nombres claros y refactoriza en pequeños pasos.
- Intenta no depender de estructuras globales.
Bonus para frontenders
¿Te atreves a representar visualmente esta ciudad con CSS o canvas? Cada edificio puede ser una barra vertical que aparece y desaparece según una hora seleccionada. Ideal para practicar DOM dinámico y eventos.
Comparte tu solución
Si la implementas en JS, PHP, Python, Rust o cualquier otro lenguaje, compártela en los comentarios o mándanos tu repo, y podrías ser el próximo protagonista en nuestro blog.