Dada uma lista de atividades e sua hora / data de início, produza um calendário de arte ASCII mostrando as atividades nos dias apropriados. Todas as atividades são garantidas no mesmo mês, não há duas atividades no mesmo dia e todas as atividades cabem na caixa do calendário.
O calendário tem a data no canto superior esquerdo de cada caixa, as caixas têm 9 espaços de largura por 5 espaços de altura, cercados por -
e |
. A abreviação de duas letras para o dia da semana está centralizada acima da primeira linha e as semanas começam no domingo.
Por exemplo, dadas as seguintes atividades:
10/5/2018 - 9:00am - Sandbox calendar challenge
10/9/2018 - 9:00am - Post challenge to main
10/10/2018 - 10:00am - Profit
10/31/2018 - 7:30pm - Halloween party
Saída este calendário correspondente:
Su Mo Tu We Th Fr Sa
-----------------------------------------------------------------------
| |1 |2 |3 |4 |5 |6 |
| | | | | |9:00am | |
| | | | | |Sandbox | |
| | | | | |calendar | |
| | | | | |challenge| |
-----------------------------------------------------------------------
|7 |8 |9 |10 |11 |12 |13 |
| | |9:00am |10:00am | | | |
| | |Post |Profit | | | |
| | |challenge| | | | |
| | |to main | | | | |
-----------------------------------------------------------------------
|14 |15 |16 |17 |18 |19 |20 |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
-----------------------------------------------------------------------
|21 |22 |23 |24 |25 |26 |27 |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
-----------------------------------------------------------------------
|28 |29 |30 |31 | | | |
| | | |7:30pm | | | |
| | | |Halloween| | | |
| | | |party | | | |
| | | | | | | |
-----------------------------------------------------------------------
Esclarecimentos
- As palavras da programação (combinando [A-Za-z] +) serão delimitadas por um único espaço entre elas (como no exemplo).
- Dividir o texto nos limites das palavras é suficiente. Não há necessidade de hifenizar palavras.
- Se fevereiro começar em um domingo em um ano que não seja bissexto, você terá apenas quatro linhas do calendário.
- Se um mês de 31 dias (por exemplo, agosto) começar no final da semana, talvez você precise gerar seis linhas do calendário.
E / S e regras
- Seu código deve lidar com datas pelo menos entre
0001-01-01
e9999-12-31
no calendário gregoriano, incluindo anos bissextos, conforme apropriado. Por exemplo, se uma entrada é fornecida2016-02-13 9:00am Test
, o calendário de saída deve ter 29 de fevereiro. - O formato da data de entrada pode estar em qualquer formato desejado. ISO 8601, um
datetime
objeto, uma sequência particularmente formatada, etc. A análise de entrada não é a parte interessante desse desafio. - A entrada e a saída podem ser feitas por qualquer método conveniente .
- Novas linhas à esquerda / à direita ou outro espaço em branco são opcionais, desde que os caracteres sejam alinhados adequadamente.
- Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
- A saída pode ser no console, retornada como uma lista de cadeias, retornada como uma única cadeia, etc.
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
1752-09-02 - 09:00am - Wife's Birthday Tomorrow (14th!)