aboutsummaryrefslogtreecommitdiff
path: root/challenge-074/ulrich-rieke/cpp/ch-2.cpp
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-08-18 09:40:22 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-08-18 09:40:22 +0100
commitfaf3bf138a80f64536a792015dc2e3725ee67d72 (patch)
tree55fed43441c960396a2866c88191489d8f1fcb86 /challenge-074/ulrich-rieke/cpp/ch-2.cpp
parent597ede4ae4126dee5142a83e6999d80e3b6e3685 (diff)
downloadperlweeklychallenge-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.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 ;
+}