2P by neo 2달전 | ★ favorite | 댓글 1개
  • 순수 SQL로 Advent of Code 2024 도전

  • 개요

    • 필자는 올해 Advent of Code를 순수 SQL로 해결해보기로 결정했음.
    • 이 경험은 문제를 다르게 생각하도록 강요하여 흥미로웠으며, 모든 문제를 SQL로 해결할 수 있었음.
    • SQL은 의외로 사용하기에 쾌적한 경우가 많았음.
  • Day 11 예시

    • 문제 입력을 포함한 전체 솔루션을 제시함.
    • SQL에서 입력을 파싱하는 것은 약간 번거롭지만, 불가능하지는 않음.
    • 알고리듬은 비교적 짧으며, 재귀적 필드 탐색을 수행함.
    • SQL은 소규모 탐색 작업에 적합함.
  • 다른 날의 도전

    • Day 16에서는 필드의 최소 탐색 거리를 계산하는 유사한 작업을 수행함.
    • SQL로 표현하기는 쉽지만, 평가가 비효율적임.
    • 큰 입력을 처리할 때 많은 상태를 유지해야 하며, 200GB 이상의 메모리가 필요함.
    • 일부 DBMS는 이 문제를 해결할 수 있는 기능을 제공하지 않음.
  • 재귀 SQL의 한계

    • Day 23에서는 희소 그래프에서 최대 클리크를 찾아야 했음.
    • Bron-Kerbosch 알고리듬을 사용하면 되지만, 재귀 SQL로 표현하기는 복잡함.
    • 재귀 SQL은 단일 집합만 전달할 수 있어 여러 집합을 유지해야 하는 알고리듬과 충돌함.
  • 결론

    • 복잡한 알고리듬을 SQL로 코딩하는 것이 가능하며, SQL 코드가 의외로 쾌적할 수 있음.
    • 상태를 업데이트할 수 있는 메커니즘이 있다면 재귀 SQL이 더 효율적이고 사용하기 쾌적할 것임.
    • 복잡한 상태 조작 메커니즘을 도입하면 SQL이 데이터베이스 내에서 복잡한 알고리듬을 실행하는 데 있어 강력한 선택지가 될 수 있음.
Hacker News 의견
  • 새로운 메뉴 항목에 대한 반응은 욕망, 수치심, 인간의 창의력에 대한 감탄의 혼합임
  • 경력 동안 SQL을 가장 많이 작성했으며, 최근 5년 동안은 덜 사용했지만 여전히 즐거웠음
  • 반복적으로 생각하는 것을 멈추고 집합 연산으로 생각하기 시작하면 자연스럽고 강력해짐
  • Google Sheets로 AoC를 시도했으며, Day 6까지 도달했지만 일부 입력에서 문자 제한에 부딪혔음
    • 모바일에서 열지 말 것을 권장함
  • 과거에 운영직 인터뷰에서 대규모 데이터셋의 인보이스 보고서를 작성하는 문제를 받았음
    • 데이터 과학자가 아니어서 솔루션을 구성하는 데 어려움을 겪었음
    • Crystal Reports 같은 보고서 패키지를 사용했을 것이라고 설명했음
    • SQL로 문제를 해결했지만, 많은 기술이 필요함
  • EdgeQL로 AoC를 시도했으며 흥미로운 경험이었음
    • 관련 트윗을 공유함
  • SQL로 큐빙/컨테이너화 시스템을 작성했으며, 일부 추가 기능을 사용했음
    • 기본 알고리즘은 SQL의 기능과 잘 맞았음
    • 몇 가지 측면은 SQL에 맞추기 어려웠음
  • AoC2024를 Google Sheets로 작업 중이며, 이를 문서화할 계획임
  • 순수 SQL로 작업하는 것은 인상적이며, 오래된 블로그를 유지하는 것이 "니치 마스터리"를 보여줌