코드 2021의 출현 - 첫째 날

다시 시작하겠습니다. 오늘 새로운 코드의 등장이 시작되었습니다. 챌린지에 도전하여 크리스마스 전에 모든 작업을 해결할 계획입니다(일부는 출판일보다 늦게 해결되더라도).

순위표에서 내 위치에 대해서는 그다지 신경 쓰지 않습니다. 나는 경쟁력 있는 프로그래머가 아니며, 준전문적으로라도 그런 일을 하는 사람과는 어울리지 않습니다. 즉, 나는 적어도 한 점을 얻는 것을 꺼리지 않을 것입니다;)

새로운 프로그래밍 언어(최근에 Scala가 눈에 띕니다)를 시도하고 싶은 유혹이 있지만 지금은 Python을 고수하기로 결정했습니다. 저는 Python 프로그래머가 아니기 때문에 제 코드가 관용적이지 않을 것이라고 확신합니다. 그럼에도 불구하고 저는 때때로 이 언어를 만지작거리는 것을 좋아합니다. 이 이벤트는 일부 지식을 새로 고치고(지난 AoC 이후로 Python으로 작업할 기회가 많지 않았음) 새로운 것을 배울 수 있는 깔끔한 방법입니다.

더 이상 고민하지 않고 today’s solution을 살펴보겠습니다. 작업을 찾을 수 있으므로here 복사하여 붙여넣지 않겠습니다.

import fileinput

def parse():
return [int(l) for l in fileinput.input()]

def task1(input):
    previous_depth = None
    total_deeper = 0

    for depth in input:
        if previous_depth and depth > previous_depth:
            total_deeper += 1
        previous_depth = depth

    return total_deeper

def task2(input):
    previous_depth = None
    total_deeper = 0

    triplets = [input[i:i+3] for i in range(0, len(input))]
    for triplet in triplets:
        depth = sum(triplet)

        if previous_depth and depth > previous_depth:
            total_deeper += 1

        previous_depth = depth

    return total_deeper

input = parse()

print(task1(input))
print(task2(input))



몇 가지 설명:
  • fileinput는 작년에 발견한 니트module입니다. 파일이나 stdin에서 더 쉽게 읽을 수 있습니다.
  • parse() - 처음에는 목록에 추가하는 루프가 있었습니다. 그래도 목록 이해력이 훨씬 좋아 보입니다. 조금 더 빠를 수도 있지만 그런 의견을 내는 것은 조심스럽습니다. 그리고 여기서 중요한 것은 아닙니다.
  • task1() - 그녀의 첫 번째 작업에 대한 솔루션입니다. 매우 필수적이며 아마도 그다지 비단뱀적이지는 않을 것입니다. 그러나 작동합니다. 루프에서 이전 깊이를 알아야 하므로 previous_depth 변수를 사용하고 루프에서 비교합니다. 현재 값이 previous_depth 보다 크면 카운터를 증가시킵니다. 루프가 완료되면 우리도 완료된 것입니다.
  • task2() - 작업 2는 첫 번째 작업과 매우 유사하지만 이제 3개 측정 슬라이딩 윈도우에서 작동합니다. 내가 처음에 가지고 있었던 빠르고 더러운 해결책은 range(len(input)) 및 sum input[i] + input[i + 1] + input[i + 2] 을 반복하는 것입니다. 여기서 주의할 점은 인덱스가 범위를 벗어날 수 있으므로 이에 대해 보호해야 한다는 것입니다. 이 솔루션이 그다지 마음에 들지 않아 목록 이해로 변경했습니다. 훨씬 깔끔해 보이지만 비 Python 개발자가 파악하기가 약간 더 어려울 수 있습니다.

  • 오늘의 순위: 2694/2855. 나는 주의 깊게 읽지 않았고 첫 번째 부분에서 일대일 오류를 범했습니다. 1분 내내 기다리는 것은 고통스러운 일이고, 그것이 내 순위를 크게 악화시킨 것 같습니다.

    내일 무엇을 가져오는지 봅시다!

    좋은 웹페이지 즐겨찾기