GN⁺: Advent of Code 2024
(adventofcode.com)-
Eric Wastl이 만든 Advent of Code는 다양한 프로그래밍 퍼즐을 제공하는 온라인 이벤트로, 여러 프로그래밍 언어로 해결 가능함.
-
인터뷰 준비, 회사 교육, 대학 과제, 연습 문제, 속도 대회 등 다양한 목적으로 사용됨.
-
컴퓨터 과학 배경이 없어도 약간의 프로그래밍 지식과 문제 해결 능력만 있으면 참여 가능함.
-
일반 팁
- 문제를 해결하다 막히면 퍼즐에 제공된 예제를 사용하여 해결책을 검증할 수 있음.
- 예제가 작동하지 않으면 설명을 다시 읽고, 프로그램이 예상대로 작동하는지 확인해야 함.
- 여전히 해결되지 않으면 친구에게 도움을 요청하거나 나중에 다시 시도할 수 있음.
-
자주 묻는 질문
- 코드 블록을 선택하려면 JavaScript가 활성화된 상태에서 코드 블록을 세 번 클릭하면 됨.
- Advent of Code는 OAuth를 사용하여 인증을 처리하며, 사용자의 개인 정보는 공개된 정보 외에는 노출되지 않음.
- 글로벌 리더보드에 참여할지 여부는 개인의 목표에 따라 결정할 수 있음.
- 퍼즐의 난이도는 이벤트 기간 동안 다양하게 변하며, 개인의 기술 수준에 따라 다르게 느껴질 수 있음.
- 퍼즐은 자정(EST/UTC-5)에 열리며, 이는 운영자가 안정적으로 관리할 수 있는 시간임.
- 사이트의 텍스트가 읽기 어려운 경우 고대비 모드를 사용할 수 있음.
- 퍼즐 아이디어는 법적 문제로 인해 받지 않음.
- 퍼즐에 버그가 있다고 생각되면 서브레딧에서 먼저 질문할 수 있음.
- 솔루션을 스트리밍할 때는 다른 사람들이 경쟁 중일 때는 피하는 것이 좋음.
- AI를 사용하여 글로벌 리더보드에 오르는 것은 권장되지 않음.
-
크레딧
- 퍼즐, 코드, 디자인: Eric Wastl
- 베타 테스트: Tim Giannetti, Ben Lucek, JP Burke, Aneurysm9, Andrew Skalski
- 커뮤니티 매니저: Danielle Lucek, Aneurysm9
-
법적 고지
- Advent of Code는 미국에서 등록된 상표이며, 디자인 요소, 언어, 스타일, 개념은 Advent of Code의 소유임.
- 퍼즐을 링크하거나 참조하는 것은 가능하지만, Advent of Code의 일부를 복사하거나 재배포하는 것은 금지됨.
Hacker News 의견
- Go 언어를 사용한 지 4년째이며, 이 언어가 문제 해결에 적합하지 않음을 느끼고 있음. 표준 라이브러리에 기본 데이터 구조가 부족하고, 컴파일된 언어치고는 속도가 느림
- AoC를 사랑하며, 지난 2-3년 동안 Rust로 도전했음. 디스코드에서 가장 빠른 솔루션을 찾기 위해 다양한 성능 최적화와 고급 알고리즘, SIMD를 배웠음
- 이번에는 Rust와 Golang으로 도전하며, Golang을 좋아하거나 참을 수 있게 되거나, 아니면 Golang이 별로라는 가설을 증명하려고 함
- 25일 동안 점점 복잡해지는 입력 파서를 작성하는 도전이 다시 시작됨
- 올해는 NES(Nintendo Entertainment System)에서 도전할 예정임
- 제한된 RAM(2KiB, 카트리지에 추가 8KiB 가능)으로 인해 일부 문제는 불가능할 수 있지만 최대한 많이 해결해볼 계획임
- 오늘의 문제는 카트리지에 4KiB 추가 RAM을 사용하여 4초 이내에 해결 가능했음
- 올해의 도전은 표준 라이브러리나 할당자 없이 C로 작성하여 STM32에서 실행 가능하게 하는 것임
- 2년 전에는 어셈블리로 시도했으나, 어셈블리 표준 라이브러리를 작성하는 데 많은 시간을 소비한 후 포기하고 Rust로 전환했음
- 보통은 Common Lisp으로 AoC를 하지만, 올해는 Swift를 시도 중임
- 정적 타입의 주류 언어치고는 이런 작업에 나쁘지 않음
- Swift AoC 코드
- 올해는 새로운 직장에서 이벤트를 조직하는 중이었는데, 새로운 상사와 함께 일할 수 없다는 것을 깨닫고 떠나야 했음
- 개발자들이 프레임워크를 조합하는 대신 실제 문제 해결을 배우는 것이 매우 유용하다고 생각함
- 결국 평소처럼 Emacs와 함께 할 것 같음
- 전체 문제를 해결했으며, 이는 비즈니스 문제임. 단지 수석 역사가를 교체하면 됨
- Common Lisp과 C 표준 라이브러리로 도전하는 사람들이 있는 반면, 데이터 파일을 다운로드하기 위해 curl 호출을 시도 중임
- 작년에는 12일째에서 일주일 동안 막혀 있었고, 해결 방법을 고민하는 데 모든 시간을 소비했음. 올해는 스스로에게 친절하게 대하며 참여하지 않고 겨울 휴식을 즐길 계획임
- 올해는 F#과 Gleam으로 도전할 예정이지만, 매년 그렇듯이 10-12일 이상 할 시간과 정신이 없을 것 같음
- Python 사용자들에게 F#을 시도해보라고 권장함: 스크립팅과 매우 유사하게 느껴질 수 있으며 훌륭한 REPL도 제공함