Sasaran: Sasaran ini untuk mengambil string dan menampilkan berapa banyak kontribusi yang harus dilakukan pada hari mana untuk menampilkan pesan.
Spesifikasi
- Memasukkan
- Surat dukungan plus spasi (yaitu
[A-Za-z ]
) - Ruang kosong
3X7
- Huruf-huruf didefinisikan dalam font DOT Matriks 5x7 yang disediakan di bawah ini
- Ukuran setiap huruf adalah persegi panjang pembatas minimum (misalnya
l = 3x7
,e = 5x5
)
- Surat dukungan plus spasi (yaitu
- Warna
- Ada 5 warna
C0, C1, C2, C3, C4
CX
membutuhkanY
kontribusi dengan3X <= y < 3(X+1)
- Surat harus bergantian antara
C1
danC2
- Spasi tidak memiliki warna
- Setiap ukuran huruf harus tumpang tindih persis 1 kolom dengan huruf yang berdekatan
- Jika sel memiliki lebih dari 1 warna maka gunakan
C3
- Ada 5 warna
- Dot Matrix
- Matriks titik adalah grafik riwayat kontribusi Github
- Jika hari ini Senin, 1 Mei 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
- Keluaran
- Fleksibel tentang cara pemberian ini
(x, y)
berpasanganx
adalah tanggal yang lebih besar dari atau sama dengan tanggal saat iniy
adalah jumlah kontribusi yang harus dilakukan pada tanggal tersebut,x
- Harus dalam urutan kronologis (agar saya dapat mengisi kalender saya)
- Jika untuk setiap tanggal,, kontribusi yang
x
diberikany
dibuat, pesan input harus muncul pada grafik Github (dengan pewarnaan yang benar) - Tanggal pertama harus sedini mungkin
- Mencetak gol
- Program / fungsi terpendek dalam byte menang
Alfabet
Dibuat oleh sylvan.black di bawah CC
Uji Kasus
Untuk kasus uji ini, anggap tanggal saat ini adalah 25 Mei 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")
)Jawaban:
JavaScript (ES6), 743 byte
Output adalah array array 2-item dalam formulir
[dateString, contribs]
. Cuplikan di bawah ini menunjukkan bagaimana hal itu dapat diformat agar lebih mudah dibaca.Tidak Golf
Di mana
<...>
mewakili string karakter 364-byte yang saya buat untuk menyandikan bentuk dot matrix setiap huruf.Penjelasan
String yang disandikan:
Setiap 7 karakter adalah angka biner yang dienkode base-36 yang berisi pemetaan untuk karakter pada indeks itu. Bentuk biner selalu memiliki yang terdepan
1
untuk menjaga yang terdepan0
. Misalnya, huruf besarT
memetakannqmi6o0
, yang dikonversi menjadi1100 00001000 00011111 11100000 01000000
. Melewati 1 yang terkemuka, setiap bit adalah satu hari. Sebagian besar angka memiliki 5 kolom / minggu, sehingga angka dengan kurang dari 5 kolom memiliki satu atau dua set 7 trailing nol yang kemudian dihapus sebelum parsing (.replace(/(0{7})+$/,"")
). Ini menjaga agar semua string yang disandikan memiliki panjang yang sama, menghilangkan kebutuhan akan pembatas.Mungkin masih ada lebih banyak cara untuk memperbaiki hal ini, terutama dengan mengompres pemetaan surat lebih lanjut, jadi jangan ragu untuk berbagi ide.
Format biner dari pemetaan huruf (sintaks JS, diawali dengan
0b
), dapat ditemukan di sini .Cuplikan Dasar
Contoh interaktif
Menggunakan perpustakaan cal-heatmap , saya membuat peta panas interaktif dari tanggal yang dihasilkan. Ini digunakan untuk menguji semuanya saat bekerja, dan itu hanya terlihat rapi.
sumber