diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-10-04 14:50:06 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-04 14:50:06 +0100 |
| commit | 32ed5e8623e96f35526851f913cb078e4126b3bd (patch) | |
| tree | 2322c561c0704539bd5f5128fb9d1f63f2993107 | |
| parent | d77288220b012398f773c15136c631f44a9eb02d (diff) | |
| parent | c968277b34cbd8c950128796b46576db53a9c2fc (diff) | |
| download | perlweeklychallenge-club-32ed5e8623e96f35526851f913cb078e4126b3bd.tar.gz perlweeklychallenge-club-32ed5e8623e96f35526851f913cb078e4126b3bd.tar.bz2 perlweeklychallenge-club-32ed5e8623e96f35526851f913cb078e4126b3bd.zip | |
Merge pull request #2445 from ccntrq/challenge-080
Challenge 080
| -rw-r--r-- | challenge-080/alexander-pankoff/README | 10 | ||||
| -rw-r--r-- | challenge-080/alexander-pankoff/haskell/ch-1.hs | 27 | ||||
| -rw-r--r-- | challenge-080/alexander-pankoff/perl/ch-1.pl | 18 | ||||
| -rw-r--r-- | challenge-080/alexander-pankoff/perl/ch-2.pl | 41 |
4 files changed, 93 insertions, 3 deletions
diff --git a/challenge-080/alexander-pankoff/README b/challenge-080/alexander-pankoff/README index f1aacf3dba..a74e2fd1ec 100644 --- a/challenge-080/alexander-pankoff/README +++ b/challenge-080/alexander-pankoff/README @@ -1,6 +1,10 @@ Solution by Alexander Pankoff -# ch-1 +# Run the Haskell solution -Aproach taken from: -https://www.geeksforgeeks.org/count-total-set-bits-in-all-numbers-from-1-to-n/ +With a `ghc` installation you can run the haskell solution with `runghc` + +``` +$ runghc haskell/ch-1.hs 1 2 3 -1 4 +5 +``` diff --git a/challenge-080/alexander-pankoff/haskell/ch-1.hs b/challenge-080/alexander-pankoff/haskell/ch-1.hs new file mode 100644 index 0000000000..d27f32fdd7 --- /dev/null +++ b/challenge-080/alexander-pankoff/haskell/ch-1.hs @@ -0,0 +1,27 @@ +import System.Environment (getArgs) +import Data.List (find) +import qualified Data.Set as Set + +type IntegerSet = Set.Set Integer + +main :: IO () +main = do + inputSet <- Set.fromList <$> (readInteger <<$>> getArgs) + let maybeMissing = smallestMissingPositiveNumber inputSet + maybe + (fail "no smallest missing number found.") + print + maybeMissing + where + readInteger :: String -> Integer + readInteger = read + +smallestMissingPositiveNumber :: IntegerSet -> Maybe Integer +smallestMissingPositiveNumber set = find (not . inSet) [1..] + where + inSet = (`Set.member` set) + +infixl 4 <<$>> + +(<<$>>) :: (Functor f, Functor g) => (a -> b) -> f (g a) -> f (g b) +(<<$>>) = fmap . fmap diff --git a/challenge-080/alexander-pankoff/perl/ch-1.pl b/challenge-080/alexander-pankoff/perl/ch-1.pl new file mode 100644 index 0000000000..d6ef9089ee --- /dev/null +++ b/challenge-080/alexander-pankoff/perl/ch-1.pl @@ -0,0 +1,18 @@ +#!/usr/bin/env perl +use v5.20; +use utf8; +use strict; +use warnings; +use autodie; +use feature qw(say signatures); +no warnings 'experimental::signatures'; + +use List::Util qw(first); + +say smallest_positive_number_missing(@ARGV); + +sub smallest_positive_number_missing( @xs) { + my %lookup = map { $_ => 1 } @xs; + return first { !$lookup{$_} } 1 .. ( @xs + 1 ); +} + diff --git a/challenge-080/alexander-pankoff/perl/ch-2.pl b/challenge-080/alexander-pankoff/perl/ch-2.pl new file mode 100644 index 0000000000..b30e3c2cf0 --- /dev/null +++ b/challenge-080/alexander-pankoff/perl/ch-2.pl @@ -0,0 +1,41 @@ +#!/usr/bin/env perl +use v5.20; +use utf8; +use strict; +use warnings; +use autodie; +use feature qw(say signatures); +no warnings 'experimental::signatures'; + +use List::Util qw(max sum0); + +say count_candies(@ARGV); + +sub count_candies(@candidates) { + my $descending; + my @candies; + for my $i ( 0 .. $#candidates ) { + + if ( $i > 0 && $candidates[ $i - 1 ] < $candidates[$i] ) { + $candies[$i] = $candies[ $i - 1 ] + 1; + } + else { + $candies[$i] = 1; + } + + if ( $i < $#candidates && $candidates[$i] > $candidates[ $i + 1 ] ) { + $descending++; + } + else { + while ($descending) { + my $candies = $descending + 1; + if ( $candies[ $i - $descending ] < $candies ) { + $candies[ $i - $descending ] = $candies; + } + $descending--; + } + } + } + return sum0(@candies); +} + |
