Objetivo: esse objetivo de obter uma sequência e gerar quantas contribuições devem ser feitas em quais dias para exibir uma mensagem.
Especificação
- Entrada
- Cartas de suporte mais espaço (por exemplo
[A-Za-z ]
) - O espaço está em branco
3X7
- As letras são definidas nesta fonte 5x7 DOT Matrix fornecida abaixo
- O tamanho de cada letra é o retângulo delimitador mínimo (por exemplo
l = 3x7
,e = 5x5
)
- Cartas de suporte mais espaço (por exemplo
- Coloração
- Existem 5 cores
C0, C1, C2, C3, C4
CX
requerY
contribuições com3X <= y < 3(X+1)
- As letras devem alternar entre
C1
eC2
- Os espaços não têm cor
- Cada tamanho de letra deve se sobrepor exatamente a 1 coluna com letras adjacentes
- Se uma célula tiver mais de uma cor, use
C3
- Existem 5 cores
- Matriz de pontos
- A matriz de pontos é o gráfico do histórico de contribuições do Github
- Se hoje é segunda-feira, 1 de maio de 2017:
4-30 5-07 5-15
[5-01] 5-08 5-16
5-02 5-09 .
5-03 5-10 .
5-04 5-12 .
5-05 5-13
5-06 5-14
- Resultado
- Flexível sobre como isso é dado
(x, y)
paresx
é uma data maior ou igual à data atualy
é o número de contribuições a serem feitas na data,x
- Deve estar em ordem cronológica (para que eu possa preencher meu calendário)
- Se, para cada data, forem feitas as contribuições
x
fornecidasy
, a mensagem de entrada deverá aparecer no gráfico do Github (com a cor correta) - A primeira data deve ser o mais cedo possível
- Pontuação
- Menor programa / função em bytes ganha
Alfabeto
Criado por sylvan.black sob CC
Casos de teste
Para esses casos de teste, suponha que a data atual seja 25 de maio de 2017.
Input -> Output
----- ------
l 5-28-17, 3
6-3-17, 3
6-4-17, 3
6-5-17, 3
6-6-17, 3
6-7-17, 3
6-8-17, 3
6-9-17, 3
6-10-17, 3
6-17-17, 3
He 5-28-17, 3
5-29-17, 3
5-30-17, 3
5-31-17, 3
6-1-17, 3
6-2-17, 3
6-3-17, 3
6-7-17, 3
6-14-17, 3
6-21-17, 3
6-25-17, 3
6-26-17, 3
6-27-17, 3
6-28-17, 9
6-29-17, 9
6-30-17, 9
7-1-17, 3
7-4-17, 6
7-6-17, 6
7-8-17, 6
7-11-17, 6
7-13-17, 6
7-15-17, 6
7-18-17, 6
7-20-17, 6
7-22-17, 6
7-26-17, 6
7-27-17, 6
o W 5-31-17, 3
6-1-17, 3
6-2-17, 3
6-6-17, 3
6-10-17, 3
6-13-17, 3
6-17-17, 3
6-20-17, 3
6-24-17, 3
6-28-17, 3
6-29-17, 3
6-30-17, 3
7-9-17, 6
7-10-17, 6
7-11-17, 6
7-12-17, 6
7-13-17, 6
7-14-17, 6
7-22-17, 6
7-26-17, 6
7-27-17, 6
7-28-17, 6
8-5-17, 6
8-6-17, 6
8-7-17, 6
8-8-17, 6
8-9-17, 6
8-10-17, 6
8-11-17, 6
May 20th, 2017: 3
,(3,"20/5/17")
)Respostas:
JavaScript (ES6), 743 bytes
Saída é uma matriz de matrizes de 2 itens no formulário
[dateString, contribs]
. O snippet abaixo mostra como isso pode ser formatado para ser mais legível.Un-Golfed
Onde
<...>
representa a sequência de caracteres de 364 bytes que eu criei para codificar o formulário da matriz de pontos de cada letra.Explicação
A cadeia codificada:
Cada 7 caracteres é um número binário codificado em base 36 que contém o mapeamento para o caractere nesse índice. A forma binária sempre tem uma liderança
1
, a fim de preservar a liderança0
s. Por exemplo, uma maiúsculaT
mapeia paranqmi6o0
, que é convertida em1100 00001000 00011111 11100000 01000000
. Ignorando o 1 principal, cada bit é de um dia. A maioria dos números tem 5 colunas / semanas; portanto, os números com menos de 5 colunas têm um ou dois conjuntos de 7 zeros à direita que são removidos posteriormente antes da análise (.replace(/(0{7})+$/,"")
). Isso mantém todas as seqüências codificadas do mesmo comprimento, eliminando a necessidade de delimitadores.Provavelmente ainda há mais maneiras de melhorar isso, especialmente com a compressão adicional dos mapeamentos de letras, portanto, sinta-se à vontade para compartilhar idéias.
O formato binário dos mapeamentos de letras (sintaxe JS, prefixada com
0b
), pode ser encontrado aqui .Snippet básico
Exemplo interativo
Usando a biblioteca cal-heatmap , criei um mapa de calor interativo das datas que são produzidas. Isso foi usado para testar tudo enquanto trabalhava, e parece puro.
fonte