diff options
Diffstat (limited to 'challenge-074/ulrich-rieke/cpp/ch-2.cpp')
| -rw-r--r-- | challenge-074/ulrich-rieke/cpp/ch-2.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/challenge-074/ulrich-rieke/cpp/ch-2.cpp b/challenge-074/ulrich-rieke/cpp/ch-2.cpp new file mode 100644 index 0000000000..ad6fc7d1c2 --- /dev/null +++ b/challenge-074/ulrich-rieke/cpp/ch-2.cpp @@ -0,0 +1,38 @@ +#include <string> +#include <map> +#include <algorithm> +#include <iostream> + +int main( int argc , char * argv[] ) { + std::string s( argv[ 1 ] ) ; + std::map<char, int> frequencies ; + int len = s.length( ) ; + std::string fnr ; + for ( int i = 0 ; i < len ; i++ ) { + frequencies[ s[i] ]++ ; + if ( frequencies[ s[i] ] == 1 ) + fnr.push_back( s.at( i ) ) ; + if ( frequencies[ s[i] ] > 1 ) { + int singleletters = std::count_if( frequencies.begin( ) , + frequencies.end( ) , []( auto & p ) { return p.second == 1 ; }) ; + if ( singleletters == 1 ) { + auto iter = std::find_if( frequencies.begin( ) , frequencies.end( ) , + []( const auto & p ) { return p.second == 1 ; } ) ; + fnr.push_back( iter->first ) ; + } + if ( singleletters == 0 ) { + fnr.push_back( '#' ) ; + } + if ( singleletters > 1 ) { + int fnrlength = fnr.length( ) ; + int i = fnrlength - 1 ; + while ( frequencies[ fnr[ i ] ] != 1 ) { + i-- ; + } + fnr.push_back( fnr[ i ] ) ; + } + } + } + std::cout << fnr << '\n' ; + return 0 ; +} |
