Я начал участвовать в AoC в 2015 году, когда прочитал пост на Хабре. В тот, первый, год пост появился поздно, 17 декабря, по этому в этом году мне захотелось напомнить об AoC заранее, чтобы желающие могли начать с самого начала.

AoC проходит 25 дней, с 1 до 25 декабря, сложность задач возрастает от тривиальной до невозможной. Все задачи связаны общим сюжетом, и постепенно открывают анимированную картинку.

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

AoC поощряет писать поддерживаемый код, так как задача каждого дня состоит из двух частей, и те кто смог использовать код первой части для сдачи второй получают существенное преимущество.

Задачи очень разнообразны, попадаются классические алгоритмы поиска, задачи на китайскую теорему об остатках, и множество заданий на разработку оптимизирующего компилятора/интерпретатора ассемблера, который меняется каждый год ;)

На реддите присутствует дружелюбное комьюнити

Есть интересный доклад от создателя проекта и автора задач:

В таблице рекордов из того, первого поста еще 100 свободных мест, вот ее ID для подключения: 55074-c2e83c69

Комментарии (10)


  1. forthuser
    25.11.2021 08:55

    решение можно делать на любом языке (на реддите есть ребята которые решают на разной экзотике, и даже экселе

    Насколько, например, решение таких задач в рамках АОС отличается от решения пополняемых задач с http://rosettacode.org/wiki/Rosetta_Code?

    P.S. Экзотических языков и даже решения на них на них разных задач есть в рамках и этой Wiki площадки, если кто то добавил решение на выбранном языке :)

    Есть и некоторый рейтинг популярности языков этой площадки
    image


    1. shoco
      25.11.2021 09:21
      +2

      В АОС есть какой-никакой сюжет, чувство прогрессии за счёт сбора звёзд и конечная достижимая цель (собрать 50 звёзд). Этот элемент игроизации серьёзно мотивирует особо ленивых кодеров вроде меня


      1. farafonoff Автор
        25.11.2021 09:27

        Совершенно разная направленность проектов. AoC познавательно-развлекательный, никто не сохраняет решения "на века" (хотя я храню свои в гитхабе: https://github.com/farafonoff/AdventOfCode , и вижу такие репозитории у многих игроков).


        1. forthuser
          25.11.2021 10:56

          Примерно так и представлял, что решаются задачи где то близкие в постановке
          и, вероятно, более акцентированные на практическом аспекте их понимания и применения.

          P.S. Поисковый запрос AdventOfCode на Github выводит больше всего репозиториев на Python языке (возможно и наибольшее форков их)

          Интересно какие задачи выходят в «трэнд» по сравнению с ранее предлагаемыми на конкурс в ретроспективе по годам.


          1. farafonoff Автор
            25.11.2021 12:13
            +1

            по моим ощущениям, с 15 по 19 годы нарастало количество задач на имплементацию ассемблера, в апогее было что-то такое https://adventofcode.com/2019/day/13 (в этой задаче нужно программно сыграть в пинг-понг с машиной написанной на ассемблере).

            20 год был больше сфокусирован на головоломках (например https://adventofcode.com/2020/day/17, 3 или 4х мерная "жизнь").

            Питонисты находятся в некотором преимуществе из-за хороших библиотек типа np, в которых многие вещи реализованы из коробки. Я на js как-то раз потратил целый час чтобы найти библиотеку для BigInt с операцией modPow


            1. commanderxo
              28.11.2021 17:31
              +2

              Да, 2019 был просто роскошным. У многих задач была физическая интерпретация, а раз так, то можно попробовать решить их на экзотическом железе. Вот пара моих решений:

              День 12 - задача трёх тел на тёплом аналоговом осциллографе


              День 13 на блинкерном табло
              3 Arduino nano в качестве драйверов матриц под управлением Esp32. Матрица работет не бесшумно, так что слышно как исполняется код!


              День 25 на переносном телевизоре с ЭЛТ


            1. forthuser
              07.12.2021 13:28
              +1

              В этом году, пара проектов решения задач с AoC 2021 на Github стартанули с использованием Forth языка.

              aoc2021

              AoC21Forth

              P.S. Первый, похоже, пока в «игре». :)


  1. impwx
    25.11.2021 19:28
    +1

    Для тех кто устал перекладывать JSON-ы и шлепать формы

    Участвовал в первые три года его существования, и задачи каждый раз были примерно одинаковые:


    • Напиши переборщик хешей до нахождения нужного числа нулей в начале
    • Напиши поиск по лабиринту в ширину
    • Напиши интерпретатор для ассемблеро-подобного языка, который должен содержать эвристические оптимизации чтобы программа выполнилась за разумное время
      На четвертый год решил не участвовать...


    1. farafonoff Автор
      26.11.2021 09:08

      Прошлый год прямо интересный был, я бы на вашем месте дал еще шанс.


  1. commanderxo
    28.11.2021 17:36
    +2

    После того как открыл Advent Of Code, моя годовая история ГитХаб стала выглядеть вот так:

    С нетерпеньем жду среды!