Задачи для программистов, ответы на задания различной сложности


Оглавление (нажмите, чтобы открыть):

Где попрактиковаться в программировании: 30 ресурсов

Быть настоящим программистом — это не только смотреть тысячи часов видео, но и писать десятки тысяч строк кода. Подобрали для вас полезные ресурсы, на которых можно размяться в программировании. Расскажем о них в алфавитном порядке.

C Puzzles

Сайт с головоломками на языке С. Может быть полезен и тем, кто не знает C, но изучает С-подобные языки.

Code Abbey

Множество задач по программированию, рейтинг участников и форум.

CodeChef

Ресурс для регулярных соревнований по программированию. Есть раздел для практики с заданиями разных уровней сложности. Можно потренироваться или выиграть денежный приз.

CodeCombat

Ресурс для начинающих, где обучение построено как игра с возрастающей сложностью. Подойдет изучающим Python, JavaScript или HTML&CSS с нуля.

Codeforces

Русскоязычная платформа для марафонов по программированию. Пользователи делятся на два дивизиона — начинающие соревнуются отдельно от опытных. Можно участвовать в состязаниях или просто тренироваться на задачах в режиме дорешивания.

Codewars

Платформа с разными заданиями — от алгоритмов до шаблонов проектирования — ждет разработчиков, программирующих на Java, JavaScript, PHP, Go, Ruby и других языках. Предварительно надо пройти тестирование.

Coding Bat

Ресурс, посвященный Java и Python. Опытным и начинающим программистам доступны упражнения и справочные материалы по языкам.

CodinGame

Увлекательная практика в формате видеоигр. Поддерживаются 25 языков: Java, JavaScript, PHP, Python, Swift, C#, C++, Ruby и другие.

Empire of Code

Русскоязычный ресурс с задачами по Python и JavaScript в формате игры. Участники пишут код для стратегии и тактики персонажей.

Exercism

Сайт предлагает задачи на 48 языках программирования. Пользователь скачивает упражнения, решает их на собственном компьютере, а затем проверяет с наставником. Например, в разделе Python 111 упражнений и 70 менторов, его изучают 29 тысяч пользователей, а в разделе PHP — 64 упражнения, 14 наставников и 4 тысячи студентов.

HackerRank

Платформа для опытных кодеров. Создатели приглашают присоединиться к 5 миллионам пользователей сайта, чтобы тренироваться, готовиться к собеседованиям и искать работу.

InterviewBit

Сайт помогает подготовиться к интервью в Google, Facebook, Microsoft и других корпорациях и получить оффер.

LeetCode

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

MAXimal

Русскоязычный ресурс для освоения алгоритмов. Есть подробные описания и упражнения. Бонус — большая библиотека по программированию. Сайт не обновляется.

MindCipher

Ресурс позиционируется как социальный репозиторий с самыми занимательными головоломками.

Programming Praxis

Блог, в котором еженедельно размещают новые интересные задачи, чтобы программисты тренировали навыки и мозги.

Programming Skills

Сайт с онлайн-тестами и вопросами для технического интервью. Подойдет тем, кто работает с HTML, JavaScript, C#, Java, PHP, C# и другими ЯП.

Programmr

Платформа, на которой собраны задачки по Java, PHP, Python, C# и Ruby. Ресурс давно не обновляется, но потренироваться еще можно.

Project Euler

Сайт с непростыми заданиями для математиков и программистов. Задачи ранжируются по сложности.

Prolog Problems

На сайте программиста Вернера Хетта вы найдете краткий курс по языку Prolog и сборник упражнений для тренировки. Ресурс не обновляется.

PythonChallange

Сайт для тех, кто хочет освоить Python. Чтобы пройти многоуровневую игру Challenge, надо создавать небольшие программы. Сейчас в ней 33 уровня сложности.

Rosalind

Ресурс по изучению биоинформатики. Есть обучающий курс по Python.

Ruby Quiz

Еженедельная викторина по Ruby, которая приходит в рассылке. Автор ресурса отошел от дел, но инициативу продолжают энтузиасты. Можно подписаться на письма или порешать задачки из архивных выпусков.

На платформе Sphere Online Judge зарегистрированы 650 тысяч пользователей и размещено более шести тысяч заданий. Ресурс поддерживает 45 языков программирования, в том числе C, C++, Pascal, Perl, Haskell, Ocaml и другие.

SQL-EX.RU

Кладезь знаний для тех, кто изучает SQL. Множество упражнений для отработки навыков и рейтинг участников.

Timus Online Judge

Ресурс Уральского федерального университета, на котором собран архив задач по программированию с автоматической проверкой.

Topcoder

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

W3Resource

Портал предлагает огромное количество обучающих материалов по веб-разработке, базам данных, Linux и даже программам Excel или шаблонам Google Forms. Есть упражнения и квизы по базам данных, PHP, JavaScript, Java, Swift и другим языкам.

Питонтьютор

Русскоязычный ресурс для новичков в Python. Это интерактивный учебник с задачками, которые решаются без установки среды, прямо в браузере.

Школа программиста

Ресурс, который создали во Дворце пионеров в Красноярске. Он предлагает множество задач и разбирает их для начинающих программистов.

А вы где практикуетесь? Поделитесь в комментариях.

Быть настоящим программистом — это не только смотреть тысячи часов видео, но и писать десятки тысяч строк кода. Подобрали для вас полезные ресурсы, на которых можно размяться в программировании. Расскажем о них в алфавитном порядке.

C Puzzles

Сайт с головоломками на языке С. Может быть полезен и тем, кто не знает C, но изучает С-подобные языки.

Code Abbey

Множество задач по программированию, рейтинг участников и форум.

CodeChef

Ресурс для регулярных соревнований по программированию. Есть раздел для практики с заданиями разных уровней сложности. Можно потренироваться или выиграть денежный приз.

CodeCombat

Ресурс для начинающих, где обучение построено как игра с возрастающей сложностью. Подойдет изучающим Python, JavaScript или HTML&CSS с нуля.

Codeforces

Русскоязычная платформа для марафонов по программированию. Пользователи делятся на два дивизиона — начинающие соревнуются отдельно от опытных. Можно участвовать в состязаниях или просто тренироваться на задачах в режиме дорешивания.

Codewars

Платформа с разными заданиями — от алгоритмов до шаблонов проектирования — ждет разработчиков, программирующих на Java, JavaScript, PHP, Go, Ruby и других языках. Предварительно надо пройти тестирование.

Coding Bat

Ресурс, посвященный Java и Python. Опытным и начинающим программистам доступны упражнения и справочные материалы по языкам.

CodinGame

Увлекательная практика в формате видеоигр. Поддерживаются 25 языков: Java, JavaScript, PHP, Python, Swift, C#, C++, Ruby и другие.

Empire of Code

Русскоязычный ресурс с задачами по Python и JavaScript в формате игры. Участники пишут код для стратегии и тактики персонажей.

Exercism

Сайт предлагает задачи на 48 языках программирования. Пользователь скачивает упражнения, решает их на собственном компьютере, а затем проверяет с наставником. Например, в разделе Python 111 упражнений и 70 менторов, его изучают 29 тысяч пользователей, а в разделе PHP — 64 упражнения, 14 наставников и 4 тысячи студентов.

HackerRank

Платформа для опытных кодеров. Создатели приглашают присоединиться к 5 миллионам пользователей сайта, чтобы тренироваться, готовиться к собеседованиям и искать работу.

InterviewBit

Сайт помогает подготовиться к интервью в Google, Facebook, Microsoft и других корпорациях и получить оффер.

LeetCode

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

MAXimal

Русскоязычный ресурс для освоения алгоритмов. Есть подробные описания и упражнения. Бонус — большая библиотека по программированию. Сайт не обновляется.

MindCipher

Ресурс позиционируется как социальный репозиторий с самыми занимательными головоломками.

Programming Praxis

Блог, в котором еженедельно размещают новые интересные задачи, чтобы программисты тренировали навыки и мозги.

Programming Skills

Сайт с онлайн-тестами и вопросами для технического интервью. Подойдет тем, кто работает с HTML, JavaScript, C#, Java, PHP, C# и другими ЯП.

Programmr

Платформа, на которой собраны задачки по Java, PHP, Python, C# и Ruby. Ресурс давно не обновляется, но потренироваться еще можно.

Project Euler

Сайт с непростыми заданиями для математиков и программистов. Задачи ранжируются по сложности.

Prolog Problems

На сайте программиста Вернера Хетта вы найдете краткий курс по языку Prolog и сборник упражнений для тренировки. Ресурс не обновляется.

PythonChallange

Сайт для тех, кто хочет освоить Python. Чтобы пройти многоуровневую игру Challenge, надо создавать небольшие программы. Сейчас в ней 33 уровня сложности.

Rosalind

Ресурс по изучению биоинформатики. Есть обучающий курс по Python.

Ruby Quiz

Еженедельная викторина по Ruby, которая приходит в рассылке. Автор ресурса отошел от дел, но инициативу продолжают энтузиасты. Можно подписаться на письма или порешать задачки из архивных выпусков.

На платформе Sphere Online Judge зарегистрированы 650 тысяч пользователей и размещено более шести тысяч заданий. Ресурс поддерживает 45 языков программирования, в том числе C, C++, Pascal, Perl, Haskell, Ocaml и другие.

SQL-EX.RU

Кладезь знаний для тех, кто изучает SQL. Множество упражнений для отработки навыков и рейтинг участников.

Timus Online Judge

Ресурс Уральского федерального университета, на котором собран архив задач по программированию с автоматической проверкой.

Topcoder

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

W3Resource

Портал предлагает огромное количество обучающих материалов по веб-разработке, базам данных, Linux и даже программам Excel или шаблонам Google Forms. Есть упражнения и квизы по базам данных, PHP, JavaScript, Java, Swift и другим языкам.

Питонтьютор

Русскоязычный ресурс для новичков в Python. Это интерактивный учебник с задачками, которые решаются без установки среды, прямо в браузере.

Школа программиста

Ресурс, который создали во Дворце пионеров в Красноярске. Он предлагает множество задач и разбирает их для начинающих программистов.

А вы где практикуетесь? Поделитесь в комментариях.

andresol

Блог Андрея Соловьева

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

Исторически первым я пришел на Codewars (мой аккаунт там). И он мне чем-то напомнил изучение иностранных языков на Duolingo: можно точно так же с полного нуля начать с самых простых задач, где требуется определить четное ли число или написать простейший for loop, минимум теории – максимум практики:

Конечно, тем, кто вообще никогда не программировал (вот у нас в школе, которую я закончил в 2002 году, программирования не было; на химфаке тоже; брат все учил по книжкам, но комп у нас был, поэтому что такое for loop, я смутно представлял), придется даже с простыми задачами лезть в гугл, на StackOverflow, но это будет не чтение теории, которую непонятно, куда применить, а поиски ответа на конкретный вопрос. Зато потом, после своего кривого алгоритма, можно будет посмотреть решение других людей и выучить из них еще больше. Я вот прямо скажу, что решив на Codewars 50 простейших задач по питону, я узнал о нем больше, чем от чтения 350-страничного учебника по Python для начинающих.

Задачи на codewars придумывают другие юзеры, и за несколько лет их накопилось несколько тысяч, самого разного уровня сложности (они обозначаются цифрами от 8 до 1: “восьмерки” – самые простые). На каких-то языках больше, на каких-то меньше. Некоторые задачи универсальны и могут быть переведены почти на любой язык. Другие – полностью зависят от фич определенного языка или группы языков. Этим Codewars очень понравился моему брату, который провел на этом сайте даже больше времени, чем я, и вышел на 21-е место в общей таблице пользователей (я где-то в районе 900-го места обитаю):

Мой брат глубоко изучил JavaScript, подтянул ассемблер, а когда в этом году на Codewars добавили языки формальных доказательств – тема, тесно связанная с его научной работой – такие как Coq, он зауважал этот сайт еще больше.

Я же начал прошлой весной с C#, потому что мы планировали переходить на кросс-платформенный движок Unity для создания приложений. Прорешал на нем несколько сотен задач, но год назад брат решил, что Unity нам не подходит и посоветовал мне учить нативную для андроида Java (на популярном нынче Kotlin там мало задач еще). Вот я так с тех пор на Java и решаю (а C# забыл). Недавно стал еще Python и JS решать – самые простые задачи 8-го и 7-го уровней. Для общего развития: на Python брат пишет скрипты по обработке файлов, на JS есть свой мобильный движок ReactNative. На Duolingo я так когда-то учил пять языков параллельно. Без практики почти все забыл, но основы в мозгу остались.

Но проблема с Codewars была и остается в том, что я не могу заставить себя решать сложные задачи (4 и сложнее). С простыми задачами я почти сразу вижу, как их решать и бросаюсь писать код. Через десять, максимум двадцать минут, моя программа проходит тесты, и я получаю моральное вознаграждение. Размышлять часами над сложными задачами, которые я, вполне возможно, и не могу решить в силу ограниченности моих познаний, мне скучно.

И вот недавно я завел аккаунт на LeetCode – еще одном сайте по решению задач, даже более известном, чем Codewars, потому что задачи оттуда часто используются компаниями для интервьюирования программистов. Там тоже есть (приблизительное) деление задач по сложности на простые, средние и трудные, но даже самая простая задача потребует уже определенных познаний. Правда, задачи при этом не привязаны к конкретному языку программирования, а тестируют абстрактные алгоритмы, которые фундаментально одинаковы и на Java, и на Python, и на C++.

Я снова рисковал завязнуть только на самых простых задачках (их там не тысячи, как на Codewars, но сотни – хватит на несколько месяцев), если бы не такая вещь как contests (соревнования). Раз в неделю, субботним вечером (по тихоокеанскому времени; в Китае утром) всем желающим предлагается решить за полтора часа 4 задачи (обычно 1 простая, 2 средние, 1 сложная).

Я никогда не участвовал в олимпиадах по программированию, но мне стало любопытно, решу ли я хотя бы одну задачу, и я записался на свой первый контест. После тренировок на Codewars я справился с простой задачей за 12 минут, у меня оставалось еще больше часа, но вот “средние” задачи для меня оказались не по зубам. Возможно, я допустил стратегическую ошибку, потратив все оставшееся время на задачу, которая объективно была сложнее другой. Но та другая была о “деревьях” – популярной структуре данных – а я решал о них всего одну задачу до этого и испугался деревьев. В итоге я больше так ничего и не решил и финишировал в районе 2000-го места.

Подобная же ситуация повторилась через неделю: я решил простую задачу за 12 минут, а потом все оставшееся время бился со средними задачами. Мне стало обидно: контест на полтора часа, а я отваливаюсь через 10 минут. И я засел за чтение теории (книги по алгоритмам, которые я считал, что мне не нужны в мобильной разработке), за разбор нерешенных мной задач и за решение задач сложнее “моей зоны комфорта”.

Уже на третьем контесте моя подготовка дала плоды: я смог решить три задачи и занять 550-е место. Возможно, они были чуть проще на этот раз, но если бы сильно проще, то другие участники обогнали бы меня как и раньше (при равенстве очков за решение задач места распределяются по времени, затраченном на решение). У меня даже оставалось 30 минут, чтобы подумать над “сложной” задачей. Но тут я уже был бессилен. Я дорешал ее через неделю с подсказкой брата (“делать двойную рекурсию”). Он сам явно мог бы решить там все задачи, все же это не “научные” проблемы, а вопросы для интервью, но он вообще не любит соревноваться на время. А меня порой захватывает азарт.

Неделю назад я поучаствовал в своем 4-м контесте, за полтора часа решил две задачи, а третью дорешал только через 25 минут после окончания (но я был на правильном пути; мой брат сказал, что она простая, и я должен был решать ее на контесте, но вот не решил). Ожидаемо оказался на 940-м месте, но все равно был доволен собой. После первых двух неудачных контестов мне было принципиально научиться решать эти задачи, а время – фактор второстепенный.

И вот я оказался с этими задачами на некоем распутье. Я не собираюсь проходить интервью в компании, я не собираюсь заниматься computer science в научном плане, для мобильных приложений умение решать алгоритмические задачи на время не пригодится. Нужно ли мне продолжать тратить время на эти сайты, или это чистая прокрастинация, которая только отвлекает меня от основной цели – научиться делать приложения?

Я уверен, что потрать я на контесты еще год-два, я буду гарантировано решать там четыре задачи и, если повезет, попадать в первую сотню. Денег или славы мне это не принесет. Я никогда не смогу обогнать лидеров, которые занимаются решением подобных задач всю жизнь (я посмотрел, что один из победителей контестов neal_wu еще в 2008-2010 годах брал золотые медали на международных олимпиадах по информатике, закончил Гарвард и работает в научном отделе Google; у него, наверно, такой отдых перед сном – зайти и решить все 4 задачи за 20 минут, напугав малышей).

Мастер Йода рекомендует:  Изучение циклов While, Do While и For в Javascript

Как я написал в Case Study #1, есть у меня талант решать задачи на время. В школе, универе или на интервью его очень ценят. Но в реальной работе над реальными проектами требуются другие навыки. В первую очередь не бросать работу, когда стало скучно, а доводить ее до конца. И я не знаю, какой контест смог бы меня научить такому, если даже финансовая мотивация от написания мобильных приложений не помогает мне довести хотя бы один из моих проектов до публикуемого состояния.

Все эти задачи в итоге сведутся не к изучению программирования, а к “занимательной математике”. К задачам, которые тоже раньше задавали на интервью: “Дано 12 шаров, один из них чуть тяжелее или легче остальных (неизвестно, легче или тяжелее), определите какой за три взвешивания”. Эту задачу я тоже решил, она хорошая, но никак не помогает разобраться с анимациями в андроиде.

Во многом я пишу этот пост, чтобы подвести некий итог решению задач. У меня так бывает: написал пост о фильмах и перестал их смотреть. Каждый учится по-своему, но если вы начинаете учить языки программирования я готов порекомендовать Codewars, если хотите посоревноваться в придумывании алгоритмов на время, LeetCode – неплохая платформа для этого. Мне она дала мотивацию разобраться с рекурсией. Я определенно продолжу решать там задачи время от времени, чтобы не забыть Java. Но надеюсь, что когда-нибудь напишу здесь пост и о своем собственном приложении, а не только о том, как я решаю чужие задачи.

Как ускорить решение задач по программированию

Я сегодня сел решать задачу для начинающих (решил её на Java, но это неважно, я всё равно не использовал никаких библиотек, что C++, что Java в моём случае разницы почти не видно — написал сюда, потому что здесь больше людей). Потратил на неё 4 часа. Писал код с 10 до 2 часов, причём задача элементарная. Сначала думал, потом написал код — код не работал. Исправлял миллион ошибок. Там ошибка, здесь ошибка.

Да, я её решил, но меня беспокоит, что я решаю задачи очень медленно. Как сделать так, как думать быстрее, какие приёмы можно использовать, чтобы решать простые задачи быстрее? Как заставить себя думать быстрее?

И за сколько начинающий программист должен по времени решать задачи, на которую я потратил 4 часа? Может быть, 15 минут или 5 минут.

Просто 4 часа на такой детский сад — это слишком-слишком много. Меня беспокоит, что я думаю слишком медленно.

Пилообразная последовательность
(Время: 1 сек. Память: 16 Мб Сложность: 38%)

Последовательность a1, a2, a3, … , an-1, an называется пилообразной, если она удовлетворяет одному из следующих условий:

Дана числовая последовательность. Требуется определить длину самой длинной ее пилообразной непрерывной подпоследовательности.
Входные данные

В первой строке входного файла INPUT.TXT записано натуральное число N – количество элементов последовательности. Во второй строке файла через пробел записаны N элементов целочисленной последовательности . Ограничения: N 0

19.01.2020, 14:11

Где можно скачать книги с примерами решениями задач задач по программированию
подскажите где можно скачать книги с примерами решениями задач задач по программированию (что бы.

Сборник задач по программированию
Можете скинуть методичку с задачами с четкой формулировкой для обучения кодинга на яве, уровень от.

Решения задач по программированию
Сюда кидаем простые задачи по паскалю. Для университета или школы. 1)Определить, является ли.

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

Сборник задач по программированию на СИ
Здравствуйте! Хочу узнать, есть ли сборник задач по программированию на языке СИ? Видел такие.

19.01.2020, 14:22 2

Сразу вспоминается момент из фильма «Пароль рыба-меч» со взломом Пентагона

Тема бредовая. Все мы индивидуальны. Кто-то и за 4 часа задачу не решит.
Но у вас, я так полагаю, просто не хватает практики, рука не набита.
Изучая язык, вы со временем будете лучше знать конструкции языка, «синтаксический сахар». Усвоите контейнеры, стандартные алгоритмы, их асимптотическую сложность для основных операций. И уйдут ошибки, связанные с синтаксисом языка, а работа программы ускорится от выбора правильного инструмента.

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

19.01.2020, 15:08

мне кажется лучший способ быстро думать

Меню пользователя @ obivan
19.01.2020, 15:54 4 21.01.2020, 10:20 [ТС] 5

Я также придумал следующие вещи для повышения скорости решения задач: завёл для себя файл в Экселе. В нём у меня следующие колонки:

1. Номер задачи
2. Сложность задачи
3. Процент решаемости задачи другими людьми
4. Время, потраченное на решение задачи
5. Начало решения задачи: час и минута
6. Конец решения задачи: час и минута
7. Язык, на котором решил задачу

Цель — смотреть на эти записи иногда и убеждаться в том, что со временем твоя скорость растёт. Скажем, неделю назад или месяц назад ты решил задачу со сложностью в 40 процентов за 4 часа, а сейчас — за 3 часа.

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

Надеюсь, что такая система будет стимулировать решать всё быстрее и быстрее. А потом будет интересно проанализировать свой файл, когда будет накоплено много данных по статистике решения задач. Чтобы видеть свой прогресс.

Добавлено через 18 минут
И ещё в чём тут заключается фишка: ты соревнуешься сам с собой.

Когда ты просто решаешь задачу, то соревнуешься с машиной: смог ты преодолеть или нет. А здесь ты ещё и соревнуешься сам с собой.

Ты соревнуешься со старой версией себя и стараешься решать задачи так, чтобы новая версия была лучше старой. И это добавляет интереса к подобной игре.

Задачи на собеседованиях от Acronis и решения задач от Custis

Содержание статьи

«За что бьют сисопа? За отсутствие бэкапа!» Корни этой мудрости потерялись в веках, а само слово «сисоп» уже подзабылось, но за отсутствие бэкапа по-прежнему кого-то бьют. Слабые тела админов и простых пользователей защищает не так уж много производителей ПО, и из них, пожалуй, лидирующим можно назвать Acronis — трудно найти в нашей стране пользователя, данные которого ни разу не были бы спасены программами Acronis от грандиозного факапа. Про админов и говорить нечего — решения этой компании всегда занимали достойное место на загрузочных дисках для оказания первой помощи. А как быть программистам, которые хотели бы в нее трудоустроиться? Когда-то я сам шарил по сайтам с вакансиями и, как сейчас помню, был вдохновлен зарплатой, которую в Acronis обещали программистам на приплюснутом си.

Сегодня мы поговорим с Евгением Панищевым, руководителем QA Cloud направления международной компании Acronis. Его отдел занимается тестированием всех облачных решений Acronis: от Acronis Backup Cloud до Acronis Disaster Recovery. Задача лично Евгения — следить за тем, чтобы специалисты отдела выполняли свою работу еще лучше и эффективнее.

Евгений регулярно проводит собеседования при приеме людей в отдел сопровождения качества и считает, что хороший тестировщик должен обладать логическим мышлением, быть очень внимательным, уметь нестандартно мыслить и четко обосновывать свою точку зрения. Поскольку нет такого человека, который отрицал бы в себе наличие всех этих качеств :), для их проверки он дает на собеседовании ряд задач — как имеющих правильный ответ, так и «открытых», без единого решения.

Свой выбор задач Евгений объясняет так: «Первый тип задач позволяет проверить логические и аналитические способности кандидата, второй — понять, как именно он мыслит. На собеседовании важно и то и другое; иногда правильное живое мышление важнее верного ответа. Я знаю, что многие пренебрежительно относятся к задачам, предлагаемым на собеседовании, считая их пустой тратой времени, но это ошибка. Такие тесты позволяют за довольно короткое время понять, что за человек перед вами. Чем нестандартнее задачи, тем лучше понимание».

Примеры задач

Пример 1

Любимое задание Евгения — тестирование калькулятора: кандидату выдают обыкновенный настольный калькулятор и предлагают проверить его работу. Эта задача не имеет точного решения, зато позволяет выявить уровень человека как тестировщика. По тому, какие тест-кейсы он озвучивает, какие уточняющие вопросы задает, как выбирает ключевые параметры тестирования при наличии ограниченного числа тест-кейсов, можно понять, насколько человек разбирается в теме, готов ли учиться и воспринимать подсказки, умеет ли идти на компромисс и отстаивать свою точку зрения.

«Для любого айтишника важно знание алгоритмов, оценка их сложности и умение с ними работать, — говорит Евгений. — Без приличного математического аппарата невозможно стать высококлассным специалистом: чем выше вы подниметесь в иерархии программистов, тем с более высоким уровнем абстракции вам придется иметь дело. Это практически не зависит от того направления, которое вы выберете: математика нужна везде».

Пример 2

Чтобы проверить, как кандидат ориентируется в высоких алгебраических сферах, Евгений использует, например, такую задачу: «Дан массив S из n действительных чисел, а также число x. Как за время O(nlogn) определить, можно ли представить х в виде суммы двух элементов из S?»

В целом, по мнению Евгения, теория алгоритмов — это область, которой часто пренебрегают в ходе обучения программированию. «Обычно ограничиваются некоторыми общими словами и примерами. Знание сортировки „пузырьком“ или быстрой сортировки само по себе недостаточно для понимания темы. Кроме теории алгоритмов, необходима логика, а также умение ее применять — желательно всегда и везде».

Чтобы понять, умеет ли кандидат делать правильные умозаключения независимо от внешней формулировки, в Acronis используют следующую забавную задачу:

Пример 3

«Если лягушонок зеленый, то он веселый. Если лягушонок не веселый, то он сидит на берегу. Все лягушата либо зеленые, либо пестренькие. Если лягушонок пестренький, то он плавает в воде.

Из этого следует (нужно выбрать правильный ответ или ответы):

  • (A) все лягушата — пестренькие;
  • (B) все лягушата плавают в воде;
  • (C) все лягушата — веселые;
  • (D) все лягушата — не веселые;
  • (E) все веселые лягушата — зеленые».

«Задача выглядит детской и несерьезной, что зачастую сбивает многих кандидатов с толку: они не могут абстрагироваться от формулировки и работать с утверждениями так, будто это обычные логические последовательности. По сути, это действительно довольно простая задачка, которая дается на математических олимпиадах школьникам пятых-шестых классов. Но об этом я кандидатам не говорю; особенно тем, кто не смог ее решить» (задачка очень популярная, и, кстати, она была в одном из выпусков нашей рубрики. — Прим. ред.).

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

Еще одна классическая задача на логику от Acronis:

Пример 4

Предположим, что фраза «Завтра будет лучше, чем вчера» верна каждый день. Какое из утверждений может тогда быть неверным?

  • (A) Послезавтра будет лучше, чем сегодня.
  • (B) Сегодня будет лучше, чем позавчера.
  • (C) Послезавтра будет лучше, чем позавчера.
  • (D) Завтра будет лучше, чем позавчера.
  • (E) В 2006 году 1 апреля будет лучше, чем позавчера.

Ну и конечно, для IT-специалиста важно умение писать код и разбираться в том, что написали другие. По мнению Евгения, то и другое одинаково необходимо. «Если человек умеет писать код, но совершенно не способен понять код коллеги, то он бесполезен, — точно так же, как тот, кто прекрасно читает чужой код, но не может написать ни строчки своего».

Чтобы понять, насколько свободно человек владеет кодом, в Acronis используют задачи наподобие этих:

Пример 5

Объясните, что делает этот код:

Пример 6

Найдите ошибку в следующем коде:

Пример 7

Дан текстовый файл размером 32 Гбайт. На тестовой машине установлены Windows и питон. Нужно найти последнее вхождение слова ERROR и вывести десять строчек до и десять после. Как изменится решение, если исходный файл разбит на куски размером 2 Гбайт?

Наконец, есть еще один неочевидный параметр, по которому обычно оценивают кандидата. «Его называют по-разному, но мне больше нравится термин „толковость“. Это некая смесь „соображалки“, умения находить нестандартный подход и вообще работать с новыми и необычными задачами. Задачи для проверки этого качества вызывают самые большие споры. Практически все уже знают вопросы о том, почему крышка у канализационного люка круглая и сколько шариков может поместиться в автобусе. Такие вопросы можно считать дурацкими, но их нужно задавать, чтобы понять, как человек способен справиться с нестандартной ситуацией. Решения может не быть: это в данном случае не главное».

Пример 8

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

Никто не ждет, что кандидат с ходу назовет точное число или хотя бы сможет приблизительно его подсчитать. Главное — посмотреть, как человек мыслит, как подходит к задаче, как пытается найти ответ.

Но разумеется, есть и задачи с конкретным решением. Две из них Евгений предлагает вниманию читателей «Хакера». Те, кто первыми пришлют правильные ответы (обязательно с обоснованием), получат в качестве приза от компании Acronis ключи от кварти. нет, стоп, не то письмо. Победитель получит ключ для Acronis True Image 2015 — уникального ПО для резервного копирования в безлимитное облако на один год.

Задачи от Acronis

Куда слать правильные ответы?

Правильные ответы принимает Диана Круглова, Diana.Kruglova@acronis.com.
Спеши выиграть ключ Acronis True Image 2015 — уникальный софт для резервного копирования своего PC или Mac в безлимитное облако на один год!

Задача 1

Представьте, что у вас есть обыкновенные часы. Они идут точно, без сбоев. В этих часах меняют местами минутную и часовую стрелки. Сколько раз в сутки такие часы будут показывать правильное время?

Задача 2

Нужно написать на листе бумаги число 10 000 и обвести его в круг, не отрывая ручку от этого листа бумаги; при этом цифры не должны соединяться друг с другом.

Решение задач от компании Custis

Задача для разработчиков Oracle

Разработчик баз данных в свой первый рабочий день в компании Custis обнаружил, что в его проекте используется всего одна табличка с данными по отгруженным товарам (Т). В ней собираются данные по дате отгрузки (d), идентификационному номеру клиента (c) и количеству отгруженного товара (s). Разработчик проверил и убедился, что никаких ключей в таблице нет и по одному клиенту может быть сколько угодно фактов отгрузки в один день.

Почувствовав облегчение от того, что не придется возиться со страшными запросами, разработчик пошел на кухню выпить кофе и перекусить фруктами. После возвращения он с легким сердцем схватил первый же инцидент со Scrum-доски и прочитал следующее: «Нужен отчет по ежедневным отгрузкам товара по выбранному клиенту». Посоветовавшись с товарищами, он выяснил, что отчеты принято оформлять в виде view (представления), то есть для решения проблемы нужно сделать такой view, чтобы запрос

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

Как вы думаете, какой view в результате получился у нашего разработчика?

Ответ (приведенное решение нестандартное и требует владения особой уличной магией Oracle, но есть и другие варианты)

Задача для разработчиков C#

За день до релиза отдел тестирования обнаружил, что отчет об остатках товара формируется около часа. Вам была поручена задача оптимизировать процесс создания отчета. Профилировщик показал, что в коде

метод atlasClient.GetRests занимает около 98% общего времени построения отчета.

Предложите вариант оптимизации построения отчета. Почему ваш вариант работает быстрее? Сколько времени занимает построение отчета после вашей оптимизации?

Ответ (один из вариантов)

  • Используя ToArray() или аналоги, вычислить последовательность allProducts до ее использования при получении fewProducts, someProducts, manyProducts.
  • AllProducts является отложенным Linq-запросом, и его использование в трех выражениях приводит к многократному вычислению элементов последовательности. Вычислив последовательность один раз, мы сэкономим два «дорогих» вызова atlasClient.GetRests на каждый элемент последовательности, но нам потребуется дополнительный объем памяти для хранения результата. Из-за этого при больших объемах данных такое решение «в лоб» не всегда может быть применимо.
  • Такой вариант построения отчета будет занимать около двадцати минут.

Задача для разработчиков Java

Разработчик C# решил попробовать себя на поприще Java и перешел в Java-проект. Одно из первых заданий, которое он получил, — сделать таблицу с информацией о проданных товарах. В постановке задачи было написано, что нужны следующие столбцы: имя клиента, код клиента, название товара и стоимость товара. Посмотрев на реализацию такого рода таблиц в проекте, он понял, что при настройке таблицы придется написать что-то вроде

Прямо скажем, по сравнению с тем, как он делал это на родном dotNet, это выглядело совсем ненадежно — никаких проверок уровня компиляции, очень легко допустить ошибку. Хочется написать

А тут такое. Код получается небезопасный, IDE никак не подсказывает, что писать, и вообще. Решив не сдаваться и привнести свет истины в захолустное царство Java, он объяснил проблемы такой настройки таблиц другим Java-разработчикам. Ему отвечали, что проект ведется на Java 7, лямбд нет, а с анонимными классами для каждого поля настройка будет выглядеть жутко, поэтому «пишем, как можем». Однако, найдя единомышленников в стане Java, он смог реализовать движок, который позволял настраивать столбцы вот так:

Причем интерфейс настройки таблиц менять не пришлось, то есть на вход table.add приходит все та же строка customer.name. Не пришлось менять и модельные сущности («покупатель», «товар», «покупка» и другие), и даже не понадобилось никаких автогенерированных классов. Этот инструмент начали использовать везде, где нужно было сослаться на цепочку свойств.

Мастер Йода рекомендует:  Как создать эффект золотого текста в Photoshop

Как бы вы реализовали такой фреймворк? Важен только принцип, код писать не нужно.

Задача на логику при приеме на работу программистом

Сколько часов показывают последние часы?

Дубликаты не найдены

И как блядь вот это определяет навыки программиста?)

Если у программиста всё в порядке с логикой он должен посмотреть на это и уйти оттуда.

желательно в макдак, стоять на кассе

Между 2:33 и 4:31 увеличение на 1 час?

7 додумался. как 10 мин получились?

разница между 1 и 2- 41 мин, разница между 2 и 3 — 1ч58 мин, разница между 3 и 4- 41 минута, разница между 4 и 5 — ?

Хм =)) Ясно. Спасибо

6 часы это баг который показывает знак вопроса вместо времени. Либо скрывать, либо допиливать

забыл третий вариант — это фича

с кодировкой что-то

Я сюда деградировать пришёл, а не ребусы решать

6:11…по логике что время возрастает, а сумма всех цифр равна 8. Ну или 3:32 по логике, чтобы заполнить порядок 1 2 3. Вообщем выдавать правильные ответы можно бесконечно

+41;+118;+41;+118 идея такая.

Ваша логика посложнее, но вот не думаю, что ваш ответ сказал бы о профнепригодности, скорее наоборот.

Этот ребус не имеет никакого отношения к профпригодности.

Такие штуки дают, чтобы понять, может ли человек объяснить доступно и логически верно выбор того или иного ответа. В контексте комплексной проверки профессиональной компетенции вполне себе работающий вариант.

Способность обьяснять не имеет отношения к профпригодности программиста.

Программист — это очень широкое понятие, все зависит от должности, которую он занимает. В профессиональную компетенцию программиста на определенной должности могут входить такие навыки как умение вести техническую документацию, знание структуры работы определенного типа организаций или навык принятия управленческих решений в условиях различных мнений.

Для простого кодера, который выполняет команды, предлагаемый в посте тест действительно не нужен, но для инженера-программиста, который вынужден общаться с дизайнерами, клиентами и управленцами, параллельно работая над проектом, «способность объяснять» будет включена в понятие профпригодности

Решения задач с «ACMP — Школа программиста»

На нашем сайте представлены решения задач по программированию с сайта acmp.ru на языке C++, по таким темам как:

  • Условные операторы и операторы цикла
  • Строковые типы данных, строки
  • Одномерные и двумерные массивы
  • Функции
  • Сортировки
  • Рекурсия
  • Целочисленная арифметика, длинная арифметика
  • Теория графов
  • Структуры данных
Номер задачи Название задачи Задача
1236 Транспонирование — 4 Транспонирование — 4

Задана целочисленная матрица, состоящая из N строк и M столбцов. Требуется транспонировать ее относительно горизонтали.

Первая строка входного файла INPUT.TXT содержит два натуральных числа N и M – количество строк и столбцов матрицы. В каждой из последующих N строк записаны M целых чисел – элементы матрицы. Все числа во входных данных не превышают 100 по абсолютной величине.

В выходной файл OUTPUT.TXT выведите матрицу, полученную транспонированием исходной матрицы относительно горизонтали. 141 Дерево Неориентированный граф без петель и кратных ребер задан матрицей смежности. Требуется определить, является ли этот граф деревом.

Во входном файле INPUT.TXT записано сначала число N — количество вершин графа (от 1 до 100). Далее записана матрица смежности размером N×N, в которой 1 обозначает наличие ребра, 0 — его отсутствие. Матрица симметрична относительно главной диагонали.

В выходной файл OUTPUT.TXT выведите сообщение YES, если граф является деревом, и NO в противном случае. 1 A+B A+B.

Требуется сложить два целых числа А и В.

В единственной строке входного файла INPUT.TXT записано два натуральных числа через пробел, не превышающих 109.

В единственную строку выходного файла OUTPUT.TXT нужно вывести одно целое число — сумму чисел А и В. 108 Неглухой телефон Неглухой телефон.

Возможно, что Вы когда то играли в игру «Глухой телефон», либо слышали о ней. В этой игре участникам приходится передавать информацию друг другу различными способами: словесно, образно, бывает даже приходится писать левой рукой текст, который другой участник команды должен будет прочитать. Так же известно, что практически никогда передаваемая информация не доходит до конечного адресата. Обозначим за Fi(x) функцию, которая преобразует текст передаваемой информации x в ту, которую получит участник i+1 от участника i. Тогда последний n-й участник получит данные y, которые будут выражаться следующей формулой:

Но Вам необходимо исключить какие-либо внешние факторы, которые могут исказить исходную информацию и Вы должны реализовать программу «неглухой телефон», которая сможет безошибочно доставлять исходные данные, т.е. в нашем случае функция Fi(x) = x для всех i от 1 до n-1.

В единственной строке входного файла INPUT.TXT записано натуральное число от 1 до 100.

В выходной файл OUTPUT.TXT нужно вывести в точности то же число, которое задано во входном файле. 903 Бисер Бисер.

В шкатулке хранится разноцветный бисер (или бусины). Все бусины имеют одинаковую форму, размер и вес. Бусины могут быть одного из N различных цветов. В шкатулке много бусин каждого цвета.

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

Входной файл INPUT.TXT содержит одно натуральное число N — количество цветов бусин (1 ≤ N ≤ 109).

В выходной файл OUTPUT.TXT выведите ответ на поставленную задачу. 195 Эния Эния.

Неспокойно сейчас на стапелях шестого дока межгалактического порта планеты Торна. Всего через месяц закончится реконструкция малого броненесущего корвета “Эния”. И снова этому боевому кораблю и его доблестной команде предстоят тяжелые бои за контроль над плутониевыми рудниками Сибелиуса. Работа не прекращается ни на секунду, лазерные сварочные аппараты работают круглые сутки. От непрерывной работы плавятся шарниры роботов-ремонтников. Но задержаться нельзя ни на секунду.

И вот в этой суматохе обнаруживается, что термозащитные панели корвета вновь требуют срочной обработки сульфидом тория. Известно, что на обработку одного квадратного метра панели требуется 1 нанограмм сульфида. Всего необходимо обработать N прямоугольных панелей размером A на B метров. Вам необходимо как можно скорее подсчитать, сколько всего сульфида необходимо на обработку всех панелей “Энии”. И не забудьте, что панели требуют обработки с обеих сторон.

Во входном файле INPUT.TXT содержатся 3 целых положительных числа N (N ≤ 100), A (A ≤ 100), B (B ≤ 100)

В выходной файл OUTPUT.TXT нужно вывести единственное число – вес необходимого для обработки сульфида тория в нанограммах. 1109 Следующее и предыдущее Следующее и предыдущее.

Напишите программу, которая считывает целое число и выводит текст с упоминанием следующего и предыдущего для него чисел.

Входной файл INPUT.TXT содержит целое число, не превосходящее 1000 по абсолютной величине.

В выходной файл OUTPUT.TXT выведите текст, аналогичный приведенному в примере. При выводе следует учесть все пробелы и знаки препинания. 33 Два бандита Два бандита.

Бандиты Гарри и Ларри отдыхали на природе. Решив пострелять, они выставили на бревно несколько банок из-под кока-колы (не больше 10). Гарри начал простреливать банки по порядку, начиная с самой левой, Ларри — с самой правой. В какой-то момент получилось так, что они одновременно прострелили одну и ту же последнюю банку.

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

Определите по этим данным, сколько банок не прострелил Гарри и сколько банок не прострелил Ларри.

В единственной строке входного файла INPUT.TXT записано 2 числа — количество банок, простреленных Гарри и Ларри соответственно.

В файл OUTPUT.TXT выведите 2 числа — количество банок, не простреленных Гарри и Ларри соответственно. 3 Пятью пять — двадцать пять! Пятью пять — двадцать пять!

Вася и Петя учатся в школе в одном классе. Недавно Петя поведал Васе о хитром способе возведения в квадрат натуральных чисел, оканчивающихся на цифру 5. Теперь Вася может с легкостью возводить в квадрат двузначные (и даже некоторые трехзначные) числа, оканчивающиеся на 5. Способ заключается в следующем: для возведения в квадрат числа, оканчивающегося на 5 достаточно умножить число, полученное из исходного вычеркиванием последней пятерки на следующее по порядку число, затем остается лишь приписать «25» к получившемуся результату справа. Например, для того, чтобы возвести число 125 в квадрат достаточно 12 умножить на 13 и приписать 25, т.е. приписывая к числу 12*13=156 число 25, получаем результат 15625, т.е. 1252=15625. Напишите программу, возводящую число, оканчивающееся на 5, в квадрат для того, чтобы Вася смог проверить свои навыки.

В единственной строке входного файла INPUT.TXT записано одно натуральное число А, оканчивающееся на цифру 5, не превышающее 4*105.

В выходной файл OUTPUT.TXT выведите одно натуральное число — A2 без лидирующих нулей. 1110 Последняя цифра Последняя цифра.

Требуется определить последнюю цифру натурального числа.

Входной файл INPUT.TXT содержит натуральное число, не превосходящее 109.

В выходной файл OUTPUT.TXT выведите последнюю цифру заданного числа. 1111 Число десятков Число десятков.

Требуется определить число десятков в заданном натуральном числе в его десятичной записи (то есть найти предпоследнюю цифру в числе).

Входной файл INPUT.TXT содержит натуральное число, не превосходящее 109.

В выходной файл OUTPUT.TXT выведите ответ на задачу. 1112 Сумма цифр числа Сумма цифр числа.

Найдите сумму цифр трехзначного натурального числа.

Входной файл INPUT.TXT содержит трехзначное натуральное число.

В выходной файл OUTPUT.TXT выведите сумму цифр заданного числа. 1038 Перевязь Перевязь.

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

Какое минимальное количество луидоров Портос должен заплатить мастеру за работу?

Входной файл INPUT.TXT содержит натуральное число N (N ≤ 109) – длина перевязи в миллиметрах.

В выходной файл OUTPUT.TXT выведите минимальное количество луидоров, которые Портос должен отдать за работу. 1113 Проверьте делимость Проверьте делимость.

Даны два натуральных числа. Требуется проверить: делится ли одно из них на другое?

Первая строка входного файла INPUT.TXT содержит два натуральных числа, разделенных пробелом. Числа не превосходят 100.

В выходной файл OUTPUT.TXT выведите 1, если одно из чисел делится на другое нацело. В противном случае следует вывести любое другое натуральное число, отличное от 1 и не превосходящее 109. 1115 Дележ яблок Дележ яблок.

N школьников желают разделить K яблок между собой. Они рассматривают два способа дележа:

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

Входной файл INPUT.TXT содержит натуральные числа N и K – количество школьников и яблок соответственно (N,K ≤ 109).

В выходной файл OUTPUT.TXT выведите три целых числа через пробел:

количество яблок, которые достанутся всем школьником при первом способе дележа;
количество яблок, которые окажутся в корзине при первом способе дележа;
количество обиженных школьников во втором случае дележа. 1114 МКАД МКАД.

Длина Московской кольцевой автомобильной дороги —109 километров. Байкер Вася стартует с первого километра МКАД и едет со скоростью V километров в час. На какой отметке он остановится через T часов?

Первая строка входного файла INPUT.TXT содержит два целых числа V и T – скорость (км/ч) и время поездки в часах соответственно. Числа разделены пробелом. Если V>0, то Вася движется в положительном направлении по МКАД, если же значение V 1003 Магазин канцелярских товаров Магазин канцелярских товаров.

Однажды, посетив магазин канцелярских товаров, Вася купил X карандашей, Y ручек и Z фломастеров. Известно, что цена ручки на 2 рубля больше цены карандаша и на 7 рублей меньше цены фломастера. Также известно, что стоимость карандаша составляет 3 рубля. Требуется определить общую стоимость покупки.

В единственной строке входного файла INPUT.TXT записаны три натуральных числа X, Y и Z через пробел, каждое из которых не превышает 109.

В выходной файл OUTPUT.TXT выведите одно целое число – стоимость покупки в рублях. 773 Гулливер Гулливер.

Из книги Джонатана Свифта мы знаем, что тот Гулливер посетил страну «Лилипутию», где живут лилипуты, окруженные вещами, животными и заводами небольшого размера. Сначала лилипуты боялись Гулливера, но позже они поняли, что такое соседство приносит им большую выгоду, и они стали помогать ему. Например, лилипуты делали кровать для Гулливера из своих маленьких матрацев, сшитых вместе. Лилипутам были известны размеры Гулливера. Довольно быстро они смогли просчитать количество матрацев, необходимых для шитья большого матраца. Но у них постоянно возникали сложности с их небольшим ростом и стеля постель, они иногда не могли сшить достаточно толстый матрац.

Входной файл INPUT.TXT содержит два целых числа, которые разделены пробелом: K – коэффициент, отражающий во сколько раз Гулливер больше лилипутов, и M – количество слоев матрацев (2 ≤ K, M ≤ 100).

В выходной файл OUTPUT.TXT выведите количество матрацев лилипутов, необходимых для построения матраца для Гулливера. 92 Журавлики Журавлики.

Петя, Катя и Сережа делают из бумаги журавликов. Вместе они сделали S журавликов. Сколько журавликов сделал каждый ребенок, если известно, что Петя и Сережа сделали одинаковое количество журавликов, а Катя сделала в два раза больше журавликов, чем Петя и Сережа вместе?

В единственной строке входного файла INPUT.TXT записано одно натуральное число S – общее количество сделанных журавликов (S 1116 Разность времен Разность времен.

Даны значения двух моментов времени, принадлежащих одним и тем же суткам: часы, минуты и секунды для каждого из моментов времени. Известно, что второй момент времени наступил не раньше первого. Определите, сколько секунд прошло между двумя моментами времени. Программа на вход получает три целых числа – часы, минуты, секунды, задающие первый момент времени и три целых числа, задающих второй момент времени. Выведите число секунд между этими моментами времени.

/dev/energy

Сайт о том, как стать программистом и как с этим жить потом

Какие задачи решать начинающему программисту?

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

День за днём Вы получаете всё больше информации в области IT, узнавая о новых возможностях выбранного Вами инструмента. Почти наверняка любой из выбранных Вами способов изучения имеет набор примеров реализации изучаемого подхода. Например, когда Вы изучаете объектно-ориентированное программирование, Вам обязательно расскажут о конструкторах, сеттерах и геттерах, а возможно ещё и паттернах проектирования. Проводя собеседования, я пугающе часто сталкиваюсь с ситуацией, когда кандидат вполне себе канонически реализует Singleton, учитывая особенности языка, но при просьбе написать класс-одиночку, решающий реальную задачу, у кандидата наступает ступор. Причина его проста. В подготовке к собеседованию он просто заучил реализацию, узнав даже, что Singleton неплохо решает задачу соединения с базами данных. Но вот написать тот же Singleton для работы с БД — задача, выходящая за пределы классических примеров. Она совершенно несложная, но требует практики в написании таких классов на нескольких проектах. После чего заучивание кода становится бессмысленным, ведь человек понимает смысл реализации.

Таким образом, Вы в скором времени поймёте, что даже воспроизведение «Hello, World» примеров — это всего лишь маленький шаг через порог большой технологии. И нельзя говорить, что Вы её знаете, если Вы не написали при её помощи ни одного хоть сколько значимого проекта. Реализуя ту или иную задачу Вы практикуетесь, вырабатывая навыки, понимание технологии, а также ноу-хау, благодаря которым Вы начинаете ориентироваться в технологии на эмпирическом уровне.

С Вашей стороны довольно логичным будет вопрос: «Всё это очень здорово, но где мне без опыта и наставников найти задачи, которые будут прокачивать моё знание языка?». Давайте подробнее рассмотрим, как найти для себя задачки.

Начну я с наиболее простого варианта. Если Вы обучаетесь на курсах, то у Вас есть преподаватель. Хороший преподаватель должен общаться с Вами и отвечать на Ваши вопросы. Это его работа, он получает за это деньги. Поэтому нет ничего плохого в том, чтобы попросить своего преподавателя дать Вам какую-нибудь задачку, приближенную к реальности. Это может быть тестовое задание для кандидатов на уровень Junior или Middle, какая-то задача, не слишком ориентированная на тонкости бизнеса. Так или иначе, Ваш преподаватель скорее всего сможет найти для Вас что-то подходящее. Будучи преподавателем, я сам очень уважаю людей, которые стремятся получить как можно больше полезных знаний. Так что не стесняйтесь спрашивать. Кстати, на любой страничке моего сайта Вы найдёте кнопку «Написать мне», которая приведёт Вас на форму обратной связи, через которую Вы сможете попросить для себя задачу для тренировки.

Теперь усложним ситуацию. Вы смотрите оффлайн-вебинары и связи с преподавателем у Вас нет. Та же ситуация сформируется и при самостоятельном обучении по книгам. Как быть в таком случае? Есть несколько вариантов, использовать которые разумеется можно совместно.
Наиболее приближенные к реальности задачи можно найти на бирже фрилансеров. Зайдите на любой сайт, где размещаются задания для фрилансеров (например, freelance.ru). Поищите задания с небольшой оплатой — скорее всего, они не будут очень сложными, и подойдут для начальных этапов обучения. Дальше продвигайтесь по пути усложнения. Со временем Вы сможете не просто разбирать эти задачи «для себя», но и решать их непосредственно для заказчиков, получая за это деньги. Вы ведь здесь за этим, не так ли? ��

Такой вариант хорош, но не совсем. Его минус в том, что пока Вы не работаете с заказчиком, никто не сможет оценить выполнение Вашего кода. Вы просто делаете для того, чтобы сделать. Но и эта проблема, как оказывается, разрешима. Ранее я уже рассматривал сервисы тренировки навыков программирования. Сегодня мы посмотрим на них поближе. В качестве примера я возьму сервис
Codewars. Это сайт, на котором собирают множество задач по программированию — практические и теоретические. Но перед тем, как начать использовать этот ресурс, Вам надо будет выбрать язык программирования из списка доступных и доказать, что Вы с ним знакомы. Не пугайтесь, это несложно. Вам дадут небольшой кусочек кода и попросят найти в нём ошибку.

После регистрации и входа Вам становится доступен интерфейс решения задач (Kata). Все задачи имеют привязку к языкам программирования, а также градацию по сложности, схожую с поясами в восточных единоборствах. Самые простые имеют сложность 8 kyu, а самые сложные — 1 kyu и с 1 по 4 даны (dan). Также задачи разделены по тематическим тегам, чтобы Вы могли выбрать для себя наиболее подходящую задачу. У каждой задачи есть описание и набор автоматических тестов, которые покажут Вам, правильно ли с точки зрения логики Вами была решена выбранная задача.

Очень ценным является и то, что для каждой задачи доступны уже выполненные решения от других программистов. Не спешите смотреть в них! Тем более, что без решения они не будут для Вас доступны. Сравните их со своим вариантом после того, как все тесты для Вашего решения выполнятся без ошибок. Это отличный способ понять, какие пробелы в знаниях языка Вам необходимо заполнить. Также к каждой задаче есть вкладка обсуждения, на которой можно посмотреть мнения других программистов о постановке задачи или возможностях решения.

Решая задачи, Вы будете повышать и свой рейтинг программиста, который можно вполне сопоставлять со сложностью задачи, чтобы понять, подходит ли она для Вас. Также Вам будет доступен раздел Kumite, в котором решаются более комплексные задачи, чем в Kata. Но для начала Вам определенно стоит «прокачаться» в разделе Kata. Этому здорово способствует игровой процесс, похожий на развитие своего героя в какой-нибудь RPG.

Когда Вы станете выполнять всё более и более сложные задачи, совершенно естественным станет взгляд на какой-то ресурс в интернет с мыслью «а как бы это сделал я?». И это правильно. Но остерегайтесь больших задач. С ростом опыта Вы будете чувствовать свои силы и возможности, которые будут рисовать для Вас понимание того, что нужно сделать здесь вот такую архитектуру, а здесь ещё оповещение, а вот тут — красивое логирование. Не старайтесь решить все задачи сразу. Тогда Вы скорее всего переполните свою внутреннюю память, интерес к задаче утонет в груде задач, которые Вы для себя поставите, и работа над задачей сразу же остановится. Поэтому, приступая к масштабной работе, старайтесь в первую очередь декомпозировать (разделить) большую задачу на мелкие выполнимые задачи, затем запланировать их. Вы должны иметь чёткий пошаговый план выполнения большой задачи, чтобы понимать, в какой части пути находитесь, что ещё нужно сделать, а чего делать не стоит. Как я писал ранее, для любой большой работы важен чётко обозначенный финал. Тогда и только тогда он будет достижим.

А может быть дело и не в коде вовсе?

Резюме aka TL;DR
1. Очень здорово, если у Вас есть преподаватель или наставник. Просите его поставить Вам задачу!
2. Ищите задачи там, где они будут наиболее приближены к практике. Например, на биржах фрилансеров.
3. Используйте проверенные онлайн-ресурсы, такие как Codewars.

Надеюсь, моя статья поможет Вам в поиске интересных и полезных задач. А я желаю Вам успехов в этом!

Зачем решать задачи для программистов?

Мне очень нравится сайт codewars.com. На нем представлены задачи для программистов самой разной сложности. Большое количество языков и возможность посмотреть чужие варианты решения для меня — очень крутые возможности сайта. В этой заметке, я объясню, почему каждый программист должен решать хотя бы одну задачу в день.

Задачи будут держать ваш мозг в тонусе

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

Вы будете лучше знать язык

Многие задачи заставили меня читать документацию, потому что оказалось, что с ходу я не могу вспомнить многие названия функций/методов. Например, в начале попалась задача для JavaScript — написать функцию, которая переводить число из десятичной системы счисления, в двоичную. Я стал вспоминать школьные уроки информатики, как мы записывали руками в тетрадку единички и нолики и написал такой алгоритм. Когда я отправил решение и стал смотреть чужие — я ахнул! Оказалось, что самое простое решение просто использует второй параметр функции parseInt(string, radix). Я вообще не знал, что у этой функции есть второй параметр. Более того, если его не использовать, могут быть проблемы с тем, как будет интерпретироваться строчка.

Другой пример любопытного кода на Javascript. Простая задача по написанию функции, которая считает объём конуса. Результат нужно было округлить вниз. Я вполне разумно использовал Math.floor(num), но, как оказалось, округлить можно и другим способом — использовав два раза битовую операцию NOT, которая в языке совершается через двойную тильду

. При этом, согласно некоторым бенчмаркам, такая операция совершается быстрее, чем вызов Math.floor():

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

Понятно, что решением такой задачи является каррирование, но как его реализовать с нуля в JavaScript? Ответа я не знал, зато в гугле нашёл отличную статью на эту тему — https://medium.com/@kevincennis/currying-in-javascript-c66080543528#.o5a0hf9z0

Вы будете внимательнее читать условия задачи

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

Ask a small girl — “How old are you?”. She always says strange things… Lets help her! For correct answer program should return int from 0 to 9 😉 Assume test input string always val >

Моё решение брало первый символ строчки, преобразовывало его в целое и возвращало. А самый топовый вариант решения выглядит вот так:

И это годится именно по текущим условиям задачи.

Это интересно, полезно для кругозора и для будущего

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

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

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

Какие математические, логические и аналитические задачи задают на собеседовании? Ответы на них

Сегодня для того, чтобы устроиться на хорошую должность в крупной компании, нужно пройти длинный процесс отбора, который может включать себя от 1 до 5 этапов.

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

Дорогие читатели! Наши статьи рассказывают о типовых способах решения юридических вопросов, но каждый случай носит уникальный характер.

Если вы хотите узнать, как решить именно Вашу проблему — обращайтесь в форму онлайн-консультанта справа или звоните по телефону +7 (499) 938-47-92 . Это быстро и бесплатно !

Какую цель преследует работодатель?

Количество и сложность каждого из этапов отбора в компанию во многом обуславливаются ее уровнем, сферой деятельности и должностью, на которую проводится отбор.

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

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

Приведенное выше описание позволяет сделать единственный вывод: цель решения задач на собеседовании – проверить профессиональные и личностные качества кандидата, оценить его способность действовать в нестандартных ситуациях и брать на себя ответственность.

Виды задач, с которыми можно столкнуться

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

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

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

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

Какие математические задачи можно давать на собеседовании? Зачастую работодатели не требуют решения сложных логарифмических уравнений, поэтому справиться с такими заданиями удается каждому, кто не прогуливал уроки математики в школе.

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

Нестандартные задачи: это тип заданий, который по форме очень напоминает логические, однако для их решения понадобится не только напрячь смекалку, но и применить всю креативность, которая вам свойственна. Они могут не иметь правильного ответа в принципе или иметь несколько разных решений – как уже указывалось выше, главное в этом случае не ответ, а ход решения.

Какие встречаются чаще всего, и кому предстоит их решать?

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

  1. Кандидаты на должность программиста, IT-специалиста и т.п. Для подбора таких специалистов работодатели чаще всего используют логические, математические задачи на собеседовании, а также задания на знание основ программирования.
  2. Претенденты на работу в маркетинговых службах зачастую сталкиваются с обозначенными выше логическими и нестандартными задачами, кроме того, на собеседовании их могут попросить решить конкретный кейс (аналитическое задание) из области маркетинговых исследований.
  3. Те, кто проходят отбор в аудиторские и консалтинговые компании, должны подготовиться к встрече со всеми 4 типами описанных выше заданий. Если это международная компания, нужно также подтянуть английский, а будущих консультантов может ожидать решение кейса, относящегося к выбранной области деятельности.
  4. Кандидаты на работу в банковской сфере также часто сталкиваются с различными задачами, в данном случае многое зависит от конкретной должности. В большинстве случае собеседование включает в себя логические и математические задания, иногда аналитические.

Это не полный список профессий, которые предполагают использование задач на собеседовании, однако подобный анализ позволяет выявить закономерность: указанная выше классификация справедлива практически для любой отрасли.

Как подготовиться?

Логические и математические задания могут быть заданы как в текстовой, так и в тестовой форме.

Для подготовки к тестам лучше всего поможет прохождение IQ-тестов, которые уже были упомянуты ранее.

В сети интернет довольно много подобных тестов, самый известный создан англичанином Г. Айзенком.

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

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

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

Что касается четвертой категории задач, подготовиться к ним довольно сложно, так как они как раз и составляются с целью застать претендента «врасплох».

Примеры задач каждой категории и их решения

Распространенные логические задачи:

  1. В 00.00 на улице идет дождь. Насколько вероятно, что через 48 часов на улице будет солнечная погода? Ответ: Через 48 часов будет полночь, солнца на небе быть не может.
  2. Нужно бросить мяч так, чтобы он обязательно вернулся обратно. Как это сделать? Ответ: Нужно бросить мяч вверх.
  3. Пишущая ручка лежит на полу, вам необходимо его перепрыгнуть, но сделать это невозможно. Почему? Ответ: Ручка лежит вплотную около стены.

Распространенные математические задачи для собеседования:

  1. В вашем распоряжении находится веревка, которая сгорает в течение часа, и спички. Как отмерить с помощью них 30 минут? Ответ: Сложить веревку, поджечь оба конца одновременно, ждать, когда она догорит.
  2. Имеется 8 одинаковых по внешнему виду кубиков, один из которых тяжелее других. За какое наименьшее количество взвешиваний можно найти этот куб? Ответ: За 2 взвешивания. 6 кубиков разделить на две равные группы и взвесить. Из более тяжелой группы (или из оставшихся кубиков, если две группы одинакового веса) выбрать 2 кубика и взвесить их.
  3. Есть два ведра по 3 и 5 литров. Как с помощью них отмерить 4 литра жидкости? Ответ: Набираем жидкость в большое ведро, переливаем его в маленькое, выливаем маленькое ведро и переливаем туда остававшуюся в большом ведре жидкость – теперь в малом ведре 2 литра жидкости. Снова наполняем большое ведро, переливаем 1 литр в маленькое (так как там уже есть 2 литра), в большом остаются необходимые 4 литра.

ТОП-3 нестандартных задач с возможными ответами:

  1. За какие деньги вы помоете все окна Москвы? Ответ: Нужно сказать не общую сумму, а цену за единицу – к примеру, 1000 руб./окно.
  2. Крышка канализационного люка круглая. Почему? Ответ: Потому что так она не упадет в люк.
  3. Сколько настройщиков роялей в России? Ответ: Любой аргументированный, правильного решения нет.

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

Работник фирмы случайно был замечен на объекте конкурентов. После тщательного изучения факта оказалось, что он работает на обе компании, кроме того, деньги от оказания услуг клиентам оставляет себе. Работнику был сделан выговор с последующим увольнением. Назовите причины подобного поведения работника, сделайте выводы о работе трудового коллектива; оцените действия менеджмента фирмы; приведите свой вариант развития событий.

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

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

Не нашли ответа на свой вопрос? Узнайте, как решить именно Вашу проблему — позвоните прямо сейчас:

+7 (499) 938-47-92 (Москва)
+7 (812) 467-38-62 (Санкт-Петербург)

Задачи по программированию на C++

Задача 1. Телешоу. Решение на C++

В новом интеллектуальном телешоу участнику, проходящему в суперфинал, предлагается следующая игра: на каждом из n секторов большого барабана записывается буква латинского алфавита li. После минуты на размышления игрок указывает одну из позиций на барабане i. Его выигрыш вычисляется по такому правилу: для каждой позиции j меньшее из расстояний по и против часовой стрелке от i до j, измеренное в секторах, умножается на абсолютною величину разности номеров в алфавите букв li и lj , после чего все такие величины суммируются.

А Вы можете написать программу, находящую способ получения наибольшего выигрыша?

Первая строка входного файла INPUT.TXT содержит натуральное число n (1 ≤ n ≤ 100000) — размер барабана. Во второй строке задаются разделенные пробелами строчные латинские буквы, записанные на барабане.

В первой строке выходного файла OUTPUT.TXT выведите наибольший выигрыш, который можно получить при заданном расположении букв на барабане. Во второй строке выведите номер какого-нибудь из секторов, на который игрок должен для этого указать.

Задача 2. Треугольники — 4. Решение на C++

У Сени есть шоколадка, составленная из нескольких прилегающих друг к другу плиточек в форме правильных треугольников. Его брат Женя нашел эту шоколадку и решил сделать ее треугольной, съев все лишнее (ведь треугольные шоколадки намного вкуснее). Сколькими способами он может это сделать?

Например, из такой шоколадки:

можно сделать треугольную шоколадку со стороной 1 шестью способами или шоколадку со стороной 2 двумя способами. Итого восемь способов.

Входные данные

Форма шоколадки задается ее границей в порядке обхода по часовой стрелке. Первая строка входного файла INPUT.TXT содержит число n — количество отрезков на границе (1 ≤ n ≤ 5000). Далее n чисел от 1 до 6, задающих направление движения по границе (см. рисунок).

Выходные данные

В выходной файл OUTPUT.TXT выведите одно число — количество способов.

Задача 3. Узор. Решение на C++

В комнате решили сделать паркетный пол. Причем есть задумка выложить на полу некоторый узор. Плитки паркета, которыми выкладывается пол комнаты, состоят из квадратиков 1×1, каждый из которых может быть либо белым, либо черным. В свою очередь, комната имеет размеры NxM. На плане комнаты указано, какой квадрат комнаты какого цвета должен быть. Существует несколько форм паркетных плиток:

Квадратики одной паркетной плитки могут быть окрашены по-разному. Может существовать несколько типов плиток одинаковой формы, но окрашенных по-разному. Плитки разных типов могут иметь разную стоимость. Количество плиток каждого типа не ограничено. Плитки разрешается как угодно поворачивать (на углы, кратные 90 градусам). Не разрешается разламывать плитки, а также класть их лицевой стороной вниз.

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

Входные данные

В первой строке входного файла INPUT.TXT записаны три числа: N, M (размеры комнаты) и K (количество доступных видов плитки). 1

— это число от 1 до 4, описывающее форму плитки (см. рисунок выше)

— это натуральное число, не превосходящее 10000, задающее стоимость одной плитки такого типа

— это от одного до трех чисел 0 или 1. Количество чисел совпадает с количеством квадратиков, из которых состоит плитка. Числа задают цвета квадратиков плитки в том порядке, в каком квадратики пронумерованы на рисунке.

Мастер Йода рекомендует:  62 лучших видео для тех, кто хочет углубить знания в JavaScript
Добавить комментарий