> 백엔드 개발 > 파이썬 튜토리얼 > 코드데이 몽키마켓의 출현

코드데이 몽키마켓의 출현

Linda Hamilton
풀어 주다: 2024-12-31 21:08:09
원래의
423명이 탐색했습니다.

Advent of Code  Day  Monkey Market

22일차: 원숭이 시장

GitHub 저장소

오늘 퍼즐은 꽤 간단해서 꽤 즐거웠습니다. 수행해야 할 많은 작업은 지침에 있었습니다. 즉, 정수 조작과 간단한 합계(적어도 1부에서는) 등이 있었습니다.

1부

코드는 매우 간단합니다. 루프를 2,000번 수행하고 매번 새 비밀번호를 저장할 때마다 이를 요약할 수 있습니다.

2부

그래 이번 건 두뇌력이 좀 더 필요했지만, 역시 지침에 논리가 많이 포함되어 있었습니다.

가장 큰 차이점 중 하나는 calc_price_changes() 함수입니다. 이 함수는 일련의 숫자를 처리하고 "가격 변동"을 계산하여 패턴을 식별합니다.

더 자세히 살펴보겠습니다.

calc_price_changes 함수:

  1. '생성된 비밀' 목록을 처리합니다.

  2. "가격"(각 비밀의 마지막 숫자)의 변화를 계산합니다.

  3. 4회 연속 변화의 고유 패턴을 식별합니다.

4.이러한 패턴을 기준으로 점수를 집계합니다.

두 가지 인수가 필요합니다.
고유한 패턴에 대한 점수를 저장하고 집계하기 위한 숫자 목록(생성된 비밀을 나타냄)과 사전과 유사한 객체(defaultdictcr)입니다.

defaultdict는 매우 유용한 도구입니다. 이는 일반 사전처럼 작동하지만 중요한 이점이 있습니다. 사전에서 키를 찾지 못하면 키 생성 및 전달된 유형의 기본값 할당을 처리합니다.

4의 시퀀스 변화 찾기

for p in range(len(price_change_sequence) - 4 + 1):
    changes = price_change_sequence[p: p + 4]
    key = tuple((changes[0][0], changes[1][0], changes[2][0], changes[3][0]))
    if key not in sequences:
        sequence_sum[key] += changes[3][1]
        sequences.add(key)
로그인 후 복사

위 코드는 슬라이딩 윈도우 4를 사용하여 4개의 연속된(변경, 가격) 튜플 그룹을 추출합니다.

예: 가격 변경_순서가 [(1, 5), (2, 7), (-1, 6), (3, 9)]인 경우 하나의 "청크"는 [(1, 5), (2, 7), (-1, 6), (3, 9)].

그런 다음 4-튜플에서 변경 값만 추출합니다(예: -2,-1,1 등). 패턴이 아직 시퀀스에 없으면 새 패턴이므로 마지막 가격(변경 사항[ 3][1])을 시퀀스_합[패턴]으로 변경합니다. 키를 시퀀스 세트에 추가하여 처리된 것으로 표시합니다.

행사 종료 시:

sequence_sum에는 고유한(세트를 사용한) 4가지 변경 패턴을 집계된 점수(각 시퀀스의 최종 가격 기준)에 매핑하는 내용이 포함되어 있습니다.

예: {(1, 2, -1, 3): 9, (-2, 0, 1, -1): 6}.

연습


라는 입력이 있다고 가정해 보겠습니다.

generated_secrets = [45, 46, 50, 53, 58, 61]
sequence_sum = defaultdict(int)
calc_price_changes(generated_secrets, sequence_sum)
로그인 후 복사

단계:
1.가격 변동 계산:
가격: [5, 6, 0, 3, 8, 1] (마지막 숫자)
변경 사항: [(1, 6), (-6, 0), (3, 3), (5, 8), (-7, 1)]

  1. 4가지 변화 패턴 추출: (1, -6, 3, 5) → 시퀀스_합계에 8(패턴의 마지막 가격)을 더합니다. (-6, 3, 5, -7) → 시퀀스_합에 1을 더합니다.

출력:
{(1, -6, 3, 5): 8, (-6, 3, 5, -7): 1}

마무리

전체 내용은 다음과 같습니다.

입력 처리: 입력 내용을 읽어 비밀번호 목록으로 변환했습니다.

시퀀스 생성: 각 비밀에 대해 2000세대에 걸쳐 반복적으로 진화하여 일련의 파생 값을 생성합니다.

가격 변화 분석: 시퀀스의 연속된 가격(마지막 숫자) 간의 차이를 계산하고 고유한 4가지 변화 패턴을 식별하고 해당 패턴에 대한 집계 점수를 계산했습니다.

결과 추출: 마지막으로 집계 점수가 가장 높은 패턴을 찾아 가장 영향력 있는 패턴을 결정했습니다.

문제를 명확한 모듈식 단계로 나누어 효율적으로 데이터를 처리하고 패턴을 추적하고 퍼즐을 풀었습니다.

늘 그렇듯이 이것이 도움이 되기를 바랍니다. 여러분도 제 솔루션에서 뭔가를 배웠을 것입니다. 자유롭게 팔로우하거나 Twitter에 문의하세요

위 내용은 코드데이 몽키마켓의 출현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿