주간 챌린지 116
3023 단어 perlweeklychallengeperl
기운
Perl Conference 이번 주인데 저도 기대되는 연사들이 많습니다. 나는 노력을 지원하기 위해 티켓을 가지고 있지만 너무 많은 라이브를 시청하지 않을 것입니다. 이벤트는 오전 1시 - 오전 8시(AEST)입니다.
이번주 과제로 넘어갑니다.
숫자는 무엇입니까?
거리에서 낯선 사람에게(물론 코비드 방식으로!) 1에서 6 사이의 숫자를 고르라고 요청하면 그들은 6가지 대답(1, 2, 3, 4, 5 또는 6) 중 하나를 말할 것입니다. 절대 3.4 또는 2.6이 아닙니다. 이것은 Numb3rs의 에피소드에 등장했습니다. 우리는 프로그래머이고 다르게 생각합니다. 따라서 작업에서 숫자가 언급될 때마다 저는 항상 정수가 아닌 경우를 고려합니다. 아니요, 생각하지 않습니다 complex numbers :P
작업 #1 › 번호 시퀀스
일
당신에게 주어진 숫자는 $N
>= 10입니다.
두 개의 연속 숫자 사이의 차이가 항상 1이고 앞에 0이 없어야 하는 주어진 숫자를 분할하는 스크립트를 작성하십시오.
숫자를 나눌 수 없는 경우 주어진 숫자를 인쇄하십시오.
내 솔루션
첫째, 스트레이트 포워드 비트. 1에서 숫자의 길이까지 $length
라는 루프가 있습니다. 이 루프 내에는 배열@sequence
이 있습니다. 배열은 첫 번째$length
숫자로 시작하고 시퀀스의 모든 숫자 길이가 입력 길이보다 크거나 같을 때까지 배열에 다음 숫자를 추가합니다. 숫자가 일치하면 해결책이 있습니다. 그렇지 않으면 $length
를 늘리고 다시 시도합니다.
그러나 숫자910.011
도 유효한 솔루션(9, 10.0, 11)인 것으로 보입니다. 이 숫자의 차이는 항상 1이며 선행 0이 없습니다. 이hack
는 소수점 뒤의 숫자가 0이거나 단일 값이 있는 경우에만 작동합니다.
이를 기반으로 코드에 정규식\.0+
(하나 이상의 0이 뒤따르는 점)이 코드에 나타나는 상황을 처리하기 위해 코드에 몇 가지 추가 논리가 있습니다. 제가 너무 과하게 생각한 것일 수도 있고, 의도적인 것일 수도 있습니다.
Colin이 이번 주Perl review에서 언급했듯이 "텍스트의 모호성이 주어지면 충분한 사람과 충분한 시간이 주어지면 모든 가능한 위치가 결국 목격될 것입니다. 그것은 이제 나에게 주어진 것입니다."
예
$ ./ch-1.pl 1234
1,2,3,4
$ ./ch-1.pl 91011
9,10,11
$ ./ch-1.pl 10203
10203
$ ./ch-1.pl 910.011
9,10.0,11
작업 #2 › 제곱합
일
당신에게 주어진 숫자는 $N
>= 10입니다.
주어진 숫자$N
가 모든 자릿수의 제곱의 합이 완전제곱인지 알아내는 스크립트를 작성하십시오. 그렇지 않은 경우 인쇄1
0
.
내 솔루션
이것은 비교적 간단합니다. 숫자가 정수가 아니면 소수점을 제거합니다. 이것은 이 작업의 목적을 위해 서버를 사용하지 않습니다($N >= 10이라고 가정).
코드sum( map { $_**2 } split //, $number )
를 사용하여 모든 숫자의 제곱을 찾을 수 있습니다. 이 코드는 숫자를 구분하고 제곱을 구하고 모든 결과를 합산합니다.
그런 다음 sqrt
함수를 사용하여 합계의 제곱근을 얻습니다. 이것이 정수이면 1
를 출력하고, 그렇지 않으면 0
를 출력합니다.
예
$ ./ch-2.pl 34
1
$ ./ch-2.pl 50
1
$ ./ch-2.pl 52
0
$ ./ch-2.pl 30.4
1
Reference
이 문제에 관하여(주간 챌린지 116), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/simongreennet/weekly-challenge-116-1mf7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
거리에서 낯선 사람에게(물론 코비드 방식으로!) 1에서 6 사이의 숫자를 고르라고 요청하면 그들은 6가지 대답(1, 2, 3, 4, 5 또는 6) 중 하나를 말할 것입니다. 절대 3.4 또는 2.6이 아닙니다. 이것은 Numb3rs의 에피소드에 등장했습니다. 우리는 프로그래머이고 다르게 생각합니다. 따라서 작업에서 숫자가 언급될 때마다 저는 항상 정수가 아닌 경우를 고려합니다. 아니요, 생각하지 않습니다 complex numbers :P
작업 #1 › 번호 시퀀스
일
당신에게 주어진 숫자는 $N
>= 10입니다.
두 개의 연속 숫자 사이의 차이가 항상 1이고 앞에 0이 없어야 하는 주어진 숫자를 분할하는 스크립트를 작성하십시오.
숫자를 나눌 수 없는 경우 주어진 숫자를 인쇄하십시오.
내 솔루션
첫째, 스트레이트 포워드 비트. 1에서 숫자의 길이까지 $length
라는 루프가 있습니다. 이 루프 내에는 배열@sequence
이 있습니다. 배열은 첫 번째$length
숫자로 시작하고 시퀀스의 모든 숫자 길이가 입력 길이보다 크거나 같을 때까지 배열에 다음 숫자를 추가합니다. 숫자가 일치하면 해결책이 있습니다. 그렇지 않으면 $length
를 늘리고 다시 시도합니다.
그러나 숫자910.011
도 유효한 솔루션(9, 10.0, 11)인 것으로 보입니다. 이 숫자의 차이는 항상 1이며 선행 0이 없습니다. 이hack
는 소수점 뒤의 숫자가 0이거나 단일 값이 있는 경우에만 작동합니다.
이를 기반으로 코드에 정규식\.0+
(하나 이상의 0이 뒤따르는 점)이 코드에 나타나는 상황을 처리하기 위해 코드에 몇 가지 추가 논리가 있습니다. 제가 너무 과하게 생각한 것일 수도 있고, 의도적인 것일 수도 있습니다.
Colin이 이번 주Perl review에서 언급했듯이 "텍스트의 모호성이 주어지면 충분한 사람과 충분한 시간이 주어지면 모든 가능한 위치가 결국 목격될 것입니다. 그것은 이제 나에게 주어진 것입니다."
예
$ ./ch-1.pl 1234
1,2,3,4
$ ./ch-1.pl 91011
9,10,11
$ ./ch-1.pl 10203
10203
$ ./ch-1.pl 910.011
9,10.0,11
작업 #2 › 제곱합
일
당신에게 주어진 숫자는 $N
>= 10입니다.
주어진 숫자$N
가 모든 자릿수의 제곱의 합이 완전제곱인지 알아내는 스크립트를 작성하십시오. 그렇지 않은 경우 인쇄1
0
.
내 솔루션
이것은 비교적 간단합니다. 숫자가 정수가 아니면 소수점을 제거합니다. 이것은 이 작업의 목적을 위해 서버를 사용하지 않습니다($N >= 10이라고 가정).
코드sum( map { $_**2 } split //, $number )
를 사용하여 모든 숫자의 제곱을 찾을 수 있습니다. 이 코드는 숫자를 구분하고 제곱을 구하고 모든 결과를 합산합니다.
그런 다음 sqrt
함수를 사용하여 합계의 제곱근을 얻습니다. 이것이 정수이면 1
를 출력하고, 그렇지 않으면 0
를 출력합니다.
예
$ ./ch-2.pl 34
1
$ ./ch-2.pl 50
1
$ ./ch-2.pl 52
0
$ ./ch-2.pl 30.4
1
Reference
이 문제에 관하여(주간 챌린지 116), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/simongreennet/weekly-challenge-116-1mf7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ ./ch-1.pl 1234
1,2,3,4
$ ./ch-1.pl 91011
9,10,11
$ ./ch-1.pl 10203
10203
$ ./ch-1.pl 910.011
9,10.0,11
일
당신에게 주어진 숫자는
$N
>= 10입니다.주어진 숫자
$N
가 모든 자릿수의 제곱의 합이 완전제곱인지 알아내는 스크립트를 작성하십시오. 그렇지 않은 경우 인쇄1
0
.내 솔루션
이것은 비교적 간단합니다. 숫자가 정수가 아니면 소수점을 제거합니다. 이것은 이 작업의 목적을 위해 서버를 사용하지 않습니다($N >= 10이라고 가정).
코드
sum( map { $_**2 } split //, $number )
를 사용하여 모든 숫자의 제곱을 찾을 수 있습니다. 이 코드는 숫자를 구분하고 제곱을 구하고 모든 결과를 합산합니다.그런 다음
sqrt
함수를 사용하여 합계의 제곱근을 얻습니다. 이것이 정수이면 1
를 출력하고, 그렇지 않으면 0
를 출력합니다.예
$ ./ch-2.pl 34
1
$ ./ch-2.pl 50
1
$ ./ch-2.pl 52
0
$ ./ch-2.pl 30.4
1
Reference
이 문제에 관하여(주간 챌린지 116), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/simongreennet/weekly-challenge-116-1mf7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)