Як ми знаємо, програмістам на регулярній основі доводиться думати, аналізувати і знаходити часом неочевидні розв'язання різних завдань, великих та маленьких. Для цього кодери змушені активно використовувати свій мозок, який і так є вкрай "недешевою" іграшкою - мозок людини, маючи масу не більше 1,5-2% від маси тіла, споживає близько 25% всієї енергії. І це у середньої людини, а який відсоток енергії “з'їдає” мозок програміста, який активно працює над складним проектом, — страшно уявити (а точний показник вченим, швидше за все британським, треба тільки встановити). Мозковий фітнес.  Актуальні завдання для прокачування програмістських скіллів.Який із цього можна зробити висновок? Щоб стати хорошим програмістом, а потім і залишатися таким, потрібно прокачувати мозок, навчаючи його думати та знаходити рішення без надмірної напруги та на регулярній основі. Банально, як і всі реально діючі методи, але ефективно. Щоб допомогти вам тримати сіру речовину в черепній коробці в тонусі, сьогодні ми підготували добірку хороших ресурсів з головоломками та пазлами для програмістів, а також переклали з англійської кілька цікавих завдань.

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

Практично всі ресурси в добірці - англомовні, так що у вас буде можливість не тільки потренуватися у вирішенні кодерських проблем та головоломок, але й отримати додаткову практику застосування англійської мови у програмуванні. Мозковий фітнес.  Актуальні завдання для прокачування програмістських скіллів - 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 рази. Третя людина знизує руку всім іншим: 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-програмістів. Якщо знаєте цікаві головоломки для програмістів або хочете поділитися улюбленим завданням, пишіть у коментарях.