Skip to content
Snippets Groups Projects
hexavigesimal.cpp 971 B
Newer Older
Jan Trávníček's avatar
Jan Trávníček committed
/*
 * hexavigesimal.cpp
Jan Trávníček's avatar
Jan Trávníček committed
 *
 * Created on: 19. 4. 2014
 * Author: Tomas Pecka
Jan Trávníček's avatar
Jan Trávníček committed
 */

Jan Trávníček's avatar
Jan Trávníček committed
#include <hexavigesimal>
Jan Trávníček's avatar
Jan Trávníček committed
#include <stdexcept>
Jan Trávníček's avatar
Jan Trávníček committed

namespace std {

Jan Trávníček's avatar
Jan Trávníček committed
unsigned fromBase26( string rep ) {
	unsigned n = 0;
	for(char repSymbol : rep ) {
		unsigned remainder = repSymbol - 'A';
		if(remainder > 26)
Jan Trávníček's avatar
Jan Trávníček committed
			throw std::invalid_argument(rep);
Jan Trávníček's avatar
Jan Trávníček committed
		n = n * 26 + remainder;
	}

	return n;
}

Jan Trávníček's avatar
Jan Trávníček committed
string toBase26( unsigned n ) {
Jan Trávníček's avatar
Jan Trávníček committed
	string name;
	do {
Jan Trávníček's avatar
Jan Trávníček committed
		name += ( char )( n % 26 + 'A' );
		n = n / 26;
	} while (n > 0);
Jan Trávníček's avatar
Jan Trávníček committed

	return string( name.rbegin( ), name.rend( ) );
}

Jan Trávníček's avatar
Jan Trávníček committed
unsigned bijectiveFromBase26(string rep) {
	unsigned n = 0;
	for (char repSymbol : rep ) {
		unsigned remainder = repSymbol - 'A';
		if(remainder > 26)
			throw std::invalid_argument(rep);
		n = n * 26 + remainder + 1;
	}
	return n;
}

string bijectiveToBase26(unsigned n) {
	string name;
	while(n > 0) {
		--n;
		name += (char) (n % 26 + 'A');
		n /= 26;
	}
	return string(name.rbegin(), name.rend());
}

Jan Trávníček's avatar
Jan Trávníček committed
} /* namespace std */