Code Golf – Saving Time
Code Golf es un sitio donde se juega a resolver problemas informáticos en la menor cantidad posible de pulsaciones de tecla. Para ello pueden utilizarse lenguajes como Perl, PHP, Python y Ruby. Quien resuelva el desafío en menor cantidad de keystrokes es quien tendrá mayor puntaje.
Me anoté en uno llamado Saving Time y llegué al puesto 20 de PHP, con 245 keystrokes. (2009-03-27: Aunque ahora me encuentro en el 22, malditos nerds!)
El desafío consiste en crear la cara de un reloj analógico partiendo de una hora dada en formatohh:mm. Algunas de las reglas son
- La hora dada en hh:mm se representa con una ‘h’ minúscula.
- La hora que indica los minutos dados en hh:mm se representa con una ‘m’ minúscula.
- Cuando hora y minutos coinciden en la misma posición se representa con una ‘x’ minúscula.
- El resto de las horas se representan con una ‘o’ minúscula.
- Los minutos deben redondearse al múltiplo de 5 más cercano (23 se convierte en 20, 39 en 35, etc.)
Salida del programa
Código
El string hexadecimal $f contiene el formato necesario para “dibujar” el reloj. Para interpretarlo es necesario dividirlo en dos mitades. La primera mitad contiene, en cada caracter hexadecimal, la distancia a la que se encuentra respecto de su elemento anterior, que puede ser el número de la izquierda o un salto de línea. De aquí surge el por qué de haber usado el sistema hexadecimal: el espacio mayor a representar es 15. En la segunda mitad cada caracter representa la cantidad de saltos de línea que preceden al caracter.





