From faf3bf138a80f64536a792015dc2e3725ee67d72 Mon Sep 17 00:00:00 2001 From: Mohammad S Anwar Date: Tue, 18 Aug 2020 09:40:22 +0100 Subject: - Added solutions by Ulrich Riekek. --- challenge-074/ulrich-rieke/cpp/ch-2.cpp | 38 ++++++++++++++++++++++++++++++ challenge-074/ulrich-rieke/haskell/ch-1.hs | 11 +++++++++ challenge-074/ulrich-rieke/perl/ch-1.pl | 35 +++++++++++++++++++++++++++ challenge-074/ulrich-rieke/perl/ch-2.pl | 35 +++++++++++++++++++++++++++ challenge-074/ulrich-rieke/raku/ch-1.raku | 28 ++++++++++++++++++++++ challenge-074/ulrich-rieke/raku/ch-2.raku | 32 +++++++++++++++++++++++++ 6 files changed, 179 insertions(+) create mode 100644 challenge-074/ulrich-rieke/cpp/ch-2.cpp create mode 100644 challenge-074/ulrich-rieke/haskell/ch-1.hs create mode 100644 challenge-074/ulrich-rieke/perl/ch-1.pl create mode 100644 challenge-074/ulrich-rieke/perl/ch-2.pl create mode 100644 challenge-074/ulrich-rieke/raku/ch-1.raku create mode 100644 challenge-074/ulrich-rieke/raku/ch-2.raku (limited to 'challenge-074') 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 +#include +#include +#include + +int main( int argc , char * argv[] ) { + std::string s( argv[ 1 ] ) ; + std::map 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 = ; + chomp $number ; + while ( $number ne "end" ) { + if ( $number =~ /\d+/ ) { + push( @array, $number ) ; + } + print "Enter a number ( end to end ) :\n" ; + $number = ; + 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 ; +} -- cgit