## DEV Community

Myoungjin Jeon

Posted on • Updated on

# Weekly Challenge #080 :: Haskell

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

and I'm barely remember there is a Set and SetHash in Raku during reading Review of PWC #076

``````...
{- 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"

I realise that I don't need to compare in both way..
need just one direction!

``````
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!

``````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)