Добро пожаловать на второй уровень, где мы решаем задачи Python из рейтингового режима Codr. Цель — достичь уровня Genius, так что присоединяйтесь ко мне в Codr!

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

Вторая ошибка ракеты должна быть числом, это не то, что мы можем легко догадаться, если не вычислим его:

a = [8, ?, 6]
b = [6, 2, 8]
cross(a,b):
   [ ?*8 - 6*6,
     6*6 - 8*8,
     8*2 - ?*6 ]
out = cross(a,b)
A = abs(out[2]) # -->  8*2 - ?*6
such that A == 32

32 = 8*2 - ?*6
? = (32-16)/-6
? = 2.6667
This number is not in the list of answers, something isn't right...
Notice that A = abs(out[2]), this means that out[2] could be negative, let's test:
-32 = 8*2 - ?*6
? = 8

Вот очень простая задача: сортировка массива чисел и запрос значения по 3-му индексу.
Отсортированный массив: [3,6,7,7,8]

В этом задании есть четыре ошибки, которые нам нужно исправить. Первая ошибка денежного мешка проверяет, находится ли c внутри чего-либо. Это что-то, вероятно, будет MP dict, так как оно несколько раз использовалось ниже с ключом c.

За дьявольской ошибкой следует значение False, и она находится в условии if, поэтому, скорее всего, это оператор сравнения (== или !=). По логике кода он должен проверять, не находится ли c в MP, поэтому баг должен быть ==.

Красное сердце должно быть c как индекс.

Панду бывает сложно понять с первого взгляда. Но каждый ключ в MP — это какой-то символ из T, так что panda, скорее всего, будет самим T. Эта строка в основном получает символ из T и индекса 1 и проверяет, сколько раз этот символ встречается в T (благодаря MP).

Функция dot работает с двумя массивами, что выглядит как скалярное произведение. Нам нужно найти такое значение для панды, чтобы точка возвращала 60.

Если вы посмотрите на функцию, вы увидите ключевую операцию s += a[i] * b[i]. Таким образом, каждый соответствующий элемент в a и b умножается и суммируется:

a = [6,2,2]
b = [?,8,4]
s = 0
while:
  s += 6*?
  s += 2*8
  s += 2*4
Find ? such that s == 60
60 = 6*? + 2*8 + 2*4
? = 6

Вот это чертовски полезная функция. К сожалению, нам не нужно полностью анализировать и понимать его ;) Нам нужно только исправить значение panda, которое является неким идентификатором.

Если вы посмотрите на некоторые шаблоны в этом коде, вы увидите, что эта строка появляется несколько раз: merged .append(...) и наша панда была решена.

Эта функция принимает один массив и возвращает логическое значение. Нам нужно исправить только две ошибки. Алмазная ошибка должна иметь значение False, потому что True уже возвращается ниже.

Красное яблоко может быть немного хитрым, но все, что проверяет условие, это то, что текущий элемент i меньше или равен элементу i - apple. apple может быть любым числом, однако оно должно быть действительным индексом массива и не нарушать никаких границ. Чаще всего такой код используется для сравнения предыдущего значения с текущим значением. Учитывая тот факт, что A должен привести к False, а входной массив увеличивается на два последовательных равных числа (= 5), это условие if будет истинным, и функция затем вернет False.

Нам нужно найти значение R, поэтому нам нужно проанализировать код.

Переменная S представляет собой строку чисел. Цикл for перебирает каждый символ в S. Переменная mp используется для подсчета количества вхождений каждого символа в S. В конце концов, R = mp['0'], что в основном спрашивает, сколько раз нулевой символ встречается в S.

Чтобы решить эти четыре ошибки, мы должны получить некоторое представление о том, что делает этот короткий алгоритм.

Учитывая массив, и пока массив не пуст, он зацикливается. Он удаляет последний (поп) из массива в x. Затем условие if сравнивает предыдущее (~ предыдущее) значение с x. Алмазная ошибка, вероятно, может быть !=, чтобы гарантировать, что сравниваются только действительные числа, и тогда зеленое сердце будет предыдущим. Если только x больше, чем prev, x будет присвоено R.

Затем у нас есть панда и ракета на одной линии. Мы знаем, что prev используется для отслеживания «предыдущего» элемента массива, поэтому лучше всего присвоить x элементу prev, так как x уже обработан: prev = x

Снеговик должен быть именем переменной, глядя на переменные, используемые ниже, мы сталкиваемся с people, которая еще не была объявлена ​​и имеет смысл, учитывая ее содержимое.

Ошибка дроплета должна иметь «имя», чтобы она соответствовала другим существующим объектам. И алмаз должен быть именем человека, вы можете посмотреть в списке возможных вариантов. В конце концов, это имя не имеет значения, потому что алгоритм интересуется только ana.

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

Чтобы решить R, нам нужно быстро проанализировать алгоритм. Для каждого элемента в массиве проверяется, не равен ли элемент 3, если да, то R установлено в True. В основном, если в массиве есть любой элемент, отличный от 3, он вернет True.

Вот так мы добрались до 3-го уровня (Продвинутый), следите за обновлениями! Если вам понравился этот пост, не забудьте присоединиться к Codr, поставить лайк и подписаться на меня ❤!