주간 챌린지 079

그래서 The Weekly Challenge 을 3개월 만에 README.md 파일을 작성하는 것보다 블로그를 제대로 해야 할 때라고 판단했습니다. 나는 내 자신의 블로그를 호스팅하고 싶지 않았기 때문에 dev.to를 언급한 Dave의 Blogging for Perl 게시물을 읽은 후 이것을 사용하고 있습니다.

작업에.

작업 #1 › 세트 비트 카운트



Perl의 TIMTOWTDI 철학에 따라 두 가지 솔루션을 제시했습니다.

first solution은 숫자를 살펴보고 각 값을 이진 값으로 변환하고(sprintf '%b' 사용) 문자열에서 1의 개수(tr/// 사용)를 계산합니다.

second solution에는 1에서 시작하고 각 실행을 두 배로 늘리는 이진 카운터가 있습니다. 그런 다음 숫자를 살펴보고 value & binary이 참이면 카운터에 추가합니다.

첫 번째 숫자가 훨씬 더 빠릅니다. i7 NUC에서 천만으로 계산할 때 첫 번째 솔루션은 19초가 걸렸고 두 번째 솔루션은 79초가 걸렸습니다.

왜 1000000007의 계수를 계산해야 하는지 잘 모르겠지만 어쨌든 그렇게 했습니다.




» ./ch1a.pl 3
4 % 1000000007 = 4

» ./ch1a.pl 4
5 % 1000000007 = 5

» time ./ch1a.pl 100000000
1314447116 % 1000000007 = 314447109

real    0m19.881s
user    0m19.878s
sys     0m0.000s

» time ./ch1b.pl 100000000
1314447116 % 1000000007 = 314447109

real    1m19.270s
user    1m19.251s
sys     0m0.005s


작업 #2 › 갇힌 빗물



Solution

이것은 Challenge 075의 두 번째 작업과 매우 유사합니다. 사실 해당 작업에서 인쇄 히스토그램 코드를 복사하고 추가하여 · s로 채우기를 표시합니다.

논리도 이전 작업과 유사합니다. 이 작업을 위해 첫 번째와 마지막 열을 제외한 각 열을 통해 작업했습니다. 각 열에 대해 다음 방법을 사용하여 저장할 수 있는 물의 단위 수를 계산했습니다.
  • 왼쪽 열의 최대값을 계산합니다.
  • 오른쪽 열의 최대값을 계산합니다.
  • 위의 두 값 중 최소값을 취하십시오.
  • 높이를 뺍니다. 물의 단위는 솔루션입니다(> 0인 경우)




  • » ./ch2.pl 2 1 4 1 2 5
    5           #
    4     # · · #
    3     # · · #
    2 # · # · # #
    1 # # # # # #
    - - - - - - -
      2 1 4 1 2 5
    
    Result is 6
    
    » ./ch2.pl 3 1 3 1 1 5
    5           #
    4           #
    3 # · # · · #
    2 # · # · · #
    1 # # # # # #
    - - - - - - -
      3 1 3 1 1 5
    
    Result is 6
    

    좋은 웹페이지 즐겨찾기