lc method
Implementation
Map<String,dynamic> lc(List<int> c) {
int s = c.length;
// Note that the semicolon was intentional
while (s != 0 && c[--s] == 0);
u16 cl = u16(++s);
// ind num streak
int cli = 0, cln = c[0], cls = 1;
void w(v){ cl[cli++] = v; };
for (int i = 1; i <= s; ++i) {
if (c[i] == cln && i != s){
++cls;
}
else {
if (cln == 0 && cls > 2) {
for (; cls > 138; cls -= 138){
w(32754);
}
if (cls > 2) {
w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);
cls = 0;
}
}
else if (cls > 3) {
w(cln);
--cls;
for (; cls > 6; cls -= 6){
w(8304);
}
if (cls > 2){
w(((cls - 3) << 5) | 8208);
cls = 0;
}
}
while (cls-- >= 0){
w(cln);
}
cls = 1;
cln = c[i];
}
}
return { 'c': cl.sublist(0, cli), 'n': s };
}