5 задач по программированию для разработчика ПО

18
26405
Добавить в избранное

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


Всякий раз, когда я публикую вакансию Software Engineer, заявки от претендентов стекаются очень быстро. Однако меня беспокоит то, что среди них обязательно есть такие «специалисты», которые не знают, что значит «программирование».

Конечно, они думают иначе.

Я полагаю, что это нормально, знать только jQuery, если вы хотите подать заявку на место «Front-End Web Developer», но с каких пор «Software Engineer» означает лишь только знание HTML, JavaScript и CSS?

(Особенно я люблю тех, кто часами может говорить о XML, JSON, XSLT, SOAP, HTTP, REST, SSL и еще 200 акронимах, но не различает типы данных int и float.)

Можете ли вы написать что-нибудь на самом деле?

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

Как вы думаете, вы сможете это сделать?

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

5 задач

(Следующие задачи предельно просты, но вы бы удивились, узнав, сколько людей не могут с ними справиться. Вообще, они просто не могут ничего сделать. Серьезно.)

Задача 1

Напишите три функции, которые вычисляют сумму чисел в данном списке, используя цикл for, цикл while и рекурсию.

Задача 2

Напишите функцию, которая объединяет два списка, чередуя элементы. Например, с учетом двух списков [a, b, c] и [1, 2, 3] функция должна вернуть [a, 1, b, 2, c, 3].

Задача 3

Напишите функцию, которая посчитает первые 100 чисел Фибоначчи. По определению первые два числа в последовательности Фибоначчи равны 0 и 1, и каждое последующее число представляет собой сумму двух предыдущих. В качестве примера здесь приведены первые 10 чисел Фибоначчи: 0, 1, 1, 2, 3, 5, 8, 13, 21 и 34.

Задача 4

Напишите функцию, которая принимает список не отрицательных целых чисел, упорядочивает их так, чтобы они составляли максимально возможное число. Например, [50, 2, 1, 9], наибольшее сформированное число равно 95021.

Задача 5

Напишите программу, которая поместит + , –, или пробел в промежутках между цифрами 1, 2, …, 9 (в таком порядке) так, чтобы в результате получилось 100. Например: 1 + 2 + 34 — 5 + 67 — 8 + 9 = 100.

К сожалению, вы не тот, кто нуждается в этом посте.

Если вы потратили свое время на прочтение этой статьи (или любой другой о разработке программного обеспечения), вы, вероятно, достаточно хороши, чтобы решить эти и еще 5 задач в течение часа. Люди, которые думают, что это всё «глупости», как правило, не могут решить ничего.

Другие материалы по теме

27 сайтов с задачками для оттачивания навыков программирования
7 книг с задачами по программированию
Стандартные задачи на собеседовании

Хотите получать больше интересных материалов с доставкой?

Подпишитесь на нашу рассылку:

И не беспокойтесь, мы тоже не любим спам. Отписаться можно в любое время.




Комментариев: 18

  1. А я пятую решал так:
    — Находим количество вариантов расстановок
    — В цикле с количеством итераций равном количеству вариантов путем перевода номера итерации в троичную систему.
    — добиваем вариант нолями до нужной длинны слева (есть отсылка к 4-й задаче, но там справа расширял и не нолями.)
    — сливаем массивы (отсылка к задаче №2) заменяя элементы из массива вариантов, единицы плюсами, а двойки минусами.
    — считаем результат.
    Задачей особо не заморачивался, писал не на время , и не за час, в течении пары дней как было время садился и дописывал пару строк.
    Но я и не программист, сист. администратор среднего уровня.
    Вот теперь думаю, может не всё потеряно, подтянуть навыки, попрактиковаться и вперед! ПОПОЛНИМ АРМИЮ БЫДЛОКОДЕРОВ!

  2. Вы пишете в 4-й задаче:

    «Напишите функцию, которая принимает список не отрицательных целых чисел, упорядочивает их так, чтобы они составляли максимально возможное число. Например, [50, 2, 1, 9], наибольшее сформированное число равно 95021»

    Но ведь, очевидно, что число 95210 > 95021

    1. Из каких чисел массива [50, 2, 1, 9] в результате переведенных чисел в строки может получиться подстрока «952» ?

  3. Для Python по Задача 1 такая функция уже есть:
    x = [2,2]
    print(sum(x))
    Если бы претендент на вакансию дал такой ответ, Вы бы его зачли как правильный?
    (в духе Python — не усложнять)

  4. Четвертая
    public int find_max(int[] n )
    {
    int max = 0;
    int b ;
    if(n.length!= 0)
    {
    max = n[0];
    for( int i = 1; i < n.length; i ++ )
    {
    b = Integer.parseInt(max + "" + n[i]);
    max = Integer.parseInt(n[i] + "" + max);
    if(max < b) max = b;
    }
    }
    return max;
    }

    1. Oshibochka) Ya zabyl pro sort )

  5. С четвёртой задачей попотел — как же сравнить 8 и 60 или 555, что бы число 8 было больше, плюс записать всё это в массив. В итоге меня озарило приведение типов(писал на python) и сортировка строк а не integer.

    def bigger_number(a):
    a=[str(i) for i in a]
    a=sorted(a)
    return a[::-1]
    arr=[550,2,1,9]
    barr=bigger_number(arr)
    print(».join([i for i in barr]))

    1. Дмитрий Рябов

      Использовал быструю сортировку с кастомной функцией сравнения. По крайней мере пока сбоев не давало:
      def comp(a, b):
      a, b = str(a), str(b)
      if a == b:
      return -1
      if int(a[0]) > int(b[0]):
      return int(a)
      elif int(b[0]) > int(a[0]):
      return int(b)
      elif int(a[0]) == int(b[0]):
      if len(a) == 1:
      return int(a)
      elif len(b) == 1:
      return int(b)
      else:
      res = comp(a[1::], b[1::])
      if str(res) == a[1::]:
      return int(a)
      elif str(res) == b[1::]:
      return int(b)

      def nums(_arr):
      sorted = _arr
      pivoted = []
      for i in sorted:
      if i not in pivoted:
      pivoted.append(i)
      pivot = i
      pivots = 0
      less = []
      more = []
      else:
      continue
      for k in sorted:
      if comp(k, pivot) == pivot:
      less.append(k)
      elif comp(k, pivot) == k:
      more.append(k)
      elif comp(k, pivot) == -1:
      pivots += 1
      sorted = more + [pivot for j in range(pivots)] + less
      return sorted

    2. Алгоритм примерно такой: Вытаскиваем у всех чисел первые цифры и сравниваем их. Ну и располагаем в порядке убывания в зависимости от первой цифры. Если есть элементы у которых первая цифра одинаковая то сравниваем по второй цифре(если второй цифры в числе нет, то по последней(например 9 и 98)) и т.д. Вроде так

    3. 5)Для правильной сортировки, нужно что бы все знаки были больше числа с меньшем количеством знаков или если знаки одинаковые, то число должно быть само по себе больше, для количество знаков есть логарифм по основанию 10, а для определение N знака есть, 1000%(10^S)/(10^S-1), где S количество знаков

    4. Все равно неправильно, попробуй [9, 988, 9, 9].

  6. Alexandr_Zhytenko

    Добрый день! Я не программист, просто в свободное время изучаю Python.
    Просьба к автору статьи посмотреть на мои решения
    (https://github.com/AlexandrZhytenko/reply-to-the-article).
    Алгоритм решения последней задачи не знал, поэтому искал в Google.
    Спасибо.

    1. Я не автор, но 4-ая решена неправильно.

  7. Кто-нибудь, подскажите, как пятую задачу решать.

    1. Комбинаторный перебор: генерация размещений с повторениями

    2. Перебором через рекурсию можно.

Добавить комментарий