Я как-то уже давно хотел сделать подобный список. Список сайтов с задачами, который не был бы похож на простой список сайтов посвящённых спортивному программированию. Да, их тут не будет. Тут даже нет такого популярного являения как литкод, задачи для подготовки к техническому интервью. И даже чего-то похоже на привычные хакерские capture the flag практически нет.
Я считаю, что умения могут быть гораздо важнее чем знания и что научиться программировать можно только программирую. Научиться математике, только решая задачи, и с физикой аналогично. Именно поэтому я считаю, что задачи сами по себе важны.
Каталог задач по математике, собранных проектом МЦНМО (Московский Центр Непрерывного Математического Образования). Содержит, в основном, задачи из олимпиадок школьной математики.
Я как-то сказал, что не хватает такого для предметов из университетских курсов ВЫШ.МАТА. На что мне ответили, что я хочу задачник Фихтенгольца с интерфейсом сайта. Но это конечно же не вся правда, на этом сайте вы можете выбрать конкретную область математики, например теорию множеств, а также настроить под себя сложность предлагаемых задачек. Подойдёт для приобретения эвристик решения математических задач.
Задачи по математике, но решать их надо с написанием алгоритма на языке программирования. В отличие от большинства сайтов по спортивному программированию, нет проверки удачного выполнения исходного кода или каких-то ограничений по времени выполнения и по памяти. У сайта есть RSS, а значит можно подписаться и решать практически каждый день.
Project Euler. Подписаться.
Задачи по криптографии. Требуют не столько знания математики, сколько желания их решить, школьной математики хватает. А прямо строгих определений для конечных полей или колец знать не придётся.
Тем не менее, можно научиться нескольким типам атак на криптографические системы. Почему это важно? Потому что даже если вы не хакер, в том смысле, что решаете CTF или взламываете программы, то всё равно могут пригодиться знания о принципах реализации криптографии и том как что-то **НЕ** делать.
Так же как и с предыдущим пунктом какой-то проверочной системы и ограничений нет и есть возможность писать на любом языке.
Необычные и вообще нестандартные от слова совсем задачки по программированию из Стэнфорда. Чаще всего есть материалы и нужно решить на определённом языке.
Самый красочный пример это например задача Linked List Labyrinth. Учит разбираться с помощью отладчика в программах содержащих много связанных между собой структур. Конкретно здесь нужно в дебаггере пройти лабиринт из связанных списков. Есть варианты задания на C++ и Java.
На собеседованиях у вас могут потребовать написать автобалансирующиеся деревья. Но сколько я слышал от более опытных товарщей, они говорили, что в работе чаще с СУБД взаимодействуют чем пишут такие алгоритмы. Данный сайт позволяет потренироваться в написании запросов к базам данных на языке SQL.
https://app.codecrafters.io/courses
Сайт с курсами по разным достаточно сложным и большим проектам, которые тем не менее являются уменьшанной копией некоторых повседневных штук, без которых обойтись трудно — они плечи гигантов на которых мы стоим.
Что можно сделать:
- key-value СУБД по типу Redis
- Реляционную СУБД
- Контейнер (как линуксовый podman)
- Систему контроля версий (свой git)
Решение пошаговое, выполняешь небольшое задание, коммитишь, проходят тесты, говорят результат. На выбор несколько языков.
На сайте написано, что это литкод для линуксов, но я бы так не сказал. Скорее набор задачек обратных привычным CTF в том плане, что нужно что-то поченить, а не сломать. Правда конечно нужно чаще всего выяснить что конкретно сломано. Например одно из первых заданий заключается в том, что нужно определить какая программа пишет в логфайл и прибить её через kill. Есть ограничение по времени, и как я понял придётся использовать привычный совместимый с LSB дистрибутив линукса.
Спасибо дочитавшим до этого места. Я не то чтобы решал каждую задачу или даже хотя бы две на каждом приведённом сайте, однако если у вас есть какие-то идеи для дополнения и возможность написать мне, то я с радостью выслушаю. Не исключено, что сам буду использовать этот список и в дальнейшем обновлять.