aboutsummaryrefslogtreecommitdiff
path: root/challenge-197/ulrich-rieke/cpp/ch-2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-197/ulrich-rieke/cpp/ch-2.cpp')
-rw-r--r--challenge-197/ulrich-rieke/cpp/ch-2.cpp73
1 files changed, 73 insertions, 0 deletions
diff --git a/challenge-197/ulrich-rieke/cpp/ch-2.cpp b/challenge-197/ulrich-rieke/cpp/ch-2.cpp
new file mode 100644
index 0000000000..e9a0dd71da
--- /dev/null
+++ b/challenge-197/ulrich-rieke/cpp/ch-2.cpp
@@ -0,0 +1,73 @@
+#include <iostream>
+#include <vector>
+#include <string>
+#include <algorithm>
+#include <utility>
+#include <map>
+
+bool myCondition( const std::vector<int> & numbers ) {
+ int len = numbers.size( ) ;
+ if ( len == 3 ) {
+ return ( (numbers[0] < numbers[1]) && ( numbers[1] > numbers[2] ) ) ;
+ }
+ if ( len > 3 ) {
+ for ( int i = 0 ; i < len - 1 ; i++ ) {
+ if ( i % 2 == 0 ) {
+ if ( ! (numbers[ i ] < numbers[ i + 1 ]) ) {
+ return false ;
+ }
+ }
+ else {
+ if ( ! (numbers[ i ] > numbers[ i + 1 ] ) ) {
+ return false ;
+ }
+ }
+ }
+ }
+ return true ;
+}
+
+void printOut( const std::vector<int> & nums ) {
+ std::cout << '(' ;
+ for ( int i : nums ) {
+ std::cout << i << ' ' ;
+ }
+ std::cout << ')' << std::endl ;
+}
+
+int main( ) {
+ std::cout << "Please enter at least 3 integers, 0 to end!\n" ;
+ std::vector<int> numbers ;
+ int num ;
+ std::cin >> num ;
+ while ( num != 0 ) {
+ numbers.push_back( num ) ;
+ std::cin >> num ;
+ }
+ while ( numbers.size( ) < 3 ) {
+ std::cout << "You should enter at least 3 numbers!\n!" ;
+ std::cin >> num ;
+ numbers.push_back( num ) ;
+ }
+ std::map<int , int> frequencies ;
+ for ( int i : numbers ) {
+ frequencies[i]++;
+ }
+ std::vector<std::pair<int , int>> thePairs ( frequencies.begin( ) ,
+ frequencies.end( ) ) ;
+ std::pair<int , int> maxPair = *std::max_element( thePairs.begin( ) ,
+ thePairs.end( ) , []( const auto & p1 , const auto & p2 ) {
+ return p1.second > p2.second ; } ) ;
+ if ( maxPair.second >= numbers.size( ) - 1 ) {
+ std::cout << "No wiggling possible!\n" ;
+ }
+ else {
+ sort( numbers.begin( ) , numbers.end( ) ) ;
+ while ( std::next_permutation( numbers.begin( ) , numbers.end( ))) {
+ if ( myCondition( numbers ) ) {
+ printOut( numbers ) ;
+ }
+ }
+ }
+ return 0 ;
+}