aboutsummaryrefslogtreecommitdiff
path: root/challenge-074
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
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')
-rw-r--r--challenge-074/ulrich-rieke/cpp/ch-2.cpp38
-rw-r--r--challenge-074/ulrich-rieke/haskell/ch-1.hs11
-rw-r--r--challenge-074/ulrich-rieke/perl/ch-1.pl35
-rw-r--r--challenge-074/ulrich-rieke/perl/ch-2.pl35
-rw-r--r--challenge-074/ulrich-rieke/raku/ch-1.raku28
-rw-r--r--challenge-074/ulrich-rieke/raku/ch-2.raku32
6 files changed, 179 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 ;
+}
diff --git a/challenge-074/ulrich-rieke/haskell/ch-1.hs b/challenge-074/ulrich-rieke/haskell/ch-1.hs
new file mode 100644
index 0000000000..c4a1f17d30
--- /dev/null
+++ b/challenge-074/ulrich-rieke/haskell/ch-1.hs
@@ -0,0 +1,11 @@
+module Challenge074
+ where
+import Data.List( sortOn , group , sort )
+
+solution :: [Int] -> Int
+solution list
+ |maxFreq > floor ((fromIntegral $ length list ) / 2 ) = head $ last sortedList
+ |otherwise = -1
+ where
+ sortedList = sortOn length $ group $ sort list
+ maxFreq = length $ last sortedList
diff --git a/challenge-074/ulrich-rieke/perl/ch-1.pl b/challenge-074/ulrich-rieke/perl/ch-1.pl
new file mode 100644
index 0000000000..046bbe008d
--- /dev/null
+++ b/challenge-074/ulrich-rieke/perl/ch-1.pl
@@ -0,0 +1,35 @@
+#!/usr/bin/perl ;
+use strict ;
+use warnings ;
+use feature 'say' ;
+
+sub enterArray {
+ my @array ;
+ print "Enter a number ( end to end ) :\n" ;
+ my $number = <STDIN> ;
+ chomp $number ;
+ while ( $number ne "end" ) {
+ if ( $number =~ /\d+/ ) {
+ push( @array, $number ) ;
+ }
+ print "Enter a number ( end to end ) :\n" ;
+ $number = <STDIN> ;
+ chomp $number ;
+ }
+ return @array ;
+}
+
+my @array = enterArray( ) ;
+my %frequencies ;
+my $len = scalar @array ;
+while ( @array ) {
+ $frequencies{ shift @array }++ ;
+}
+my @sorted = sort { $frequencies{ $b } <=> $frequencies{ $a } } keys
+%frequencies ;
+if ( $frequencies{ $sorted[ 0 ] } > int( $len / 2 ) ) {
+ say $sorted[ 0 ] ;
+}
+else {
+ say -1 ;
+}
diff --git a/challenge-074/ulrich-rieke/perl/ch-2.pl b/challenge-074/ulrich-rieke/perl/ch-2.pl
new file mode 100644
index 0000000000..ba696bf350
--- /dev/null
+++ b/challenge-074/ulrich-rieke/perl/ch-2.pl
@@ -0,0 +1,35 @@
+#!/usr/bin/perl ;
+use strict ;
+use warnings ;
+use feature 'say' ;
+
+my $S = $ARGV[ 0 ] ;
+my %letterfrequencies ;
+my $FNR ;
+my @letters = split( // , $S ) ;
+while ( @letters ) {
+ my $currentLetter = shift @letters ;
+ $letterfrequencies{ $currentLetter }++ ;
+ if ( $letterfrequencies{ $currentLetter } == 1 ) {
+ $FNR .= $currentLetter ;
+ }
+ if ( $letterfrequencies{ $currentLetter } > 1 ) {
+ my @uniqueLetters = grep { $letterfrequencies{ $_ } == 1 }
+ keys %letterfrequencies ;
+ my $len = scalar @uniqueLetters ;
+ if ( $len == 1 ) {
+ $FNR .= $uniqueLetters[ 0 ] ;
+ }
+ if ( $len > 1 ) {
+ my $i = length $FNR - 1 ;
+ while ( $letterfrequencies{ substr( $FNR , $i , 1 ) } != 1 ) {
+ $i-- ;
+ }
+ $FNR .= substr( $FNR , $i , 1 ) ;
+ }
+ if ( $len == 0 ) {
+ $FNR .= "#" ;
+ }
+ }
+}
+say $FNR ;
diff --git a/challenge-074/ulrich-rieke/raku/ch-1.raku b/challenge-074/ulrich-rieke/raku/ch-1.raku
new file mode 100644
index 0000000000..31abad4b99
--- /dev/null
+++ b/challenge-074/ulrich-rieke/raku/ch-1.raku
@@ -0,0 +1,28 @@
+use v6 ;
+
+sub enterArray( ) {
+ my @array ;
+ my $element = prompt "Enter a list element: (end to end) : " ;
+ while ( $element ne "end" ) {
+ if ( +$element ~~ Int ) {
+ @array.push( $element ) ;
+ $element = prompt "Enter a list element: (end to end) : " ;
+ }
+ }
+ return @array ;
+}
+
+my @A = enterArray( ) ;
+my $len = @A.elems ;
+my %howmany ;
+while ( @A ) {
+ %howmany{ @A.shift }++ ;
+}
+my $majority = floor( $len / 2 ) ;
+my @sorted = %howmany.keys.sort( { %howmany{ $^b } <=> %howmany{ $^a } } ) ;
+if ( %howmany{@sorted[ 0 ]} > $majority ) {
+ @sorted[0].say ;
+}
+else {
+ say -1 ;
+}
diff --git a/challenge-074/ulrich-rieke/raku/ch-2.raku b/challenge-074/ulrich-rieke/raku/ch-2.raku
new file mode 100644
index 0000000000..640decdc7a
--- /dev/null
+++ b/challenge-074/ulrich-rieke/raku/ch-2.raku
@@ -0,0 +1,32 @@
+use v6 ;
+
+sub MAIN( Str $S ) {
+ my %letterfrequencies ;
+ my $FNR ;
+ my @letters = $S.comb ;
+ while ( @letters ) {
+ my $currentLetter = @letters.shift ;
+ %letterfrequencies{ $currentLetter }++ ;
+ if ( %letterfrequencies{ $currentLetter } == 1 ) {
+ $FNR ~= $currentLetter ;
+ }
+ if ( %letterfrequencies{ $currentLetter } > 1 ) {
+ my @uniqueLetters = %letterfrequencies.keys.grep( {
+ %letterfrequencies{$_} == 1 } ) ;
+ #how many unique letters did we find ?
+ my $number_of_FNR = @uniqueLetters.elems ;
+ #if we find only 1 unique letter, we add it at the end of $FNR
+ given $number_of_FNR {
+ when 1 { $FNR ~= @uniqueLetters[ 0 ] }
+ #if we find more than 1 unique letter we go back in the $FNR string
+ #until we get to a letter that occurred only once at that pos.
+ when * > 1 { my $len = $FNR.chars ;
+ my $i = $len - 1 ;
+ repeat { $i-- } until ( $FNR.substr( $i , 1 ) (elem)
+ @uniqueLetters.Set ) ; $FNR ~= $FNR.substr( $i , 1 ) }
+ when 0 { $FNR ~= '#' }
+ }
+ }
+ }
+ say $FNR ;
+}