diff --git a/alib2algo/src/string/generate/RandomStringFactory.cpp b/alib2algo/src/string/generate/RandomStringFactory.cpp index b09850e9746c9cd3fda43f7bbe614d35ad7f49ea..91a6d35daa9ac059cb88ce31b8224354a6199869 100644 --- a/alib2algo/src/string/generate/RandomStringFactory.cpp +++ b/alib2algo/src/string/generate/RandomStringFactory.cpp @@ -17,6 +17,20 @@ namespace string { namespace generate { +string::LinearString RandomStringFactory::generateLinearString ( size_t size, size_t alphabetSize, bool randomizedAlphabet, bool integerSymbols ) { + if ( !integerSymbols ) return generateLinearString ( size, alphabetSize, randomizedAlphabet ); + + if ( alphabetSize <= 0 ) + throw exception::AlibException ( "Alphabet size must be greater than 0." ); + + std::vector < alphabet::Symbol > elems; + + for ( size_t i = 0; i < size; i++ ) + elems.push_back ( alphabet::symbolFrom ( static_cast < int > ( std::random_devices::semirandom ( ) % alphabetSize ) ) ); + + return string::LinearString ( elems ); +} + string::LinearString RandomStringFactory::generateLinearString ( size_t size, size_t alphabetSize, bool randomizedAlphabet ) { if ( alphabetSize > 26 ) throw exception::AlibException ( "Too big alphabet." ); diff --git a/alib2algo/src/string/generate/RandomStringFactory.h b/alib2algo/src/string/generate/RandomStringFactory.h index 7b5e784efbff84ee9c1a9ba4adc9daf55088f433..39f1a8e3945aa047b46dd68b463c69f259da9c0e 100644 --- a/alib2algo/src/string/generate/RandomStringFactory.h +++ b/alib2algo/src/string/generate/RandomStringFactory.h @@ -17,6 +17,7 @@ namespace generate { class RandomStringFactory { public: + static string::LinearString generateLinearString ( size_t size, size_t alphabetSize, bool randomizedAlphabet, bool integerSymbols ); static string::LinearString generateLinearString ( size_t size, size_t alphabetSize, bool randomizedAlphabet ); static string::LinearString generateLinearString ( size_t size, std::set < alphabet::Symbol > alphabet ); }; diff --git a/arand2/src/arand.cpp b/arand2/src/arand.cpp index 0d796fd892943f5b6bab531b1633eb32007feeb3..19a66ba1023c9deb6aed8891d5241baef3ca297c 100644 --- a/arand2/src/arand.cpp +++ b/arand2/src/arand.cpp @@ -41,6 +41,9 @@ int main ( int argc, char * argv[] ) { TCLAP::ValueArg < int > alphabetSize ( "", "terminals", "Number of terminals/alphabet size", false, 3, "integer" ); cmd.add ( alphabetSize ); + TCLAP::SwitchArg integerSymbols ( "", "integerSymbols", "Use integer symbols instead of char symbols", false ); + cmd.add ( integerSymbols ); + TCLAP::SwitchArg randomizedAlphabet ( "", "randomizedTerminals", "Number of terminals/alphabet size", false ); cmd.add ( randomizedAlphabet ); @@ -127,7 +130,7 @@ int main ( int argc, char * argv[] ) { } else if ( type.getValue ( ) == "ST" ) { measurements::start ( "Algorithm", measurements::Type::MAIN ); - string::LinearString res = string::generate::RandomStringFactory::generateLinearString ( length.getValue ( ), alphabetSize.getValue ( ), randomizedAlphabet.getValue ( ) ); + string::LinearString res = string::generate::RandomStringFactory::generateLinearString ( length.getValue ( ), alphabetSize.getValue ( ), randomizedAlphabet.getValue ( ), integerSymbols.getValue ( ) ); measurements::end ( ); measurements::start ( "Output write", measurements::Type::AUXILIARY );