aboutsummaryrefslogtreecommitdiff
path: root/challenge-074/ulrich-rieke/cpp/ch-2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-074/ulrich-rieke/cpp/ch-2.cpp')
-rw-r--r--challenge-074/ulrich-rieke/cpp/ch-2.cpp38
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 ;
+}