Objetivo: este objetivo es tomar una cadena y generar cuántas contribuciones se deben hacer en qué días para mostrar un mensaje.
Especificación
- Entrada
- Letras de apoyo más espacio (es decir
[A-Za-z ]
) - El espacio es un espacio en blanco
3X7
- Las letras se definen en esta fuente DOT Matrix 5x7 que se proporciona a continuación
- El tamaño de cada letra es el rectángulo límite mínimo (por ejemplo
l = 3x7
,e = 5x5
)
- Letras de apoyo más espacio (es decir
- Colorante
- Hay 5 colores
C0, C1, C2, C3, C4
CX
requiereY
contribuciones con3X <= y < 3(X+1)
- Las letras deben alternar entre
C1
yC2
- Los espacios no tienen color
- Cada tamaño de letra debe superponerse exactamente 1 columna con letras adyacentes
- Si una celda tiene más de 1 color, use
C3
- Hay 5 colores
- Matriz de puntos
- La matriz de puntos es el gráfico del historial de contribuciones de Github
- Si hoy es lunes 1 de mayo 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
- Salida
- Flexible sobre cómo se da esto
(x, y)
paresx
es una fecha mayor o igual a la fecha actualy
es el número de contribuciones que se realizarán en la fecha,x
- Debe estar en orden cronológico (para que pueda completar mi calendario)
- Si para cada fecha, se realizan las contribuciones
x
dadasy
, el mensaje de entrada debe aparecer en el gráfico de Github (con el color correcto) - La primera fecha debe ser lo antes posible
- Puntuación
- El programa / función más corto en bytes gana
Alfabeto
Creado por sylvan.black bajo CC
Casos de prueba
Para estos casos de prueba, suponga que la fecha actual es el 25 de mayo 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")
)Respuestas:
JavaScript (ES6), 743 bytes
La salida es una matriz de matrices de 2 elementos en el formulario
[dateString, contribs]
. El fragmento a continuación muestra cómo se puede formatear para que sea más legible.Sin golf
Donde
<...>
representa la cadena de caracteres de 364 bytes que creé para codificar la forma de matriz de puntos de cada letra.Explicación
La cadena codificada:
Cada 7 caracteres es un número binario codificado en base 36 que contiene la asignación para el carácter en ese índice. La forma binaria siempre tiene un encabezado
1
para preservar el0
s principal . Por ejemplo, una mayúscula seT
asigna anqmi6o0
, que se convierte a1100 00001000 00011111 11100000 01000000
. Saltando el primer 1, cada bit es un día. La mayoría de los números tienen 5 columnas / semanas, por lo que los números con menos de 5 columnas tienen uno o dos conjuntos de 7 ceros finales que luego se eliminan antes de analizar (.replace(/(0{7})+$/,"")
). Esto mantiene todas las cadenas codificadas de la misma longitud, eliminando la necesidad de delimitadores.Probablemente todavía haya más formas de mejorar esto, especialmente al comprimir aún más las asignaciones de letras, así que siéntase libre de compartir cualquier idea.
El formato binario de las asignaciones de letras (sintaxis JS, con el prefijo
0b
), se puede encontrar aquí .Fragmento Básico
Ejemplo interactivo
Usando la biblioteca cal-heatmap , creé un mapa de calor interactivo de las fechas de salida. Esto se usó para probar todo mientras trabajaba, y se ve simplemente ordenado.
fuente