Skip to content

Kata: La Ciudad Intermitente

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)

  1. Devuelve además los nombres de los edificios visibles en esa hora.
  2. Valida que el rango horario de cada edificio sea correcto (inicio < fin y entre 0 y 23).
  3. 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.