50 lines
959 B
C
50 lines
959 B
C
#include <stdlib.h>
|
|
//#include <stdio.h>
|
|
int *compress_array(const int *input, int n, int *out_size){
|
|
|
|
if (input == NULL) return NULL;
|
|
|
|
int taille = 1;
|
|
for (int i = 0; i < n -1; i++) if(input[i] != input[i + 1]) taille ++;
|
|
|
|
*out_size = taille * 2;
|
|
|
|
|
|
int *rslt = malloc(*out_size * sizeof(int));
|
|
if (rslt == NULL) return NULL;
|
|
|
|
|
|
int index_rslt = 0;
|
|
int index = 0;
|
|
while(index < n){
|
|
|
|
int ch_cons = 0;
|
|
int chiffre = input[index];
|
|
|
|
while (index < n && input[index] == chiffre){
|
|
ch_cons ++;
|
|
index ++;
|
|
}
|
|
|
|
rslt[index_rslt ++] = chiffre;
|
|
rslt[index_rslt ++] = ch_cons;
|
|
|
|
}
|
|
|
|
return rslt;
|
|
|
|
}
|
|
/*
|
|
int main(){
|
|
|
|
int test[] = {3, 3, 3, 1, 1, 5, 5, 5, 5};
|
|
int sortie = 6;
|
|
int *rs = compress_array(test, 9, &sortie);
|
|
|
|
for(int i = 0; i < sortie; i++){
|
|
printf("%i;", rs[i]);
|
|
}
|
|
free(rs);
|
|
|
|
}*/
|