Desde que eu vi o primeiro, há alguns anos, eu sempre fui subjugado por esse tipo de relógio de palavras, onde o tempo é realmente determinado por palavras sendo iluminadas ou não em uma frase significativa.
O texto exibido nesse relógio é o seguinte.
IT IS HALF TEN
QUARTER TWENTY
FIVE MINUTES TO
PAST TWO THREE
ONE FOUR FIVE
SIX SEVEN EIGHT
NINE TEN ELEVEN
TWELVE O'CLOCK
Sua tarefa é escrever um relógio que funcione. As palavras são acesas se e somente se forem relevantes para a impressão da hora atual. Caso contrário, eles estão iluminados. As palavras são "iluminadas" ao serem impressas e "iluminadas" ao serem substituídas por vários espaços, sendo o comprimento da palavra.
Exemplo: se o horário atual for 17:23, o texto impresso deverá ser exatamente o seguinte:
IT IS
TWENTY
FIVE MINUTES
PAST
FIVE
Regras
- A hora impressa é a variante de 12 horas, mas sem AM / PM.
- O arredondamento é feito apenas com base em minutos (os segundos são totalmente irrelevantes). O arredondamento é feito para o múltiplo mais próximo de 5. Portanto, por exemplo, embora 17:52:38 seja realmente o mais próximo de 17:55, mas como os segundos são irrelevantes, 17:52 é na verdade arredondado para 17:50, e o texto impresso é "SÃO DEZ MINUTOS A SEIS" (com espaçamento relevante). Portanto, se
XX
for múltiplo de cinco,XX
será usado de HH: (XX-2): 00 até HH: (XX + 2): 59. A palavraMINUTES
deve aparecer seFIVE
,TEN
ouTWENTY
estiver acesa na seção de minutos (antes de "TO" ou "PASSADO"). - Todas as palavras irrelevantes são substituídas por quantos espaços forem necessários para manter o texto onde ele está localizado no modelo acima. Os espaços à direita podem ser aparados. Os espaços relevantes para manter o texto na posição esperada devem ser mantidos.
As linhas à direita também podem ser cortadas. Linhas vazias relevantes ainda precisam aparecer. Exemplo:
IT IS TEN MINUTES PAST TWO
Não acenda
TEN
na primeira linha ouFIVE
na terceira linha quando esses valores se referirem às horas.- Você pode aceitar uma entrada. Se você aceitar uma entrada, a entrada será a hora de imprimir em qualquer formato válido desejado (sequência, lista de números inteiros, horário nativo, digite o seu suporte ao idioma, ...), mas nenhum parâmetro será permitido se não estiver relacionado até a hora de imprimir. Se você não suportar nenhuma entrada, deverá usar a hora atual. Se você apoia os dois, é melhor, mas não há bônus;)
- Seu código pode ser um programa, uma função, um lambda, mas não um trecho.
- Se seu idioma suportar impressão de qualquer forma, ele deverá imprimir o resultado (em um arquivo, na saída padrão, não me importo). Se o seu idioma não suportar a impressão de forma alguma, é permitido simplesmente "retornar" o texto esperado. O resultado pode ser todo em maiúsculas ou minúsculas, não uma mistura de ambos.
- Aplicam-se brechas padrão.
- Isso é código-golfe, então o código mais curto vence!
- Na medida do possível, forneça um link para um intérprete on-line do seu idioma.
Casos de teste
Input: <no input> (the current local time is 19:20)
Output:
IT IS
TWENTY
MINUTES
PAST
SEVEN
Input: 13:15
Output: (empty line is being printed)
IT IS
QUARTER
PAST
ONE
Input: 13:58
Output: (rounding)
IT IS
TWO
O'CLOCK
Input: 14:30
Output: (half is always a edge-case)
IT IS HALF
PAST TWO
Input: 15:35
Output: (light up "TO")
IT IS
TWENTY
FIVE MINUTES TO
FOUR
Input: 10:00
Output: (do not use the TEN or FIVE on the first line when referring to the hours)
IT IS
TEN
O'CLOCK
Input: 12:00
Output: (O'CLOCK and a lot of empty lines)
IT IS
TWELVE O'CLOCK