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