Top 5 de la semana

Publicidad

Artículos relacionados

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.

Normas para comentar

Este espacio está abierto a todo el mundo, pero para que funcione bien necesitamos un poco de sentido común. No se permiten comentarios ofensivos, spam, ni enlaces promocionales. Respeta a los demás, escribe con educación y trata de aportar al tema.

Los comentarios que no sigan estas normas serán eliminados.

Gracias por mantener un buen ambiente.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!
Por favor ingrese su nombre aquí