Spiiin's blog

Advent of Code

Advent of code — сайт с задачками по программированию, которые открываются с 1 по 25 декабря. Удобен чтобы попробовать новые языки программирования, да и просто задачки интересные бывают.

В прошлом году я пробовал решать задачки на F# - решил первые 12 простых, проглядел решения на этом же языке от более опытных участников, чтобы ознакомиться с идиомами (скрипт выкачки решений), и также после решения скармливал условия ИИ, чтобы проверить, как он решает их, и улучшить свои решения. ИИ смог решить почти все.

Дальше надоело, но задачки второй половины оказались интересными, поэтому постепенно в течение года дорешал и их, на языковом зоопарке, что было под рукой в разное время:

📍 F# - 14
📍 C# - 5
📍 Python - 3
📍 Rust - 2
📍 VL - 1

  • Попробовал Rust после статьи, по лаконичности синтаксиса действительно в простых скриптах напоминает Python Elegant Library APIs in Rust. Ну и сравнить с ocaml решением отсюда
  • Одну из задач попробовал решить с помощью constraint solving, проверить статью Many Hard Leetcode Problems are Easy Constraint Problems. На самом деле кодом оказывается удобнее, даже для таких простых олимпиадных задачек количество ограничений быстро разрастается.
  • Одну задачку решил на VL в VVVV - системе для креативного программирования на .NET. Непривычно, визуальное программирование заставляет заново прикидывать, как работают базовые конструкции. Код выглядит так:
  • GPT-5 к концу года может решить все задачки, но признаётся, что знает их (на текст условия прямо отвечает, что знает “Отлично, это классика из AoC-2024 Day 21”), так что тут непонятно, есть ли прогресс относительно начала года, или просто модель уже обучена на этих задачах.

Интересные задачки, на мой вкус

📍 Day 12: Garden Groups - в первой части нужно разбить поле на участки и посчитать их площадь и периметр, вторая часть добавляет подсчёт сторон каждого участков, что неожиданно сложнее и интереснее.
📍 Day 14: Restroom Redoubt - первая часть — симуляция движения нескольких роботов, вторая - найти шаг в симуляции, когда роботы выстраиваются в ascii-изображение ёлки, конкретный пример изображения не даётся (в симуляции несколько тысяч шагов). Можно решить используя системы поиска стеганографии, или просто в предположении, что ствол в ascii будет прямой линией.
📍 Day 15: Warehouse Woes - симуляция робота, который двигает ящики на поле со стенками. Вторая часть — единственная, которую не может решить ChatGPT (стартовое условие усложняется тем, что допускаются ящики размером больше одной клетки).
📍 Day 17: Chronospatial Computer - на первом шаге нужно сделать эмулятор выдуманной виртуальной машины, на втором — определить начальные состояния регистров виртуальной машины, на которых программа выведет свой исходный текст (станет куайном). Для решения нужно понять, что именно делает программа, чтобы подстроить вход под её логику определенным образом.
📍 Day 24: Crossed Wires - симуляция логической схемы из логических вентилей. Во второй части нужно найти какие четыре пары из вентилей переставлены местами — в общем случае полный перебор не подходит, нужно понять что именно делает схема, чтобы определить, как именно конкретные вентили влияют на выход системы.