lc method

Map<String, dynamic> lc(
  1. List<int> c
)

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 };
}