Случайно бродя по интернету я забрел на обсуждения того, в какие игры играют программисты (и отчасти математики), где был среди прочего упомянут такой "
Проект Эйлер" (у которого есть полная русская версия
вот тут).
Что представляет собой проект? По сути это довольно большое количество (сейчас 369) математически несложных, но довольно интересных задач, сложность имплементации которых постепенно возрастает.
Вот самая первая задача:
Если выписать все натуральные числа меньше 10, кратные 3 или 5, то получим 3, 5, 6 и 9. Сумма этих чисел: 23.
Найдите сумму всех чисел меньше 1000 кратных 3 или 5.
Задачи составлены так, что для их решения требуется найти оптимальный алгоритм: и если первые задачки можно решить тупо "в лоб", то задачи с номером "за сотню" уже требуют оптимизации алгоритма и сокращения поля перебора.
Например такие задачи как
найти 10001-е простое число,
сумму цифр числа 21000 можно довольно тривиально -- главное правильно выбрать типы данных чтобы не было переполнения (а там легко переполняется даже unsigned long во многих, казалось бы,
простых задачах). Многие задачи просто интересно решать -- например
взлом XOR-кода или поиски
пандигитальных простых чисел.
После начальной эйфории, когда я за два дня решил 25 задач и получил первый уровень, я стараюсь подходить к решению к удовольствием и решаю задачи медленно, старательно читая ветки форума, который открываются после решения очередной задачи и где можно посмотреть примеры решения этой задачи на других языках, в частности на интересных мне Scala и Haskell.
Если кому-то интересно -- присоединятесь и добавляйтесь в друзья -- таким образом можно видеть прогресс друг друга. Вот мой токен для добавления в друзья:
20504031296815_b841fc9430f1276528db0b347b498b73