diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-08-18 09:40:22 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-08-18 09:40:22 +0100 |
| commit | faf3bf138a80f64536a792015dc2e3725ee67d72 (patch) | |
| tree | 55fed43441c960396a2866c88191489d8f1fcb86 /challenge-074/ulrich-rieke/cpp/ch-2.cpp | |
| parent | 597ede4ae4126dee5142a83e6999d80e3b6e3685 (diff) | |
| download | perlweeklychallenge-club-faf3bf138a80f64536a792015dc2e3725ee67d72.tar.gz perlweeklychallenge-club-faf3bf138a80f64536a792015dc2e3725ee67d72.tar.bz2 perlweeklychallenge-club-faf3bf138a80f64536a792015dc2e3725ee67d72.zip | |
- Added solutions by Ulrich Riekek.
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 ; +} |
