void swap(char *a, char *b) {
char t = *a;
*a = *b, *b = t;
}
void reverse(char *a, char *b) {
while (a < b) {
swap(a++, --b);
}
}
int compress(char *chars, int charsSize) {
int write = 0, left = 0;
for (int read = 0; read < charsSize; read++) {
if (read == charsSize - 1 || chars[read] != chars[read + 1]) {
chars[write++] = chars[read];
int num = read - left + 1;
if (num > 1) {
int anchor = write;
while (num > 0) {
chars[write++] = num % 10 + '0';
num /= 10;
}
reverse(&chars[anchor], &chars[write]);
}
left = read + 1;
}
}
return write;
}