DEV Community

Myoungjin Jeon
Myoungjin Jeon

Posted on • Edited on

1

Weekly Challenge #080 :: Haskell

While I solving PWC #080 with haskell, I realised that there are simpler way to solve with Raku as well.

I could solve task #1 with Data.Set in standard haskell module.
and I'm barely remember there is a Set and SetHash in Raku during reading Review of PWC #076

code below is my solution of task #1 in haskell

Task #1

...
{- tested with:
runhaskell ch-1.hs 5 -2 2 0
-}

smallestPostiveNumber ints = -- result "1" with empty list
  (head.dropWhile (isJust.((flip Set.lookupIndex) (Set.fromList ints)))) [1..]
...

and my previous raku solution can be even shorter :-]

[1..].first({@*ARGS.Set$_}).say

I believe that "∞" is actually 4bytes but "∌" is little shorter than "(cont).not"

and while I'm solving task #2 in haskell
I realise that I don't need to compare in both way..
need just one direction!

Task #2


countCandies []    = 0
countCandies ranks = defaultCandies + extraCandies
  where
    leftGroup = init ranks
    rightGroup = tail ranks
    defaultCandies = length ranks
    extraCandies =
      sum $ zipWith (\l r -> if l /= r then 1 else 0) leftGroup rightGroup

The original code I wrote is something like

    extraCandies1 =
      sum ( zipWith (\l r -> if l < r then 1 else 0) leftGroup rightGroup )
    extraCandies2 =
      sum ( zipWith (\l r -> if l > r then 1 else 0) leftGroup rightGroup )

and then.. I thought "what was that? isn't is just "/="? (/= is same as "!=" in Perl/Raku)

which means I could shorten the code in raku as well!

Original task #2 post

sub MAIN{(|@_,|(|@_.rotor(2=>-1).grep({[!=] $_}))).elems.say}

but my wife didn't understand why I'm smiling now.
p.s) I hope I could use "raku" in CodeBlock one day. (I'm using "perl" now)

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more