Добро пожаловать на второй уровень, где мы решаем задачи 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, поставить лайк и подписаться на меня ❤!