#include <iostream>
#include <cmath>
#include <string>
#include <bitset>
using namespace std;
void Compress(string, int *, int);
float calcAverage(int *, int);
int main(){
const static int bitLength=8;
int *data = new int[int(pow(2,bitLength))];//declare memory
for(int i=0; i<pow(2,bitLength); i++){//cycle through each binary item
data[i]=bitLength;
Compress(std::bitset<bitLength>( i ).to_string(), data, i);
//uncomment the line underneath to see workings
//cout << std::bitset<bitLength>( i ).to_string() << " Has Length of " << data[i] << ", ";
}
int Average = calcAverage(data, int(pow(2,bitLength)));
cout << "Average length is " << Average << " Over " << pow(2,bitLength) << ' ' << bitLength << " bit numbers"<< endl;
return 0;
}
void Compress(string in, int *data, int upTo){
char current='z';
for(int i=0; i<in.length(); i++){
if(in[i] == current){
data[upTo]--;
}else{
data[upTo]++;
current=in[i];
}
}
}
float calcAverage(int *Data, int arraySize){
int Total=0;
for(int i=0; i<arraySize; i++){
Total+=Data[i];
}
return float(Total/arraySize);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoJI2luY2x1ZGUgPGNtYXRoPgoJI2luY2x1ZGUgPHN0cmluZz4KCSNpbmNsdWRlIDxiaXRzZXQ+CgoJdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCgl2b2lkIENvbXByZXNzKHN0cmluZywgaW50ICosIGludCk7CglmbG9hdCBjYWxjQXZlcmFnZShpbnQgKiwgaW50KTsKCglpbnQgbWFpbigpewoJCWNvbnN0IHN0YXRpYyBpbnQgYml0TGVuZ3RoPTg7CgoJCWludCAqZGF0YSA9IG5ldyBpbnRbaW50KHBvdygyLGJpdExlbmd0aCkpXTsvL2RlY2xhcmUgbWVtb3J5CgoJCWZvcihpbnQgaT0wOyBpPHBvdygyLGJpdExlbmd0aCk7IGkrKyl7Ly9jeWNsZSB0aHJvdWdoIGVhY2ggYmluYXJ5IGl0ZW0KCQkJZGF0YVtpXT1iaXRMZW5ndGg7CgkJCUNvbXByZXNzKHN0ZDo6Yml0c2V0PGJpdExlbmd0aD4oIGkgKS50b19zdHJpbmcoKSwgZGF0YSwgaSk7CgoJCQkvL3VuY29tbWVudCB0aGUgbGluZSB1bmRlcm5lYXRoIHRvIHNlZSB3b3JraW5ncwoJCQkvL2NvdXQgPDwgc3RkOjpiaXRzZXQ8Yml0TGVuZ3RoPiggaSApLnRvX3N0cmluZygpIDw8ICIgSGFzIExlbmd0aCBvZiAiIDw8IGRhdGFbaV0gPDwgIiwgIjsKCQl9CgoJCWludCBBdmVyYWdlID0gY2FsY0F2ZXJhZ2UoZGF0YSwgaW50KHBvdygyLGJpdExlbmd0aCkpKTsKCgkJY291dCA8PCAiQXZlcmFnZSBsZW5ndGggaXMgIiA8PCBBdmVyYWdlIDw8ICIgT3ZlciAiIDw8IHBvdygyLGJpdExlbmd0aCkgPDwgJyAnIDw8IGJpdExlbmd0aCA8PCAiIGJpdCBudW1iZXJzIjw8IGVuZGw7CgoKCQlyZXR1cm4gMDsKCX0KCgl2b2lkIENvbXByZXNzKHN0cmluZyBpbiwgaW50ICpkYXRhLCBpbnQgdXBUbyl7CgkJY2hhciBjdXJyZW50PSd6JzsKCQlmb3IoaW50IGk9MDsgaTxpbi5sZW5ndGgoKTsgaSsrKXsKCQkJaWYoaW5baV0gPT0gY3VycmVudCl7CgkJCQlkYXRhW3VwVG9dLS07CgkJCX1lbHNlewoJCQkJZGF0YVt1cFRvXSsrOwoJCQkJY3VycmVudD1pbltpXTsKCQkJfQoJCX0KCX0KCglmbG9hdCBjYWxjQXZlcmFnZShpbnQgKkRhdGEsIGludCBhcnJheVNpemUpewoJCWludCBUb3RhbD0wOwoJCWZvcihpbnQgaT0wOyBpPGFycmF5U2l6ZTsgaSsrKXsKCQkJVG90YWwrPURhdGFbaV07CgkJfQoKCQlyZXR1cm4gZmxvYXQoVG90YWwvYXJyYXlTaXplKTsKCX0=