코드 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분 내내 기다리는 것은 고통스러운 일이고, 그것이 내 순위를 크게 악화시킨 것 같습니다.
내일 무엇을 가져오는지 봅시다!
Reference
이 문제에 관하여(코드 2021의 출현 - 첫째 날), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/amroz/advent-of-code-2021-day-1-kcj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)