주간 챌린지 #080::Haskell
6048 단어 perlweeklychallengehaskell
표준 하스켈 모듈에서 Data.Set을 사용하여 작업 #1을 해결할 수 있습니다.
Set and SetHash의 Review을 읽는 동안 Raku에 PWC #076이 있다는 것을 간신히 기억합니다.
아래 코드는 하스켈에서 작업 #1의 솔루션입니다.
작업 #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..]
...
더 짧을 수 있습니다 :-)
[1..∞].first({@*ARGS.Set∌$_}).say
나는 "∞"가 실제로는 4바이트라고 생각하지만 "∌"는 "(cont).not"보다 약간 짧습니다.
하스켈에서 작업 #2를 해결하는 동안
양쪽 다 비교할 필요가 없다는 걸 깨닫고..
한 방향만 필요합니다!
작업 #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
내가 작성한 원래 코드는 다음과 같습니다.
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 )
그리고 나서.. "저게 뭐였지?""/="? (/=는 Perl/Raku의 "!="와 동일)
즉, raku에서도 코드를 줄일 수 있습니다!
sub MAIN{(|@_,|(|@_.rotor(2=>-1).grep({[!=] $_}))).elems.say}
하지만 아내는 내가 지금 웃고 있는 이유를 이해하지 못했습니다.
p.) 언젠가 CodeBlock에서 "raku"를 사용할 수 있기를 바랍니다. (지금은 "펄"을 사용하고 있습니다)
Reference
이 문제에 관하여(주간 챌린지 #080::Haskell), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jeongoon/weekly-challenge-080-2n1n텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)