주간 챌린지 #082 태스크 #1::(Raku)
작업 #1 › 공통 요소
제출자: Niels van Dijke
두 개의 양수 $M과 $N이 주어집니다.
주어진 숫자의 모든 공통 요소를 나열하는 스크립트를 작성하십시오.
예 1:
Input:
$M = 12
$N = 18
Output:
(1, 2, 3, 6)
Explanation:
Factors of 12: 1, 2, 3, 4, 6
Factors of 18: 1, 2, 3, 6, 9
Example 2:
Input:
$M = 18
$N = 23
Output:
(1)
Explanation:
Factors of 18: 1, 2, 3, 6, 9
Factors of 23: 1
생각보다 정말 쉬웠어요... 더 쉽다고 생각하는 작업 #2와는 정반대입니다.
N = 1000이 주어지면 아래와 같은 일련의 제수를 얻을 수 있습니다.
> [ 1 .. 1000 ].grep({ 1000 %% $_ })
(1 2 4 5 8 10 20 25 40 50 100 125 200 250 500 1000)
원하는 경우 for 루프 또는 "gather and take"을 사용할 수 있습니다.
두 제수를 모두 찾는 작업이 끝나면 다음을 생성할 수 있습니다.
교차를 포함하는 집합
> [ 1 .. 12 ].grep({ 12 %% $_ }) (&) [ 1..18 ].grep({ 18 %% $_ })
Set(1 2 3 6)
값만 가져옵니다.
([ 1 .. 12 ].grep({ 12 %% $_ }) (&) [ 1..18 ].grep({ 18 %% $_ })).keys.sort
(1 2 3 6)
infix (&), infix ∩
이 Challenge #076 Task #2에서 볼 수 있듯이 code 동안 "∩"중위사를 사용했습니다.
나는 Raku에서 this perl code과 같은 것을 썼습니다. 하지만 "Set"을 사용하면 큰 차이나 약간 빠른 차이를 볼 수 없었습니다. 😂 그래서 "raku가 더 빠른 것을 주면 왜 내 코드를 사용해야합니까?"라고 생각하여 간단한 줄로 변경했습니다. 아주 편리한 연산자!!
gcd 중위
그러나 우리는 Raku에 gcd가 있으므로 두 제수를 모두 만들 필요가 없습니다.
with [gcd] (12,18) { [ 1..$_ ].grep(-> \k { $_ %% k }) }
(1 2 3 6)
최종 코드
sub MAIN ( *@n where { @n.elems == 2 and @n.all ~~ Int and @n.all > 0 } ) {
with [gcd] @n {
say( [1.. $_].grep(-> \k {$_ %% k}));
}
}
여전히 확실하지 않은 경우 "any"를 사용할 수 있습니다.
sub MAIN ( *@n where { @n.elems == 2 and @n.all ~~ Int and @n.all > 0 } ) {
say( [1.. @n.min].grep({any(@n)%%$_}) );
}
읽어주셔서 감사합니다~!
Reference
이 문제에 관하여(주간 챌린지 #082 태스크 #1::(Raku)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jeongoon/weekly-challenge-082-task-1-raku-gg1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)