JavaRush /Java блог /Random /Мозговой фитнес. Актуальные задачи для прокачки программи...

Мозговой фитнес. Актуальные задачи для прокачки программистских скиллов

Статья из группы Random
Как мы знаем, программистам на регулярной основе приходится думать, анализировать и находить порой неочевидные решения различных задач, больших и маленьких. Для этого кодеры вынуждены активно использовать свой мозг, который и так-то является крайне “недешевой” игрушкой — мозг человека, имея массу не более 1,5-2% от массы тела, потребляет около 25% всей энергии. И это у среднего человека, а какой процент энергии “съедает” мозг программиста, активно работающего над сложным проектом, — страшно представить (а точный показатель ученым, скорее всего британским, только предстоит установить). Мозговой фитнес. Актуальные задачи для прокачки программистских скиллов - 1Какой из всего этого можно сделать вывод? Чтобы стать хорошим программистом, а затем и оставаться таковым, нужно прокачивать мозг, обучая его думать и находить решения без чрезмерного напряжения и на регулярной основе. Банально, как все реально действующие методы, но эффективно. Чтобы помочь вам держать серое вещество в черепной коробке в тонусе, сегодня мы подготовили подборку хороших ресурсов с головоломками и пазлами для программистов, а также перевели с английского несколько любопытных задачек.

Сайты с задачами для программистов

Практически все ресурсы в подборке — англоязычные, так что у вас будет возможность не только потренироваться в решении кодерских проблем и головоломок, но и получить дополнительную практику применения английского в программировании. Мозговой фитнес. Актуальные задачи для прокачки программистских скиллов - 2
  1. Coderbyte

    Один из самых популярных англоязычных ресурсов с задачами для программистов. На нем можно найти более 200 задач разного уровня сложности, решать которые можно прямо на сайте онлайн с помощью одного из 10 доступных языков программирования (включая и Java).

  2. Programming Praxis

    Programming Praxis — это популярный блог, в котором на регулярной основе публикуются различные интересные и, главное, актуальные задачи для программистов. Обычно для целого ряда языков программирования. Задачи призваны помочь кодерам освоиться с последними изменениями в технологиях и подходах к программированию на практике.

  3. TopCoder

    TopCoder — это активное сообщество программистов, которые любят развиваться и решать разнообразные задачи. Регулярно публикуются новые задачи, успешное решение которых не только даст возможность попрактиковаться и повысить свое ЧСВ, но и получать денежные призы.

  4. CodeKata

    CodeKata — блог с большим количеством довольно оригинальных и остроумных задач для программистов, придуманных Дэйвом Томасом (Dave Thomas), одним из авторов известной книги Pragmatic Programmer (“Программист-прагматик. Путь от подмастерья к мастеру”). Задачи на сайте CodeKata отличаются разнообразием, а решения — актуальностью по отношению к реальной программистской работе.

  5. Peking University JudgeOnline for ACIP/ICPC

    Peking University JudgeOnline for ACIP/ICPC — это страничка Пекинского университета, на которой собраны задачи для программистов с разных соревнований и конкурсов. Сайт регулярно обновляется, решать задачи можно в реальном времени, а оценивает решения комиссия из экспертов Пекинского университета.

  6. Project Euler

    Еще один старый известный сайт с серьезными и нетривиальными задачами. “Project Euler — это сборник сложных математических и программистских задач, для решения которых требуется нечто большее, чем просто знание математики. Проблемы варьируются по сложности, а в основе подхода лежит индуктивное цепное обучение. То есть, решив одну задачу, вы откроете для себя новую концепцию, которая позволит вам решать другие, ранее недоступные для понимания задачи,” — говорят создатели ресурса.

  7. The Daily WTF

    The Daily WTF — это еще одно популярное сообщество программистов, которое устроено по принципу Bring Your Own Code (BYOC), то есть разработчики делятся на нем собственным исходным кодом для решения различных оригинальных задач. “Цель BYOC проста: предоставить вам, как разработчику программного обеспечения, возможность повысить свои навыки программирования в решении проблемы, немного более интересной, чем обычные, скучные вещи,” — говорится на сайте.

  8. Tproger

    Отличный русскоязычный сайт с алгоритмическими задачами, которые применяются для проверки навыков специалистов в ходе технических собеседований в таких компаниях, как Google, Facebook и другие. Представлено множество задач, в том числе оригинальных, разного уровня сложности.

  9. Al Zimmermann’s Programming Contests

    Известный авторский сайт, где “безумные программисты соревнуются за славу и крутые призы.” Соревнования проводятся раз или два в год, а имена отличившихся программистов публикуются на главной странице ресурса, что наверняка привлекает к ним интерес со стороны перспективных работодателей.

  10. Timus Online Judge

    Один из крупнейших русскоязычных архивов задач по программированию с автоматической проверяющей системой. Основной источник задач для архива — соревнования Уральского федерального университета, Чемпионаты Урала и прочие региональные программистские мероприятия. Также Timus Online Judge позволяет принять участие в онлайн-версиях большинства соревнований, которые регулярно проходят в Уральском федеральном университете.

5 интересных задач

Вот несколько любопытных задачек для тех, кому не терпится начать. Мозговой фитнес. Актуальные задачи для прокачки программистских скиллов - 3
  1. Загадка про блендер от Стива Джобса

    Задача: Вас уменьшили до размеров 5-центовой монеты и бросили в блендер. Ваш вес уменьшился так, что плотность вашего тела осталась прежней. Лезвия начнут вращаться через 60 секунд. Ваши действия?

    Это классическая задача, которую, как правило, связывают со Стивом Джобсом, основателем компании Apple. Когда Джобс вернулся в Apple в 1997 году, он лично проводил собеседования с каждым сотрудником компании и использовал эту задачу в качестве одного из первых испытаний.

    Решение:

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

  2. Сколько людей было на конференции?

    Задача: На конференции каждый гость пожал руку всем остальным. Было 66 рукопожатий. Сколько человек было на научной конференции?

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

    Классическое решение:

    Допустим, на конференции было n человек. Первый человек пожимает руку всем остальным: n-1 раз (n-1 человек). Второй человек пожимает руку всем остальным (но не первому, так как это уже было сделано): n-2 раза. 3-й человек пожимает руку всем остальным: n-3.

    Таким образом, общее количество рукопожатий будет = (n-1) + (n-2) + (n-3) + …… 0;
    = (n-1) * (n-1 + 1) / 2 = (n-1) * n / 2 = 66
    = n ^ 2 -n = 132
    = (n-12) (n + 11) = 0;
    = n = 12 ИЛИ n = -11

    Вариант -11 исключен, поэтому ответ: 12 человек.

  3. Бар и 25 стульев.

    Еще одна классическая и весьма остроумная задачка, на этот раз посложнее.

    Задача: Есть бар с 25-ю стульями, которые расположены в линию. Посетители этого бара — антисоциальные личности, поэтому, когда они заходят в бар, то всегда стараются найти место как можно дальше от остальных. Если постоянный посетитель заходит в бар и обнаруживает, что свободного места без соседства с кем-либо нет, он разворачивается и уходит. Владелец бара, естественно, хочет видеть можно больше посетителей. Владелец может указать место, на которое нужно сесть, только первому клиенту, тогда как все остальные сами выберут себе самое дальнее место от других. Предположим, что места пронумерованы от 1 до 25. Какое место должно быть занято первым?

    Решение:

    Первый человек должен сесть на стул 9 или 17 (из-за симметрии, не имеет значения, какое именно из двух мест). Предположим, он выбирает место 9. Следующий человек выберет место 25, так как оно самое дальнее от места 9. Следующие два человека займут места 1 и 17. Следующие три займут 5, 13 и 21. Следующие шесть будут занимать стулья 3, 7, 11, 15, 19 и 23. Таким образом, в баре разместится максимум 13 человек, и никто не будет сидеть рядом с другим человеком. Если место, отличное от 9 или 17, будет выбрано первым, общее количество посетителей бара будет меньше 13.

  4. Деньги в карманах и религия.

    Интересно составленная задача на нахождение алгоритма.

    Задача: У человека в кармане лежат деньги, общая сумма которых составляет от 90 до 95 долларов. По пути он посещает несколько храмов. Как только он входит в храм, его деньги удваиваются, и на выходе он жертвует 100 долларов в каждом храме. В результате, его карман становится пустым после посещения последнего храма. Теперь вопрос: сколько денег у него было изначально и сколько храмов он посетил?

    Решение:

    Начинаем отсчет с последнего храма:

    После посещения последнего храма (1) у него осталось 0 денег, поэтому => (0 + 100) / 2 = 50. У него было 50 долларов перед посещением последнего храма

    Перед посещением предыдущего храма (2) он имел (50 + 100) / 2 = 75.
    Перед посещением предыдущего храма (3) он имел (75 + 100) / 2 = 87,5.
    Перед посещением предыдущего храма (4) он имел (87,5 + 100) / 2 = 93,75.
    Перед посещением предыдущего храма (5) он имеет (93,75 + 100) / 2 = 96,875 - сумма превышает начальные условия.
    Ответ: у человека изначально было $93,75, и он посетил 4 храма.

  5. Случай в поле.

    Ну и напоследок еще одна старая классическая, даже можно сказать баянистая, задачка на логическое мышление.

    Задача: Среди пшеничного поля нашли мертвого мужчину. Он крепко сжимал в руках спичку. Отчего умер человек?

    Решение:

    Мужчина летел в самолете с тремя попутчиками. Мотор заглох, самолет начал падать. Мужчины обнаружили, что на четверых всего три парашюта и стали тянуть спички. Один из них вытянул короткую и вынужден был прыгать без парашюта.

Эпилог

Ну а для тех, кому данные задачки показались слишком простыми или чрезмерно общими, у нас есть более комплексные задачи по Java, включая задачи с подвохом, которые частенько даются на собеседованиях для Java-программистов. Если знаете интересные головоломки для программистов или хотите поделиться любимой задачей — пишите в комментариях.
Комментарии (10)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Human Уровень 18
19 мая 2020
второе задание можно решить с помощью сочетания из комбинаторики
26 апреля 2020
Как первая и пятая задаче связаны с логикой вообще и с программированием в частности?
Rustam Zinurov Уровень 23
23 апреля 2020
Чем КОНЬ отличается от КНОПКИ ? ответ в картинке.
23 апреля 2020
а как же Codeforces?
Kubik_13 Уровень 34
22 апреля 2020
Leetcode забыли
Дмитрий Уровень 25
22 апреля 2020
Есть еще как минимум CodeWars