> 백엔드 개발 > 파이썬 튜토리얼 > 마지막으로 내 FSM 라이브러리에 대한 응용 프로그램입니다! 코드의 출현 11화

마지막으로 내 FSM 라이브러리에 대한 응용 프로그램입니다! 코드의 출현 11화

Linda Hamilton
풀어 주다: 2025-01-21 20:12:14
원래의
852명이 탐색했습니다.

이 Advent of Code 퍼즐은 단순해 보이는 전제를 교묘하게 위장한 매혹적인 도전을 제시했습니다. 내 솔루션은 다양한 접근 방식을 탐색하여 FSM(Finite State Machine) 라이브러리 사용의 효율성과 우아함 사이의 절충점을 강조했습니다.

이 퍼즐에는 돌을 나타내는 일련의 숫자를 조작하고 숫자의 속성(값, 자릿수)에 따라 세 가지 변환 규칙을 적용하는 것이 포함되었습니다. 처음에는 규칙을 코드로 직접 변환하는 순진한 솔루션을 구현했습니다. 여기에는 짝수 숫자를 나누고, 0을 증가시키고, 2024년까지 다른 숫자를 곱하는 함수가 포함되었습니다. 이러한 변환은 toolz.pipeitertools.repeat을 사용하여 함께 연결되어 변환의 반복 적용인 "깜박임" 프로세스를 시뮬레이션했습니다. 25번 깜박여야 하는 파트 1의 솔루션은 간단했습니다.

그러나 퍼즐의 설명에서는 잠재적인 최적화를 미묘하게 암시했습니다. 스톤 오더 보존을 강조하면서 두 파트 모두 깜박임 이후 스톤의 개수만 요청했습니다. 이러한 관찰을 통해 보다 효율적인 접근 방식이 탄생했습니다. 개별 돌을 추적하는 대신 toolz.merge_with을 사용하여 개수를 집계하여 깜박일 때마다 최종 돌 개수를 직접 계산했습니다. 이 개수 기반 솔루션은 특히 Part 2의 75번 깜박임 성능을 크게 향상시켰습니다.

설명 목적으로(그리고 내 라이브러리를 테스트하기 위해) FSM 라이브러리 Genstates를 사용하여 솔루션도 구현했습니다. 여기에는 보호 조건(각 변환 규칙을 확인하는 함수) 및 작업(변환 함수 자체) 정의가 포함되었습니다. Genstates은 돌 변환을 상태 전환으로 모델링하는 것을 허용했습니다. 이 접근 방식은 문제의 논리를 명확하게 표현했지만 조건 검사의 단락을 허용하지 않는 라이브러리 설계로 인해 개수 기반 방법보다 효율성이 떨어지는 것으로 나타났습니다. 각 단계의 모든 조건을 철저하게 확인하는 성격이 성능에 영향을 미쳤습니다.

순진한 솔루션, 카운트 기반 솔루션, FSM 기반 솔루션 간의 비교에서는 최적의 성능을 위해 올바른 알고리즘과 데이터 구조를 선택하는 것이 중요하다는 점을 강조했습니다. 개수 기반 접근 방식은 특히 많은 반복에서 다른 접근 방식보다 확실히 뛰어난 성능을 보였습니다. FSM 구현은 우아하면서도 주로 Genstates' 기능을 시연하는 역할을 했습니다.

돌 순서에 관한 퍼즐의 미묘한 잘못된 방향은 흥미로운 복잡성을 더해 문제 설명의 모든 측면을 신중하게 고려하는 것의 중요성에 대한 성찰을 촉발했습니다.

Finally, an application for my FSM library! Advent of Code ay 11 Microsoft Copilot이 생성한 매우 신비로운 그림

Finally, an application for my FSM library! Advent of Code ay 11 석재 변형을 보여주는 상태 기계 다이어그램

저자는 입사 지원 시 부과되는 시간 제약을 언급하고 코딩 관행과 프로젝트 선택에 영향을 미치는 현실 세계의 압박을 강조하면서 결론을 내립니다.

위 내용은 마지막으로 내 FSM 라이브러리에 대한 응용 프로그램입니다! 코드의 출현 11화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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