주간 챌린지 100

Challenge 100

작업 #1 › 즐거운 시간



작업



시간(12시간/24시간)이 주어집니다.

주어진 시간을 12시간 형식에서 24시간 형식으로 또는 그 반대로 변환하는 스크립트를 작성하십시오.

이상적으로 우리는 한 줄짜리를 기대합니다.

내 솔루션



하나의 라이너부터 시작하겠습니다.

($h,$m,$a)=($ARGV[0]=~/^(\d+):(\d+)\s*([ap]m)?$/);printf $a?("%02d:%02d",($h%12+($a eq"pm"?12:0)),$m):("%02d:%02d %s",($h%12)||12,$m,$h>=12?"pm":"am")


예, 작동합니다. 그러나 실제로 내가 하고 있는 일을 아주 자세하게 설명하지는 않습니다. 따라서 실제 제출하는 솔루션은 위의 내용을 더 자세히 설명합니다.

이제 나는 그들이 수천 년 전에 컴퓨터가 꿈도 꾸지 못했다는 것을 알았을 때 확신합니다. 이것은 불행히도 디지털 시대에 시간을 다루기 어렵게 만듭니다. 구체적으로 12:00pm은 11:59am 이후 1분입니다. 그리고 Internet time 정말 고맙게도 이륙하지 않았습니다.

이 작업을 위해 문자열을 읽고 $hour , $minute$apm (그 부분은 실제로 무엇이라고 합니까?)로 분할합니다. 그런 다음 $hour가 유효한지 확인합니다(am/pm이 지정된 경우 1-12, 지정되지 않은 경우 0-23).

그런 다음 변환된 시간을 표시하기만 하면 됩니다. 12시간에서 24시간으로 변경하는 경우 새 시간은 $hour%12 이고 표시기가 'pm'이면 12를 추가합니다. 다른 방향으로 가면 $apm 를 'pm' if $hour >= 12 로 설정합니다. 그런 다음 $hour%12 를 사용하고 새로운 시간이 0이면 12를 사용합니다. 모든 경우에 분 값은 변경되지 않은 상태로 유지됩니다.

내가 가진 한 가지 문제는 ./ch-1.pl 12:40 pm 내가 원하는 결과를 제공하지 않았다는 것입니다. @ARGV 는 실제로 12:40pm 의 두 값이기 때문입니다. ./ch-1.pl "12:40 pm"를 사용하면 이 문제가 해결됩니다(적어도 bash에서는).




» ./ch-1.pl "5:15 pm"
17:15

» ./ch-1.pl "19:15"
07:15 pm


작업 #2 › 삼각형 합



작업



삼각형 배열이 주어집니다.

위에서 아래로 최소 경로 합을 찾는 스크립트를 작성하십시오.

내 솔루션



몇 가지 기본 사항부터 시작하겠습니다.
  • 선택 항목에서 가장 작은 숫자가 가장 작은 합계보다 앞서지 않습니다. [1], [1,2], [8,9,1]를 예로 들어 보겠습니다. 이 경우 두 번째 행에서 1을 선택해도 합이 가장 작지 않습니다. 그러므로 우리는 모든 길을 걸어야 합니다.
  • 가능한 경로의 수는 2@rows - 1입니다.
  • 작업에서 언급했듯이 x 값은 왼쪽으로 이동하면 동일하게 유지되고 x + 1은 오른쪽으로 이동합니다.

  • 작업은 세 부분으로 나눌 수 있습니다.
  • 때때로 입력을 올바르게 구문 분석하는 것이 어렵습니다. 이 작업을 위해 모든 입력을 긁어모으고 정규식을 사용하여 숫자를 추출합니다. 이것이 완료되면 첫 번째 행에는 하나의 숫자가 포함되고 두 번째 행에는 두 개의 숫자가 포함되며 세 번째 행에는 세 개의 숫자가 포함되는 식입니다.
  • 그런 다음 각 경로를 걷고 가장 낮은 값을 찾습니다. 이를 위해 0에서 2$#rows-1까지의 카운터$i가 있습니다. 각 반복에 대해 이진 산술을 사용하여 왼쪽으로 걸을지 오른쪽으로 걸을지 결정합니다.
  • 최소 경로를 파악했으면 솔루션을 인쇄합니다.




  • » ./ch-2.pl "[ [1], [2,4], [6,4,9], [5,1,7,2] ]"
    1 + 2 + 4 + 1 = 8
    
    » ./ch-2.pl "[ [3], [3,1], [5,2,3], [4,3,1,3] ]"
    3 + 1 + 2 + 1 = 7
    
    

    좋은 웹페이지 즐겨찾기