diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-08-18 09:40:22 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-08-18 09:40:22 +0100 |
| commit | faf3bf138a80f64536a792015dc2e3725ee67d72 (patch) | |
| tree | 55fed43441c960396a2866c88191489d8f1fcb86 /challenge-074 | |
| parent | 597ede4ae4126dee5142a83e6999d80e3b6e3685 (diff) | |
| download | perlweeklychallenge-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.cpp | 38 | ||||
| -rw-r--r-- | challenge-074/ulrich-rieke/haskell/ch-1.hs | 11 | ||||
| -rw-r--r-- | challenge-074/ulrich-rieke/perl/ch-1.pl | 35 | ||||
| -rw-r--r-- | challenge-074/ulrich-rieke/perl/ch-2.pl | 35 | ||||
| -rw-r--r-- | challenge-074/ulrich-rieke/raku/ch-1.raku | 28 | ||||
| -rw-r--r-- | challenge-074/ulrich-rieke/raku/ch-2.raku | 32 |
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 ; +} |
