Objectif: cet objectif consiste à prendre une chaîne et à afficher le nombre de contributions à effectuer les jours afin d'afficher un message.
spécification
- Contribution
- Lettres d'appui plus espace (c.-à-d.
[A-Za-z ]
) - L'espace est un blanc
3X7
- Les lettres sont définies dans cette matrice DOT 5x7 police de fournie ci-dessous
- La taille de chaque lettre est le rectangle de délimitation minimal (par exemple
l = 3x7
,e = 5x5
)
- Lettres d'appui plus espace (c.-à-d.
- Coloration
- Il y a 5 couleurs
C0, C1, C2, C3, C4
CX
a besoinY
contributions avec3X <= y < 3(X+1)
- Les lettres doivent alterner entre
C1
etC2
- Les espaces n'ont pas de couleur
- Chaque taille de lettre doit chevaucher exactement 1 colonne avec des lettres adjacentes
- Si une cellule a plus d'une couleur, utilisez
C3
- Il y a 5 couleurs
- Matrice de points
- La matrice de points est le graphique de l'historique des contributions de Github
- Si aujourd'hui est le lundi 1er mai 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
- Production
- Flexible sur la façon dont cela est donné
(x, y)
pairesx
est une date supérieure ou égale à la date actuelley
est le nombre de contributions à effectuer à la date,x
- Doit être dans l'ordre chronologique (afin que je puisse remplir mon calendrier)
- Si pour chaque date,
x
lesy
contributions données sont faites, le message d'entrée doit apparaître sur le graphique Github (avec une coloration correcte) - La première date doit être la plus proche possible
- Notation
- Le programme / fonction le plus court en octets gagne
Alphabet
Créé par sylvan.black sous CC
Cas de test
Pour ces cas de test, supposons que la date actuelle est le 25 mai 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")
)Réponses:
JavaScript (ES6), 743 octets
La sortie est un tableau de tableaux à 2 éléments dans le formulaire
[dateString, contribs]
. L'extrait ci-dessous montre comment cela peut être formaté pour être plus lisible.Non-golfé
Où
<...>
représente la chaîne de caractères de 364 octets que j'ai créée pour coder la forme matricielle de chaque lettre.Explication
La chaîne encodée:
Chaque 7 caractères est un nombre binaire codé en base 36 qui contient le mappage du caractère à cet index. La forme binaire a toujours un début
1
afin de conserver le premier0
. Par exemple, une majuscule estT
mappée versnqmi6o0
, qui est convertie en1100 00001000 00011111 11100000 01000000
. En sautant le premier 1, chaque bit est un jour. La plupart des nombres ont 5 colonnes / semaines, donc les nombres avec moins de 5 colonnes ont un ou deux ensembles de 7 zéros de fin qui sont ensuite supprimés avant l'analyse (.replace(/(0{7})+$/,"")
). Cela conserve toutes les chaînes codées à la même longueur, supprimant le besoin de délimiteurs.Il y a probablement encore plus de façons d'améliorer cela, en particulier en compressant davantage les mappages de lettres, alors n'hésitez pas à partager vos idées.
Le format binaire des mappages de lettres (syntaxe JS, précédé de
0b
), peut être trouvé ici .Extrait de base
Exemple interactif
En utilisant la bibliothèque cal-heatmap , j'ai créé une heatmap interactive des dates qui sont sorties. Cela a été utilisé pour tout tester pendant le travail, et il semble tout simplement net.
la source