Vamos criar um relógio e calendário de arte ASCII que nos informe o mês atual, dia do mês, dia da semana, hora, minuto e se é noite ou dia (mas não o ano ou o segundo).
A qualquer momento, o calendário será mais ou menos assim: (fica melhor com menos espaçamento entre linhas)
________________________________________________________________
|\ ____________________________________________________________ /|
| | ___ | |
| | _( ) | |
| | (___)__) -.- | |
| | | |
| | | |
| | -.- | |
| | -.- | |
| | ___ | |
| | _( ) | |
| | (___)__) | |
| | | |
| | ___ | |
| | _( ) | |
| | _ (___)__) | |
| | /|\ | |
| | / | \ | |
| | /__|__\ | |
| |____|____ | |
| |\_______/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-~~-~~~~~| |
| |____________________________________________________________| |
|/______________________________________________________________\|
É sempre um "quadro de imagem" de 66 por 23 caracteres cuja borda nunca muda.
A imagem no quadro indica a hora e a data:
- Durante o dia (6:00 - 17:59), o mês é determinado pelo número de pássaros (
-.-
) no céu. Janeiro = 1 pássaro, fevereiro = 2 pássaros, etc. - Durante a noite (18:00 - 17:59), os pássaros são substituídos por três vezes mais estrelas (
*
). Janeiro = 3 estrelas, fevereiro = 6 estrelas, etc. Pássaros e estrelas nunca estão no céu ao mesmo tempo. - O dia do mês é determinado pelo número de caracteres entre os dois traços (
-
) na água. por exemplo,~~-~~~~-~~
significa que é o quarto dia do mês. Dependendo do minuto, o barco pode precisar estar entre os traços (os traços não circulam). - O dia da semana é determinado pelo número de nuvens no céu (todas as nuvens parecem iguais). Domingo = 0 nuvens , Segunda-feira = 1 nuvem, ..., Sábado = 6 nuvens.
- A hora é determinada pelo nível da água (e do barco). No ponto mais baixo (como acima), é 1 hora, durante 2 horas é um caractere mais alto, e assim por diante até 12 horas, depois volta para 1 hora. (São 12 e não 24 horas.)
- O minuto é determinado pela posição horizontal do barco. Na parte superior da hora, o barco toca a borda esquerda do quadro (como acima). A cada minuto subseqüente, o barco se move para a direita em um caractere. Nos minutos 51 a 59, ele volta do lado direito do quadro de volta para a esquerda.
Portanto, dado que o exemplo acima tem 3 pássaros, 3 nuvens, 2 caracteres entre traços, a água no nível mais baixo e o barco na extrema esquerda, podemos dizer que a data é quarta-feira 2 de março e a hora é 1: 00pm.
Aqui está outro exemplo de domingo, 25 de abril, às 3:58:
________________________________________________________________
|\ ____________________________________________________________ /|
| | | |
| | * * | |
| | * * * | |
| | * | |
| | | |
| | * | |
| | * * | |
| | | |
| | * | |
| | | |
| | * | |
| | _ | |
| | /|\ * | |
| |/ | \ | |
| |__|__\ /| |
| |__|____ __| |
| |______/~~~~~~~~~~~~~~~~~~~-~~~~~~~~~~~~~~~~~~~~~~~~~-~~~~~\_| |
| | | |
| | | |
| |____________________________________________________________| |
|/______________________________________________________________\|
Objetivo
Seu objetivo é escrever o programa mais curto possível que produza esses "calendários" artísticos ASCII para stdout usando o horário em que o programa é executado.
Cada execução do programa deve gerar uma cena temporal. As atualizações não devem ser automáticas (ou animadas).
As nuvens, estrelas e pássaros devem ser colocados aleatoriamente no céu (para que cada corrida, mesmo as ao mesmo tempo, sejam diferentes). Eles nunca devem se sobrepor ao barco ou um ao outro. (Além disso, os traços de água não devem se sobrepor ao casco do barco.)
Observe que nada que eu descrevi aparece debaixo d'água. Isto é para você fazer. Durante uma hora predeterminada de cada semana (sua escolha), algo interessante deve ser desenhado debaixo d'água. Pode ser um monstro marinho ou um navio afundado ou qualquer coisa, depende de você. Durante essa hora, você pode até alterar o design do restante da cena (permanecendo nos limites do quadro).
Pontuação
Esta é uma combinação de código-golfe-concurso de popularidade.
Sua pontuação é (bytes in program) - 4 * (upvotes - downvotes)
. A pontuação mais baixa vence.
Use http://mothereff.in/byte-counter como contador de bytes, se você usar caracteres não ASCII.
Notas e atualizações
Você pode usar bóias em vez de traços, pois, vamos ser sinceros, eles são muito mais apropriados:
| | ~~(_)~~~(_)~~ (3rd of the month)
Os traços (ou bóias) não precisam ser aleatórios, mas seria bom se fossem.
- Sua "hora especial" deve durar 60 minutos, desde o início da hora até 1 minuto antes da próxima hora.
- Durante a hora especial, as coisas que você desenha debaixo d'água podem se mover e alterar a superfície e o céu quando faz sentido (por exemplo, monstro marinho comendo o barco, formação de um buraco negro no fundo do mar etc.)